卷類型之hostPath
hostPath類型的卷可以把宿主機節點上的文件或文件夾掛載到pod中
先來看看hostPath類型的卷如何配置:
apiVersion: v1 kind: Pod metadata: name: test-pd spec: volumes: - name: test-volume hostPath: path: /data type: Directory containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - name: test-volume mountPath: /test-pd mountPropagation: None readOnly: true subPath: test.txt subPathExpr:
這里針對每一個配置項逐一解釋:
sepc.volumes: 配置宿主機節點上的掛載目錄
| 配置項名稱 | 是否必須 | 說明 |
|---|---|---|
| name | 必須 | 卷的名稱,在pod內必須唯一 |
| hostPath.path | 必須 | 宿主機上的目錄路徑,如果是符號鏈接,它將根據符號鏈接追蹤到實際路徑 |
| hostPath.type | 可選 | hostPath卷的類型,默認為“” |
hostPath.type的枚舉值有:
| 取值 | 說明 |
| DirectoryOrCreate | 如果給定路徑不存在,將根據需要在那里創建一個空目錄,權限設置為755,與Kubelet具有相同的組和所有權。 |
| Directory | 給定的目錄路徑必須存在 |
| FileOrCreate | 如果給定路徑不存在,將根據需要在那里創建一個空文件,權限設置為644,與Kubelet具有相同的組和所有權。 |
| File | 給定路徑上必須存在對應文件 |
| Socket | 給定路徑上必須存在一個UNIX socket |
| CharDevice | 給定路徑上必須存在字符設備 |
| BlockDevice | 給定路徑上必須存在塊設備 |
使用type字段時需要注意: 由於節點上的文件不同,具有相同配置(如從podTemplate創建的)的Pods在不同節點上的行為可能不同 當Kubernetes按照計划添加資源感知調度(?)時,它將不會使用hostPath聲明的資源 在主機上創建的文件或目錄只能由根用戶寫。你需要在一個有特權的容器中以root身份運行進程,或者修改主機上的文件權限,以便能夠寫入hostPath卷
containers.volumeMounts: 配置掛載到pod里的路徑
| 配置項名稱 | 是否必須 | 說明 |
| name | 必須 | 此處卷的名稱必須和spec.volumes下的某個卷的名稱一致 |
| mountPath | 必須 | 掛載到容器里的路徑,不能包含英文冒號‘:’ |
| mountPropagation | 可選 | 該參數決定如何將掛載從主機傳播到容器,反之亦然。默認為None |
| readOnly | 可選 | 是否只讀,默認為可讀寫 |
| subPath | 可選 | 將spec.volumes中的子目錄掛載到容器中不同的位置,默認為“”,也就是掛載到spec.volumes定義的根目錄 |
| subPathExpr | 可選 | 與subPath類似,但是路徑中可以支持從環境變量取值:${VAR_NAME},默認為“”,也就是spec.volumes定義的根目錄。和subPath只能有一個出現 |
mountPropagation的取值有:
None:默認值,卷在容器中以及宿主機上的后續掛載相互隔離
HostToContainer:任何在宿主機上創建的卷掛載在容器中都是可見的
Bidirectional:任何在容器中創建的卷掛載都會傳播到宿主機,然后傳播到所有使用此掛載的pod中的容器里
