Kubernetes v1.33:Image Volume 進階至 Beta!
映象卷(Image Volumes)作為 KEP-4639 的一部分,在 Kubernetes v1.31 版本中作為 Alpha 功能被引入。在 Kubernetes v1.33 中,該功能晉級為 Beta。
請注意,該功能預設仍為**停用**狀態,因為並非所有容器執行時都完全支援它。CRI-O 從 v1.31 版本開始支援此功能的初始版本,並將在 v1.33 中新增對映象卷 Beta 版本的支援。containerd 已合併對該 Alpha 功能的支援,這將成為 v2.1.0 版本的一部分,並正在透過 PR #11578 來實現 Beta 版本的支援。
新增內容
映象卷晉級為 Beta 版的主要變化是支援透過 `spec.containers[*].volumeMounts.[subPath,subPathExpr]` 對容器進行 `subPath` 和 `subPathExpr` 掛載。這允許終端使用者掛載映象卷的某個子目錄,該子目錄仍以只讀(`noexec`)方式掛載。這意味著預設情況下無法掛載不存在的子目錄。與其他 `subPath` 和 `subPathExpr` 值一樣,Kubernetes 將確保指定的子路徑中不包含絕對路徑或相對路徑元件。為安全起見,容器執行時也需要再次檢查這些要求。如果卷中不存在指定的子目錄,則執行時應在容器建立時失敗,並透過現有的 kubelet 事件向用戶提供反饋。
除此之外,還為映象卷提供了三個新的 kubelet 指標
kubelet_image_volume_requested_total
:概述了請求的映象卷數量。kubelet_image_volume_mounted_succeed_total
:統計成功掛載的映象卷數量。kubelet_image_volume_mounted_errors_total
:統計失敗的映象卷掛載數量。
要為特定映象卷使用現有子目錄,只需將其用作容器 `volumeMounts` 的 `subPath`(或 `subPathExpr`)值即可。
apiVersion: v1
kind: Pod
metadata:
name: image-volume
spec:
containers:
- name: shell
command: ["sleep", "infinity"]
image: debian
volumeMounts:
- name: volume
mountPath: /volume
subPath: dir
volumes:
- name: volume
image:
reference: quay.io/crio/artifact:v2
pullPolicy: IfNotPresent
然後,在你的叢集上建立該 Pod
kubectl apply -f image-volumes-subpath.yaml
現在你可以附加到該容器
kubectl attach -it image-volume bash
並檢查卷中 `dir` 子路徑下的檔案內容
cat /volume/file
輸出將類似於
1
感謝您閱讀完這篇部落格文章!SIG Node 很自豪也很高興能在 Kubernetes v1.33 中交付此功能的晉級。
作為這篇部落格文章的作者,我想特別感謝**所有**參與其中的人員!
如果您有任何反饋或建議,歡迎透過 Kubernetes Slack (#sig-node) 頻道或 SIG Node 郵件列表聯絡 SIG Node。