HostPath數(shù)據(jù)卷
HostPath卷能將主機(jī)節(jié)點(diǎn)文件系統(tǒng)上的文件或目錄掛載到您的Pod中。本文介紹如何使用HostPath數(shù)據(jù)卷。
背景信息
阿里云ACK集群兼容社區(qū)HostPath本地掛載方案的詳細(xì)信息,請(qǐng)參見(jiàn)Hostpath。
掛載模式
HostPath支持以下幾種掛載模式。
掛載模式 | 描述 |
DirectoryOrCreate | 如果在給定路徑上什么都不存在,將根據(jù)需要?jiǎng)?chuàng)建空目錄,權(quán)限設(shè)置為0755,與Kubelet具有相同的組和屬主信息。 |
Directory | 在給定路徑上必須存在目錄。 |
FileOrCreate | 如果在給定路徑上什么都不存在,那么將在給定路徑根據(jù)需要?jiǎng)?chuàng)建空文件,權(quán)限設(shè)置為0644,具有與Kubelet相同的組和所有權(quán)。 |
File | 在給定路徑上必須存在文件。 |
HostPath數(shù)據(jù)卷使用示例
Pod中以直接定義
hostPath
的方式使用HostPath數(shù)據(jù)卷: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
通過(guò)PV和PVC定義
hostPath
的方式使用HostPath數(shù)據(jù)卷: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運(yùn)行時(shí)掛載HostPath數(shù)據(jù)卷:
Kubernetes生態(tài)中,Pod運(yùn)行時(shí),其掛載的數(shù)據(jù)卷不可以修改,所以原則上運(yùn)行中的容器不能動(dòng)態(tài)掛載數(shù)據(jù)卷。下面方式可以在一定程度上實(shí)現(xiàn)運(yùn)行中Pod動(dòng)態(tài)掛載外部存儲(chǔ)的需求。
說(shuō)明本方案依賴(lài)Linux中mountPropagation的Bidirectional屬性,可以將主機(jī)掛載目錄映射到容器中。
目標(biāo)Pod必須具有Privilege權(quán)限(Bidirectional需求)。
目標(biāo)Pod需要掛載一個(gè)主機(jī)目錄,并配置Bidirectional,運(yùn)行中的容器依賴(lài)該目錄接收外部掛載。
部署一個(gè)Nginx應(yīng)用使用HostPath數(shù)據(jù)卷的示例模板如下。
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
說(shuō)明主機(jī)目錄:/mnt/dynamic-volume。
Pod內(nèi)目錄:/dynamic-volume。
上述配置,可以在Pod運(yùn)行時(shí),在Pod所在節(jié)點(diǎn)上的/mnt/dynamic-volume/****路徑掛載外部存儲(chǔ),從而將外部存儲(chǔ)卷映射到Pod內(nèi)部,實(shí)現(xiàn)了運(yùn)行中Pod動(dòng)態(tài)掛載外部存儲(chǔ)的能力。