本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 1.25:CSI 內聯卷已進階至 GA

CSI 內聯卷(CSI Inline Volumes)在 Kubernetes 1.15 中作為 Alpha 特性引入,自 1.16 版本起進入 Beta 階段。我們很高興地宣佈,此特性在 Kubernetes 1.25 中已進入正式釋出(GA)階段。

CSI 內聯卷類似於其他臨時卷型別,如 configMapdownwardAPIsecret。重要的區別在於其儲存由 CSI 驅動提供,這允許使用第三方供應商提供的臨時儲存。這種卷被定義為 Pod 規約的一部分,並遵循 Pod 的生命週期,意味著卷在 Pod 被排程時建立,在 Pod 被銷燬時銷燬。

1.25 版本有哪些新變化?

在 1.25 版本中,有幾個與此特性相關的新 Bug 修復,並且隨著其進入 GA 階段,CSIInlineVolume 特性門控已被鎖定為 True。沒有新的 API 變更,因此在 Beta 階段使用此特性的使用者除了這些 Bug 修復外,應該不會注意到任何重大變化。

何時使用此特性

CSI 內聯卷適用於需要遵循 Pod 生命週期的簡單本地卷。它們可用於從 CSI 驅動為 Pod 提供 Secret、配置資料或其他特殊用途的儲存。

當出現以下情況時,CSI 驅動不適合內聯使用:

  • 卷的生命週期需要比 Pod 更長
  • 需要卷快照、克隆或卷擴充套件功能
  • CSI 驅動需要應限制為管理員才能使用的 volumeAttributes

如何使用此特性

要使用此特性,CSIDriver 規約必須明確將 Ephemeral 列為支援的 volumeLifecycleModes 之一。以下是來自 Secrets Store CSI Driver 的一個簡單示例。

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: secrets-store.csi.k8s.io
spec:
  podInfoOnMount: true
  attachRequired: false
  volumeLifecycleModes:
  - Ephemeral

然後,任何 Pod 規約都可以引用該 CSI 驅動來建立一個內聯卷,如此示例所示。

kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline
spec:
  containers:
    - name: my-frontend
      image: busybox
      volumeMounts:
      - name: secrets-store-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
      command: [ "sleep", "1000000" ]
  volumes:
    - name: secrets-store-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "my-provider"

如果驅動支援任何卷屬性,你也可以將它們作為 Pod spec 的一部分提供

      csi:
        driver: block.csi.vendor.example
        volumeAttributes:
          foo: bar

用例示例

兩個支援 Ephemeral 卷生命週期模式的現有 CSI 驅動是 Secrets Store CSI Driver 和 Cert-Manager CSI Driver。

Secrets Store CSI Driver 允許使用者將來自外部 Secret 儲存的 Secret 作為內聯卷掛載到 Pod 中。當 Secret 儲存在外部託管服務或 Vault 例項中時,這非常有用。

Cert-Manager CSI Drivercert-manager 協同工作,無縫地請求證書金鑰對並將其掛載到 Pod 中。這使得證書可以在應用程式 Pod 中自動續訂和更新。

安全注意事項

應特別考慮哪些 CSI 驅動可用作內聯卷。volumeAttributes 通常透過 StorageClass 進行控制,並且可能包含應限制為叢集管理員才能使用的屬性。允許 CSI 驅動用於內聯臨時卷意味著任何有許可權建立 Pod 的使用者也可以透過 Pod 規約為驅動提供 volumeAttributes

叢集管理員可以選擇從 CSIDriver 規約的 volumeLifecycleModes 中省略(或移除)Ephemeral,以防止該驅動被用作內聯臨時卷,或者使用准入 Webhook 來限制該驅動的使用方式。

參考資料

有關此特性的更多資訊,請參閱: