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。

進一步閱讀