本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 1.25:CSI 內聯卷已進階至 GA
CSI 內聯卷(CSI Inline Volumes)在 Kubernetes 1.15 中作為 Alpha 特性引入,自 1.16 版本起進入 Beta 階段。我們很高興地宣佈,此特性在 Kubernetes 1.25 中已進入正式釋出(GA)階段。
CSI 內聯卷類似於其他臨時卷型別,如 configMap
、downwardAPI
和 secret
。重要的區別在於其儲存由 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 Driver 與 cert-manager 協同工作,無縫地請求證書金鑰對並將其掛載到 Pod 中。這使得證書可以在應用程式 Pod 中自動續訂和更新。
安全注意事項
應特別考慮哪些 CSI 驅動可用作內聯卷。volumeAttributes
通常透過 StorageClass
進行控制,並且可能包含應限制為叢集管理員才能使用的屬性。允許 CSI 驅動用於內聯臨時卷意味著任何有許可權建立 Pod 的使用者也可以透過 Pod 規約為驅動提供 volumeAttributes
。
叢集管理員可以選擇從 CSIDriver 規約的 volumeLifecycleModes
中省略(或移除)Ephemeral
,以防止該驅動被用作內聯臨時卷,或者使用准入 Webhook 來限制該驅動的使用方式。
參考資料
有關此特性的更多資訊,請參閱: