kubernetes之subpath的使用


一.subpath簡單說明

在Pod中共享卷以供多方使用是很有用的。VolumeMounts.subPath屬性可用於指定所引用的卷內的子路徑,而不是其根路徑。

二.subpath使用場景

  • 1個Pod中可以有多個容器,這里將不同容器的路徑掛載在存儲卷volume的子路徑,這種場景需要使用到subpath。
  • volume支持將configMap/secret掛載到容器的路徑,但是會覆蓋容器路徑下原有的文件。如何支持選定configmap/secret的key-value掛載到容器中,且不會覆蓋掉原目錄下的文件,這個時候可以用subpath。

2.1 存儲卷掛載

# 這里我們提前創建好一個PVC-CLAIM名稱為pvc-subpath
[root@k8s001 subpath]# cat pvc.yaml 
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-subpath
  labels:
    release: stable
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /mnt/yuhaohao             # 這個是宿主機真實存在的目錄
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-subpath
  namespace: default
spec:
 accessModes: ["ReadWriteOnce"]
 resources:
   requests: 
     storage: 10Gi
[root@k8s001 subpath]# kubectl apply -f pvc.yaml 
[root@k8s001 ~]# cat subpath.yaml
[root@k8s001 subpath]# cat subpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-subpath-yuhaohao
spec:
  containers:
  - name: redis-container
    image: redis
    volumeMounts:
    - mountPath: /var/lib/redis             # 容器1的掛載目錄
      name: subpath-volume                  # 這里指定pvc的volume名稱
      subPath: redispvc                     # 存儲卷pvc-subpath要掛載的/mnt/yuhaohao的子目錄
  - name: nginx-container
    image: nginx
    volumeMounts:
    - mountPath: /var/www/nginx             # 容器2的掛載目錄
      name: subpath-volume                  # 這里指定pvc的volume名稱
      subPath: nginxpvc                     # 存儲卷pvc-subpath要掛載的/mnt/yuhaohao的子目錄
  volumes:
  - name: subpath-volume
    persistentVolumeClaim:
      claimName: pvc-subpath                # PVC的名字
[root@k8s-master zhanglei]# kubectl create -f subpath.yaml
[root@k8s001 subpath]# kubectl get pod 
NAME                   READY   STATUS    RESTARTS   AGE
pod-subpath-yuhaohao   2/2     Running   0          106s
[root@k8s001 yuhaohao]# pwd
/mnt/yuhaohao
[root@k8s001 yuhaohao]# ls
nginxpvc  redispvc

2.2 configmap掛載

2.2.1 創建configmap

[root@k8s001 subpath]# cat configmap.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-subpath
  namespace: default
data:
  example.property.1: hello      # key-value鍵值對
  example.property.2: world
  example.property.file: |-
    property.1=value-1
    property.2=value-2
    property.3=value-3
[root@k8s001 subpath]# kubectl apply -f configmap.yaml 
configmap/configmap-subpath created
[root@k8s001 subpath]# kubectl get cm
NAME                DATA   AGE
configmap-subpath   3      35s
[root@k8s001 subpath]# cat pod-configmap.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: configmap-subpath-test
  labels:
    purpose: configmap-subpath-test
spec:
  containers:
  - name: configmap-subpath-test 
    image: nginx
    volumeMounts:
      - name: config-volume
        mountPath: /etc/nginx/example.property.1       # 容器掛載的目錄路徑為容器的/etc/nginx,文件名為example.property.1
        subPath: example.property.1                    # 將key名稱作為文件名,hello作為文件內容
  volumes:
  - name: config-volume
    configMap:
      name: configmap-subpath      # 指定使用哪個CM
[root@k8s001 subpath]# kubectl apply -f pod-configmap.yaml 
pod/configmap-subpath-test created
[root@k8s001 subpath]# kubectl get pod 
NAME                     READY   STATUS    RESTARTS   AGE
configmap-subpath-test   1/1     Running   0          7s
[root@k8s001 subpath]# kubectl exec configmap-subpath-test cat /etc/nginx/example.property.1
hello

參考鏈接:https://www.cnblogs.com/gdut1425/p/13112176.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM