HostPath卷能將主機節點檔案系統上的檔案或目錄掛載到您的Pod中。本文介紹如何使用HostPath資料卷。
背景資訊
阿里雲ACK叢集相容社區HostPath本地掛載方案的詳細資料,請參見Hostpath。
掛載模式
HostPath支援以下幾種掛載模式。
掛載模式 | 描述 |
DirectoryOrCreate | 如果在給定路徑上什麼都不存在,將根據需要建立空目錄,使用權限設定為0755,與Kubelet具有相同的組和屬主資訊。 |
Directory | 在給定路徑上必須存在目錄。 |
FileOrCreate | 如果在給定路徑上什麼都不存在,那麼將在給定路徑根據需要建立空檔案,使用權限設定為0644,具有與Kubelet相同的組和所有權。 |
File | 在給定路徑上必須存在檔案。 |
HostPath資料卷使用樣本
Pod中以直接定義
hostPath
的方式使用HostPath資料卷:apiVersion: v1 kind: Pod metadata: name: test spec: containers: - image: nginx:1.7.9 name: test volumeMounts: - mountPath: /test name: test-volume volumes: - name: test-volume hostPath: path: /data type: DirectoryOrCreate
通過PV和PVC定義
hostPath
的方式使用HostPath資料卷:apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume labels: type: local spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hostpath spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
Pod運行時掛載HostPath資料卷:
Kubernetes生態中,Pod運行時,其掛載的資料卷不可以修改,所以原則上運行中的容器不能動態掛載資料卷。下面方式可以在一定程度上實現運行中Pod動態掛載外部儲存的需求。
說明本方案依賴Linux中mountPropagation的Bidirectional屬性,可以將主機掛載目錄映射到容器中。
目標Pod必須具有Privilege許可權(Bidirectional需求)。
目標Pod需要掛載一個主機目錄,並配置Bidirectional,運行中的容器依賴該目錄接收外部掛載。
部署一個Nginx應用使用HostPath資料卷的樣本模板如下。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 command: ["sh", "-c"] args: ["sleep 10000"] securityContext: privileged: true capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true volumeMounts: - name: dynamic-volume mountPropagation: "Bidirectional" mountPath: "/dynamic-volume" volumes: - name: dynamic-volume hostPath: path: /mnt/dynamic-volume type: DirectoryOrCreate
說明主機目錄:/mnt/dynamic-volume。
Pod內目錄:/dynamic-volume。
上述配置,可以在Pod運行時,在Pod所在節點上的/mnt/dynamic-volume/****路徑掛載外部儲存,從而將外部儲存卷映射到Pod內部,實現了運行中Pod動態掛載外部儲存的能力。