成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes Storage : 淺談如何實(shí)現(xiàn)一個(gè) CSI 插件

云計(jì)算 云原生
CSI 是 Kubernetes 存儲(chǔ)體系中的核心組件,為存儲(chǔ)供應(yīng)商提供了靈活且可擴(kuò)展的集成方式,也為 Kubernetes 用戶提供了高效穩(wěn)定的存儲(chǔ)解決方案。

現(xiàn)在,我將繼續(xù)和大家聊一聊關(guān)于 K8s 存儲(chǔ)的一個(gè)重要組成部分:Container Storage Interface (CSI)。在接下來的內(nèi)容中,我們將會(huì)了解到 CSI 的工作原理、核心概念以及如何將其集成到你的容器化環(huán)境中。

為什么需要 CSI ?它解決了什么問題?

在學(xué)習(xí) CSI 之前,了解其產(chǎn)生的背景以及它能夠解決的問題我覺得是很有必要的。

為什么需要 CSI

雖然 Kubernetes 平臺(tái)它本身支持了非常多的存儲(chǔ)插件,但是畢竟也是有限的,永遠(yuǎn)無法滿足用戶日益增長(zhǎng)的需求,比方說有客戶要求我們的 Paas 平臺(tái)必須接國(guó)產(chǎn)的存儲(chǔ)怎么辦?

面臨的問題,如何做集成?

Kubernetes 本身提供了一個(gè)強(qiáng)大的 Volume 插件系統(tǒng),最直接的方式就是向這個(gè) Volume Plugin 增加新的插件。

但是,想必大家也知道 Kubernetes 太復(fù)雜了,它有一定的學(xué)習(xí)曲線,這樣做一來成本比較高,再者直接集成第三方代碼,可能會(huì)對(duì) Kubernetes 平臺(tái)系統(tǒng)的可靠性和安全性產(chǎn)生隱患。

另外,這種方法它也不方便測(cè)試和維護(hù),比方說第三方存儲(chǔ)服務(wù)如果有變更,我們就需要提交變更代碼到 Kubernetes,等待 Code Review。換句話說,我們必須要等到 Kubernetes 發(fā)布才能將存儲(chǔ)服務(wù)的變動(dòng)上線,這就意味著存儲(chǔ)的集成與 Kubernetes 的發(fā)布周期捆綁在一起了。

所以直接和 Kubernetes 做集成是非常不方便的。

讓我們重新回過來看下,上面反復(fù)提到過的 In-Tree 和 Out-Of-Tree 這兩個(gè)概念,我相信從字面意思上大家都已經(jīng)理解了,再結(jié)合下面這張表格,大家心里是否都已經(jīng)有了答案?

圖片圖片

解決了什么痛點(diǎn)?

CSI 將三方存儲(chǔ)代碼與 K8s 代碼解耦,不同的存儲(chǔ)插件只要實(shí)現(xiàn)這些統(tǒng)一的接口,就能對(duì)接 K8s,用戶無需接觸核心的 K8s 代碼。

最重要的是,CSI 規(guī)范現(xiàn)在是業(yè)界容器編排統(tǒng)一的存儲(chǔ)接入標(biāo)準(zhǔn)。

圖片圖片

Container Orchestrators(CO)

那么,什么是 CSI?

以下是 ChatGPT 給出的回答:

CSI(Container Storage Interface) 是一個(gè)規(guī)范化的接口,用于容器編排引擎與存儲(chǔ)供應(yīng)商之間的通信。它允許存儲(chǔ)供應(yīng)商編寫標(biāo)準(zhǔn)的插件,以便容器編排引擎可以與其集成,從而實(shí)現(xiàn)更加靈活和可擴(kuò)展的存儲(chǔ)解決方案。

CSI 驅(qū)動(dòng)器由三個(gè)主要組件組成,每個(gè)組件都扮演著特定的角色:

  1. Node Service: 運(yùn)行在每個(gè) Kubernetes 節(jié)點(diǎn)上,負(fù)責(zé)在節(jié)點(diǎn)上掛載和卸載存儲(chǔ)卷,并處理節(jié)點(diǎn)級(jí)別的存儲(chǔ)操作。

  2. Controller Service: 運(yùn)行在 Kubernetes 控制平面中,負(fù)責(zé)管理存儲(chǔ)卷的生命周期,包括創(chuàng)建、刪除和擴(kuò)容等操作。

  3. Identity Service: 它是 CSI 驅(qū)動(dòng)器的第三個(gè)組件,它在 CSI 驅(qū)動(dòng)器注冊(cè)時(shí)提供標(biāo)識(shí)信息,并向 Kubernetes 集群公開驅(qū)動(dòng)器的支持能力。它負(fù)責(zé)告知 Kubernetes 驅(qū)動(dòng)器的存在,提供驅(qū)動(dòng)器的基本信息和功能支持。

CSI 的設(shè)計(jì)思想是將存儲(chǔ)管理和容器編排系統(tǒng)解耦,使得新的存儲(chǔ)系統(tǒng)可以通過實(shí)現(xiàn)一組標(biāo)準(zhǔn)化的接口來與 Kubernetes 進(jìn)行集成,而無需修改 Kubernetes 的核心代碼。

CSI 驅(qū)動(dòng)器的出現(xiàn)為 Kubernetes 用戶帶來了更多的存儲(chǔ)選擇,同時(shí)也為存儲(chǔ)供應(yīng)商和開發(fā)者提供了更方便的接入點(diǎn),使得集群的存儲(chǔ)管理更加靈活和可擴(kuò)展。

圖片圖片

Storage in Cloud Native Environment

CSI 適配工作是由容器編排系統(tǒng)(CO)和存儲(chǔ)提供商(SP)共同完成的,CO 通過 gRPC 與 CSI 插件進(jìn)行通信。相信大家也都觀察到了,CSI 在這里充當(dāng)了連接的紐帶,上層連接容器編排系統(tǒng),下層操作三方存儲(chǔ)服務(wù)。

CSI 的工作原理,它是如何工作的?

Typical CSI driver architecture

下面是 CSI 的一個(gè)典型架構(gòu),雖然 CSI 對(duì)于存儲(chǔ)提供商來說只需實(shí)現(xiàn)三個(gè)模塊即可,但是整個(gè)編排流程可以說是相當(dāng)復(fù)雜的。

圖片圖片

Kubernetes cluster with CSI

CSI 的整個(gè)運(yùn)轉(zhuǎn)流程會(huì)涉及到兩方面的組件:

?? 由 Kubernetes 官方維護(hù)的一組標(biāo)準(zhǔn) external 組件,他們主要負(fù)責(zé)監(jiān)聽 K8s 里的資源對(duì)象,從而向 CSI Driver 發(fā)起 gRPC 調(diào)用,詳見:Kubernetes CSI Sidecar Containers[1]。它們是與 CSI 驅(qū)動(dòng)器一起部署在同一個(gè) Pod 中,用于輔助 CSI Driver 完成一些額外的任務(wù)和功能。?? 各存儲(chǔ)廠商開發(fā)的組件(需要實(shí)現(xiàn) Identity Service,Controller Service,Node Service)

我們來看下左邊的 CSI Driver Controller 部分,它是通過多個(gè) Sidecar 組件配合第三方實(shí)現(xiàn)的插件(Controller Service)來完成的。

正如上面提到的,它負(fù)責(zé)管理存儲(chǔ)卷的生命周期,包括創(chuàng)建、刪除和擴(kuò)容等操作。換句話說,我們的存儲(chǔ)廠商能夠提供什么樣的能力,部署 Controller 的時(shí)候,就需要提供與之對(duì)應(yīng)的 Sidecar 容器一起部署。

好比說我的 CSI Driver 只提供了 Dynamic provisioning 的能力,其他能力的接口我都沒實(shí)現(xiàn),在控制器部署的時(shí)候,我只需要將 external-provisioner 和我的 Controller Service 部署在一個(gè) Pod 即可,組件的選擇完全取決于三方的實(shí)現(xiàn)。

Kubernetes CSI Sidecar Containers

#1. external-provisioner

external-provisioner 是一個(gè) Sidecar 容器,用于在 Kubernetes 中動(dòng)態(tài)地創(chuàng)建和刪除外部存儲(chǔ)卷。

當(dāng)一個(gè)新的 PVC (PersistentVolumeClaim) 被創(chuàng)建時(shí),external-provisioner 會(huì)向外部存儲(chǔ)系統(tǒng)發(fā)起請(qǐng)求,以創(chuàng)建相應(yīng)的存儲(chǔ)卷,并將其與 PVC 關(guān)聯(lián),從而滿足 Pod 對(duì)持久化存儲(chǔ)的需求。

external-provisioner 實(shí)際上會(huì)執(zhí)行檢查,以驗(yàn)證 PVC 中是否存在注解 volume.kubernetes.io/storage-provisioner,并且該注解的值是否與 CSI 驅(qū)動(dòng)程序的名稱相匹配。整個(gè)流程貫穿了 PV Controller 這個(gè)組件。

圖片圖片

provision

這里涉及到的兩個(gè)操作分別對(duì)應(yīng)著 Controller Service 中的 CreateVolume 和 DeleteVolume 兩個(gè)接口的實(shí)現(xiàn),它們的調(diào)用者正是 External Provisoner。

這一流程的核心是,external-provisioner 充當(dāng)了中間人,通過 Kubernetes 的 PVC 和 StorageClass 機(jī)制,將 Pod 的持久存儲(chǔ)需求傳遞給外部存儲(chǔ)系統(tǒng)。這使得存儲(chǔ)卷的創(chuàng)建和管理能夠無縫集成到 Kubernetes 集群中,為應(yīng)用提供了持久性的存儲(chǔ)解決方案。

思考

假設(shè)每個(gè) PVC 背后對(duì)應(yīng)的 Volume 都需要獨(dú)立加密,并且加密密鑰也各不相同,PVC 的 Spec 中已經(jīng)沒有額外的參數(shù)來提供這些信息了,那么我們?nèi)绾螌⑦@些加密密鑰傳遞給 CSI 接口呢?

這里有必要提一下 CSI Operation Secrets 這個(gè)概念,它允許針對(duì)每種不同的 CSI 操作定制不同的 Secret,并且通過 StorageClass 與之配合使用。

讓我們來看下面這個(gè) StorageClass 的定義作為例子:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: xfs2-sc-4-per-volume
provisioner: xfs2.csi.basebit.ai
parameters:
  csi.storage.k8s.io/provisioner-secret-name: ${pvc.name}
  csi.storage.k8s.io/provisioner-secret-namespace: ${pvc.namespace}

需要關(guān)注的是 parameters 字段中的 csi.storage.k8s.io/provisioner-secret-name 字段的值,它使用了變量 ${pvc.name}。怎么理解呢?

具體而言,當(dāng)我們使用 ${pvc.name} 作為 csi.storage.k8s.io/provisioner-secret-name 參數(shù)的值時(shí),每次創(chuàng)建 PVC 后,都可以為它創(chuàng)建一個(gè)對(duì)應(yīng)的 Provisioner Secret,并將該 PVC 的名稱作為 Provisioner Secret 的名稱。

這樣,每個(gè) PVC 都會(huì)擁有一個(gè)唯一的 Provisioner Secret,用于身份驗(yàn)證和認(rèn)證。Secret 的具體定義取決于每個(gè) CSI 驅(qū)動(dòng)器的實(shí)現(xiàn)。在針對(duì)創(chuàng)建存儲(chǔ)卷的場(chǎng)景中,CreateVolumeRequest 可以獲取到 Secret 的詳細(xì)信息。

這種參數(shù)化技術(shù)是 Kubernetes 中允許的一種靈活方式,可用于在運(yùn)行時(shí)動(dòng)態(tài)生成配置文件

provision、delete、expand、attach 和 detach 等操作通常也需要 CSI 驅(qū)動(dòng)程序在存儲(chǔ)后端使用憑證,后面就不再多做贅述了。

如需了解更多高級(jí)用法,請(qǐng)參考文檔:StorageClass Secrets[2]

#2. external-attacher

external-attacher 是一個(gè) Sidecar 容器,其作用是在 Kubernetes 節(jié)點(diǎn)上動(dòng)態(tài)地進(jìn)行外部存儲(chǔ)卷的 掛載(Attach) 和 卸載(Detach) 操作。

它是通過監(jiān)聽 Kubernetes API Server 中的 VolumeAttachment 對(duì)象,來觸發(fā) Controller Service 中的 ControllerPublishVolume 和 ControllerUnpublishVolume 兩個(gè)接口調(diào)用。

然而,并不是所有情況下都需要使用 attach/detach 操作,尤其是在一些分布式文件系統(tǒng)的 CSI 驅(qū)動(dòng)程序中,這樣的操作可能并不適用。因此,可以說 attach/detach 是一項(xiàng)可選的特性。

#3. external-resizer

external-resizer 是一個(gè) Sidecar 容器,用于調(diào)整外部存儲(chǔ)卷的大小。

當(dāng) PVC 的存儲(chǔ)需求發(fā)生變化時(shí),external-resizer 可以根據(jù)需求調(diào)整外部存儲(chǔ)卷的大小,確保存儲(chǔ)資源得到最優(yōu)的利用。

它會(huì)調(diào)用 Controller Service 中的 ControllerExpandVolume 接口。

#4. external-snapshotter

external-snapshotter 是一個(gè) Sidecar 容器,用于實(shí)現(xiàn)外部存儲(chǔ)卷的快照功能。

它是通過監(jiān)聽 Kubernetes Snapshot CRD 對(duì)象,來觸發(fā) Controller Service 中的 CreateSnapshot 和 DeleteSnapshot 兩個(gè)接口調(diào)用。

它負(fù)責(zé)在外部存儲(chǔ)系統(tǒng)上創(chuàng)建、刪除和管理快照,以便于實(shí)現(xiàn)數(shù)據(jù)備份、恢復(fù)和復(fù)制等功能。

思考

這玩意兒有什么用呢?VolumeSnapshot 允許在 Kubernetes 集群中創(chuàng)建卷的快照,這些快照可以用于數(shù)據(jù)備份和應(yīng)用程序恢復(fù)。當(dāng)應(yīng)用程序出現(xiàn)故障或數(shù)據(jù)損壞時(shí),我們可以使用先前創(chuàng)建的快照來還原應(yīng)用程序的狀態(tài)。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data-my-redis-master-0
spec:
  dataSource:
    name: my-server-snapshot-0
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
#5. liveness-probe

liveness-probe 是一個(gè) Sidecar 容器,用于監(jiān)控 CSI 驅(qū)動(dòng)程序的運(yùn)行狀況,并通過 Liveness Probe 機(jī)制向 Kubernetes 報(bào)告。

如果驅(qū)動(dòng)器出現(xiàn)故障或停止響應(yīng),Kubernetes 將重啟相關(guān)的 Pod(Controller Service/Node Service) 以確保服務(wù)的可用性。

有關(guān)具體的用法和配置示例,可以參考這里[3]的說明文檔。

思考

實(shí)際上 livenessProbe 是通過 CSI 驅(qū)動(dòng)程序在容器上設(shè)置的。liveness-probe sidecar 容器的主要作用是提供了 /healthz 這個(gè) HTTP 端點(diǎn)。它背后 checkProbe 最終向 CSI 驅(qū)動(dòng)程序的 Identity Service 中的 Probe 接口發(fā)起調(diào)用,用來檢測(cè)插件是否處于健康狀態(tài)。

這種架構(gòu)使得插件的健康狀態(tài)檢查與應(yīng)用程序分離,通過 CSI 驅(qū)動(dòng)程序的 Probe 接口進(jìn)行通信。

事實(shí)上 Kubernetes 從 v1.23 開始具有內(nèi)置 gRPC 健康探測(cè),已經(jīng)不需要這么麻煩了。

#6. node-driver-registrar

node-driver-registrar 是一個(gè)作為 Sidecar 容器運(yùn)行的組件,其主要職責(zé)是通過直接調(diào)用 CSI 驅(qū)動(dòng)程序的 Node Service 中的 NodeGetInfo 接口,獲取驅(qū)動(dòng)程序的信息。

然后,它會(huì)利用 kubelet 的插件注冊(cè)機(jī)制,將這些驅(qū)動(dòng)程序的信息注冊(cè)到相應(yīng)節(jié)點(diǎn)的 kubelet 中。

小結(jié)

我們需要記住這張能力關(guān)系組合表,它對(duì)部署 CSI 驅(qū)動(dòng)程序和排查問題非常的有用。

圖片圖片

如何實(shí)現(xiàn)一個(gè) CSI 插件?

要實(shí)現(xiàn)一個(gè) CSI 驅(qū)動(dòng)程序,確實(shí)只需要完成一系列接口的實(shí)現(xiàn)即可,但僅僅完成這些接口的實(shí)現(xiàn)還不足以構(gòu)建一個(gè)穩(wěn)健、可用的 CSI 驅(qū)動(dòng)程序,構(gòu)建一個(gè)穩(wěn)健的驅(qū)動(dòng)程序還需要考慮方方面面。

CSI Plugin components

下面是每一個(gè) CSI 驅(qū)動(dòng)程序要實(shí)現(xiàn)的接口清單。

其中 Identity Service 負(fù)責(zé)提供 CSI 驅(qū)動(dòng)程序的身份信息,Controller Service 負(fù)責(zé) Volume 的管理,Node Service 負(fù)責(zé)將 Volume 掛載到 Pod 中。

圖片圖片

正如前面提到的,一個(gè) CSI 驅(qū)動(dòng)程序能提供什么樣的能力,取決于各自存儲(chǔ)廠商的實(shí)現(xiàn),三個(gè)組件都有對(duì)外暴露能力的接口,比如

  1. Identity Service 中的 GetPluginCapabilities 方法,表示該 CSI 驅(qū)動(dòng)程序主要提供了哪些功能。
  2. Controller Service 中的 ControllerGetCapabilities 方法,實(shí)際上告訴 K8s,CSI 驅(qū)動(dòng)程序具備哪些能力。這些能力可以包括卷的創(chuàng)建、刪除、擴(kuò)容、快照等操作。
  3. Node Service 中的 NodeGetCapabilities 方法,提供 Node plugin 的能力列表。

CSI lifecycle

在通常情況下,每個(gè) Volume 都會(huì)經(jīng)歷完整的生命周期過程。

圖片圖片

從創(chuàng)建 PersistentVolumeClaim(PVC)開始,接著被 Pod 所使用,這個(gè)過程包括三個(gè)主要階段:Provision -> Attach -> Mount。

隨后,從 Pod 開始被刪除,直到 PVC 被刪除,整個(gè)過程又經(jīng)歷了另外三個(gè)關(guān)鍵階段: Unmount -> Detach -> Delete。

然而,存在一種特殊的存儲(chǔ)卷,它就是 Ephemeral Inline Volumes,它可以通過改變 CSIDriver 的規(guī)范中的 volumeLifecycleModes 參數(shù)來改變其生命周期。

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: xfs2.csi.basebit.ai
spec:
  ...
  volumeLifecycleModes:
  - Ephemeral

Ephemeral 模式表示存儲(chǔ)卷是臨時(shí)的,會(huì)隨著 Pod 的生命周期結(jié)束而被釋放。對(duì)于這種類型的存儲(chǔ)卷,Kubelet 在向 CSI 驅(qū)動(dòng)請(qǐng)求卷時(shí),只會(huì)調(diào)用 NodePublishVolume,省略了其他階段(例如 CreateVolume、NodeStageVolume)的調(diào)用。而在 Pod 結(jié)束需要釋放存儲(chǔ)卷時(shí),只會(huì)調(diào)用 NodeUnpublishVolume。

具體的 Pod 規(guī)范如下所示:

kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app
spec:
  containers:
    - name: my-frontend
      image: busybox
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-inline-vol
      command: ["sleep","1000000"]
  volumes:
    - name: my-csi-inline-vol
      csi:
        driver: xfs2.csi.basebit.ai
        volumeAttributes:
          foo: bar

這里的 volumeAttributes 用于指定驅(qū)動(dòng)程序需要準(zhǔn)備的卷的屬性。這些屬性在每個(gè)驅(qū)動(dòng)程序中都是特定的,沒有標(biāo)準(zhǔn)化的實(shí)現(xiàn)方法。

Ephemeral 使用案例

Secrets Store CSI Driver[4]允許用戶將 Secret 作為內(nèi)聯(lián)卷從外部掛載到一個(gè) Pod 中。當(dāng)密鑰存儲(chǔ)在外部管理服務(wù)或 Vault 實(shí)例中時(shí),這可能很有用。

Cert-Manager CSI Driver[5] 與 cert-manager[6] 協(xié)同工作, 無縫地請(qǐng)求和掛載證書密鑰對(duì)到一個(gè) Pod 中。這使得證書可以在應(yīng)用 Pod 中自動(dòng)更新。

通過這個(gè)特性,再一次說明了我們并不要求所有的接口都需要實(shí)現(xiàn),取決于插件實(shí)現(xiàn)方提供什么樣的能力,我們?cè)偃?shí)現(xiàn)相應(yīng)的邏輯即可。

CSI idempotent

我們應(yīng)該確保所有的 CSI 操作都是冪等的,這意味著同一操作被多次調(diào)用時(shí),結(jié)果始終保持一致,不會(huì)因?yàn)槎啻握{(diào)用而導(dǎo)致狀態(tài)變化或產(chǎn)生額外的副作用。這種冪等性是保證系統(tǒng)穩(wěn)定性和一致性的關(guān)鍵因素。

舉個(gè)例子,假設(shè)我們做一個(gè) DeleteVolume 的操作,如果底層的 Volume 已經(jīng)不存在了,依然不能報(bào)錯(cuò)。無論是第一次執(zhí)行 DeleteVolume 還是多次重試,操作的最終結(jié)果都應(yīng)該是相同的。

這里不得不提一下 CSI Sanity Test,它可用于驗(yàn)證 CSI 驅(qū)動(dòng)程序的基本功能和穩(wěn)定性。它會(huì)模擬不同的錯(cuò)誤和異常情況,例如創(chuàng)建已存在的卷、卸載不存在的卷等,以驗(yàn)證驅(qū)動(dòng)程序?qū)@些情況的處理是否正確。

它能夠驗(yàn)證 CSI 驅(qū)動(dòng)程序是否符合 Kubernetes CSI 規(guī)范并且可以正確運(yùn)行,對(duì)開發(fā) CSI 驅(qū)動(dòng)程序非常的有幫助。比如說可以幫助開發(fā)人員快速定位和修復(fù)常見問題,減少在生產(chǎn)環(huán)境中出現(xiàn)意外問題的可能性。

官方文檔中詳細(xì)闡述了規(guī)范(Container Storage Interface,CSI)的內(nèi)容,同時(shí)還提供了與開發(fā)相關(guān)的注意事項(xiàng)。這些注意事項(xiàng)涵蓋了規(guī)范中的一些關(guān)鍵要點(diǎn),以及在開發(fā)過程中可能會(huì)遇到的挑戰(zhàn)和解決方案。我們可以在 Container Storage Interface (CSI) Specification [7] 找到這些詳細(xì)信息。

如何部署 CSI?

標(biāo)準(zhǔn)的 CSI 驅(qū)動(dòng)程序部署架構(gòu)如下圖所示,其中包括一個(gè)由 DaemonSet 運(yùn)行的 CSI Node 組件,以及一個(gè)運(yùn)行在 StatefulSet 內(nèi)的 CSI Controller 組件。

?? 這兩個(gè)容器通過本地 Socket (Unix Domain Socket, UDS)進(jìn)行通信,并使用 gRPC 協(xié)議。CSI 插件直接與同一宿主機(jī)上的 K8s 組件進(jìn)行交互,通過本機(jī)進(jìn)程之間的 Unix 域套接字通信,相較于 TCP 套接字,具備更高的通信效率和性能。

圖片圖片

在部署 CSI Node 時(shí),需要將宿主機(jī)上的 kubelet 目錄(/var/lib/kubelet)掛載到驅(qū)動(dòng)程序的容器內(nèi),且需將 Mount Propagation 設(shè)置為 Bidirectional。這樣,驅(qū)動(dòng)程序容器內(nèi)的后續(xù) Mount/Umount 操作能夠傳播到宿主機(jī)上。

請(qǐng)注意,這只是一個(gè)高層次的架構(gòu)概述,具體的實(shí)施細(xì)節(jié)可能會(huì)因不同的 CSI 插件和環(huán)境而有所變化。

CSI 在集群部署成功后,可以用以下兩個(gè)命令來做下檢查:

#1. 查看集群內(nèi)安裝的 CSI Driver

? kubectl get csidrivers

#2. 列出哪些節(jié)點(diǎn)具有 CSI

? kubectl get csinodes

總結(jié)

CSI 是 Kubernetes 存儲(chǔ)體系中的核心組件,為存儲(chǔ)供應(yīng)商提供了靈活且可擴(kuò)展的集成方式,也為 Kubernetes 用戶提供了高效穩(wěn)定的存儲(chǔ)解決方案。

通過標(biāo)準(zhǔn)化容器編排器與存儲(chǔ)供應(yīng)商之間的接口,CSI 構(gòu)建了一種統(tǒng)一的范式,確保所有與 CSI 兼容的存儲(chǔ)系統(tǒng)都遵循相同的實(shí)現(xiàn)規(guī)范。事實(shí)上,通過編寫一個(gè) CSI 驅(qū)動(dòng)程序,我們不僅為 Kubernetes 存儲(chǔ)架構(gòu)增添了新的維度,還深化了對(duì)存儲(chǔ)資源管理的理解。

下一期,我將繼續(xù)與大家分享在實(shí)際工作中使用 CSI Driver 遇到的問題和挑戰(zhàn)。

參考資料

[1]Kubernetes CSI Sidecar Containers: https://kubernetes-csi.github.io/docs/sidecar-containers.html

[2]StorageClass Secrets: https://kubernetes-csi.github.io/docs/secrets-and-credentials-storage-class.html

[3]這里: https://github.com/kubernetes-csi/livenessprobe/blob/master/deployment/kubernetes/livenessprobe-sidecar.yaml

[4]Secrets Store CSI Driver: https://github.com/kubernetes-sigs/secrets-store-csi-driver

[5]Cert-Manager CSI Driver: https://github.com/cert-manager/csi-driver

[6]cert-manager: https://cert-manager.io/

[7]Container Storage Interface (CSI) Specification : https://github.com/container-storage-interface/spec/blob/master/spec.md

[8]CSI Documentation: https://kubernetes-csi.github.io/docs/

[9]CloudNativeCon EU 2018 CSI Jie Yu: https://schd.ws/hosted_files/kccnceu18/fb/CloudNativeCon%20EU%202018%20CSI%20Jie%20Yu.pdf

責(zé)任編輯:武曉燕 來源: CloudNative101
相關(guān)推薦

2023-08-29 07:40:24

Kubernetes容器Container

2020-08-25 07:48:17

Kubernetes集群系統(tǒng)

2024-07-29 10:35:44

KubernetesCSI存儲(chǔ)

2009-07-22 17:15:04

C#實(shí)現(xiàn)

2020-09-02 07:22:17

JavaScript插件框架

2020-10-08 14:29:57

Kubernetes容器開發(fā)

2023-12-12 08:08:17

插件PRPulsar

2009-06-26 15:48:23

Windows Mob

2021-06-15 09:33:44

Kubernetes Prometheus 容器

2020-12-04 18:44:29

KubernetesHTTPS Wordpress

2017-12-12 15:24:32

Web Server單線程實(shí)現(xiàn)

2013-11-18 14:00:09

2021-09-02 08:02:50

深度學(xué)習(xí)Kubernetes集群管理

2022-11-08 15:14:17

MyBatis插件

2023-02-26 01:37:57

goORM代碼

2023-03-01 09:39:40

調(diào)度系統(tǒng)

2020-08-17 08:20:16

iOSAOP框架

2016-03-08 09:52:22

xcode插件開發(fā)

2022-02-24 08:26:32

Kubernetes卷快照Longhorn

2021-12-02 08:00:00

Kubernetes集群容器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 可以免费观看的av片 | 久久精品欧美电影 | 久久亚洲精品久久国产一区二区 | 国产一区二区不卡 | 亚洲久久| 欧美极品视频在线观看 | 亚洲午夜小视频 | 久久av一区二区三区 | 91精品国产乱码久久久久久久 | 在线观看国产精品视频 | 欧美阿v| 久久成人一区 | 日韩在线播放中文字幕 | 免费在线日韩 | av入口 | 淫片一级国产 | 在线不卡av | 成人激情免费视频 | 成人性生交大片免费看r链接 | 久草中文在线 | 国产精品成人一区二区三区 | 国产美女高潮 | 亚洲午夜精品一区二区三区 | 91久久精品国产免费一区 | 91av在线免费 | 国产在线97 | 最新国产在线 | 国产精品视频一二三区 | 免费v片在线观看 | 人人爽人人爽人人片av | 女女百合av大片一区二区三区九县 | 日韩手机在线视频 | 日韩天堂av | 亚洲精品黄色 | 久久精品亚洲国产奇米99 | 四虎影院欧美 | 日日操夜夜操天天操 | 国产在线激情视频 | 特级a欧美做爰片毛片 | 国产精品一二三区 | 三级免费 |