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動態掛載外部存儲的能力。