使用HostPath存儲卷
更新時間 2024-09-05 13:02:24
最近更新時間: 2024-09-05 13:02:24
分享文章
本節介紹了用戶指南: 使用HostPath存儲卷。
HostPath存儲卷能將主機節點文件系統上的文件或目錄掛載直接掛載到業務Pod 中。由于該方式存在諸多安全風險,且不適用于高可用場景,一般業務應用不推薦使用。
背景信息
云容器引擎服務兼容kubernetes原生HostPath本地掛載方案,關于HostPath特定場景使用用法及注意點參見:
使用限制
- HostPath 存儲卷可能會暴露特權系統憑據(例如 Kubelet)或特權 API(例如容器運行時套接字),可用于容器逃逸或攻擊集群的其他服務;
- 具有相同配置(例如基于同一 PodTemplate 創建)的多個 Pod 會由于節點上文件的不同而在不同節點上有不同的行為;
- 主機節點上特定文件或目錄只能由 root 用戶寫入。如需訪問這些文件,需要在特權容器中以 root 身份運行進程,或者修改主機上的文件權限以便容?能夠寫入 hostPath 卷。
掛載模式
HostPath支持以下幾種掛載模式:
| 類型 | 描述 |
|---|---|
| 空字符串(默認)用于向后兼容,這意味著在安裝 hostPath 卷之前不會執行任何檢查。 | |
| DirectoryOrCreate | 如果在給定路徑上什么都不存在,那么將根據需要創建空目錄,權限設置為 0755,具有與 kubelet 相同的組和屬主信息。 |
| Directory | 在給定路徑上必須存在的目錄。 |
| FileOrCreate | 如果在給定路徑上什么都不存在,那么將在那里根據需要創建空文件,權限設置為 0644,具有與 kubelet 相同的組和所有權。 |
| File | 在給定路徑上必須存在文件。 |
使用示例
pod中直接使用HostPath
- 使用kubectl連接集群,創建示例yaml文件hostpath-pod-example.yaml:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: registry.k8s.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# 主機節點上目錄位置
path: /data
# 此字段為可選
type: Directory
執行以下命令,創建Pod
kubectl apply -f hostpath-pod-example.yaml
- 查看創建的Pod:
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“工作負載”——“容器組”,在列表查看。
PV和PVC方式定義HostPath
- 使用kubectl連接集群,創建示例yaml文件hostpath-pv-example.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: hostpath-pv
labels:
type: local
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hostpath-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeName: "hostpath-pv"
- 執行以下命令,創建PV、PVC
kubectl apply -f hostpath-pv-example.yaml
- 查看創建的PV、PVC:
登錄“云容器引擎”管理控制臺;
在集群列表頁點擊進入指定集群;
進入主菜單“存儲”,在持久卷和持久卷聲明列表查看。