主頁 >  其他 > 容器服務 TKE 存盤插件與云硬碟 CBS 最佳實踐應用

容器服務 TKE 存盤插件與云硬碟 CBS 最佳實踐應用

2020-12-18 07:21:27 其他

引言

隨著自研上云的深入,越來越多的有狀態服務對于在 TKE 集群中使用云上存盤能力的需求也越來越強烈,

目前 騰訊云容器服務 TKE(Tencent Kubernetes Engine)已支持在 TKE 集群中的應用使用多種存盤服務,包括 云硬碟 CBS、檔案存盤 CFS 以及 物件存盤 COS,TKE 通過兩種存盤插件(In-Tree 和 CSI)來支持上述能力,用戶可以通過云控制臺很方便地選擇存盤型別并創建對應的 PV/PVC,但仍然會有一些問題困擾著大家,比如:TKE 集群中是否支持擴容 CBS 云盤;如果集群跨可用區,如何避免集群中頻繁出現掛載(attach)失敗;TKE 中是否支持快照功能;我的應用應該選擇哪種型別存盤;In-Tree 和 CSI 都支持 CBS,二者有和區別,是否能把之前使用 In-Tree 插件創建的云盤轉變為 CSI 插件管理等,

對于 TKE 存盤的相關問題,這里會詳細介紹,接下來,我們先概覽下 Kubernetes 持久化存盤的流程

Kubernetes 持久化存盤流程

這里對 Kubernetes 持久化存盤的流程做個概覽,不深入各個組件,

創建一個使用了持久化存盤的 pod 的流程包含以下步驟:

  1. 用戶創建一個參考PVC的 pod(動態創建PV);
  2. Scheduler根據 pod 的配置、節點狀態、PV 配置等其他因素把 pod 調度到一個合適的 node 上;
  3. PV Controller watch 到 PVC,呼叫 Volume Plugin 去創建 PV,并系結 PV 和 PVC,如果是 out-of-tree 存盤插件(如 CSI),則創建 PV 實際是由 external provisioner 完成,之后 PV Controller 完成 PV 和 PVC 的bound;如果是 in-tree 插件,但是通過kubernetes-sigs/sig-storage-lib-external-provisioner實作了一個 external provisioner,則與 out-of-tree 插件相同;如果是 in-tree 插件,且插件直接實作了相應的創刪介面,則 PV Controller 直接呼叫 in-tree 插件的實作完成創建 PV,
  4. AD Controller 對比 asw 和 dsw 狀態,發現 Volume 需要被 attach,則呼叫 Volume Plugin 的實作去 attach,in-tree 插件不需多說,如果是 CSI 插件,則 AD Controller 會先呼叫 CSI in-tree 代碼創建 VolumeAttachment 物件,CSI 插件的一個名為 external-attacher 的 sidecar 會 watch 該物件,watch 到創建則呼叫 CSI driver 的相應方法(ControllerPublishVolume)來 attach,
  5. VolumeManager 等到 volume 成功 attach 到節點后,開始呼叫 Volume Plugin 去進行 mount 操作,這個mount 操作分為兩步:第一步是格式化設備并把 volume mount 到一個 global mount path(/var/lib/kubelet/plugins下),第二步是將 bind mount 剛才的 global mount path到/var/lib/kubelet/pods/${pod_UUID}/volumes下,
  6. Kubelet 呼叫容器運行時啟動容器,并且 bind mount 第5步中的 mount path 到容器中,

(Provision -> Attach -> Mount; Unmount -> Detach -> Delete)

TKE 存盤插件及原理介紹

隨著 Kubernetes 社區發展,TKE 先后支持了 In-Tree 和 CSI 兩種存盤插件,二者在功能上的主要區別在于 In-Tree 存盤插件僅支持在 TKE 集群使用 CBS,而 CSI 支持使用 CBS、CFS、COS,

型別 支持CBS 支持CFS 支持COS 參考
In-Tree × ×
CSI https://github.com/TencentCloud/kubernetes-csi-tencentcloud

In-Tree 插件(QcloudCbs)

  • kubernetes 早期只支持以 In-Tree 的方式擴展存盤插件,也就是插件在 Kubernetes 代碼中實作,

  • In-Tree 插件名為cloud.tencent.com/qcloud-cbs,所以也可稱為 QcloudCbs,在 TKE 集群中有個默認的名為cbs的 StorageClass,

NAME            PROVISIONER                    AGE
cbs (default)   cloud.tencent.com/qcloud-cbs   48m

特性

In-Tree 插件只實作了使用 CBS 的能力,其主要特性有:

  • 靜態資料卷:即用戶手動創建 volme、PV 物件、PVC 物件
  • 動態資料卷:根據 StorageClass 配置來由插件控制創建和洗掉 volume 和 PV
  • 拓撲感知:CBS 不支持跨可用區掛載,在多可用區集群中,會先調度 pod,然后去調度后的 node 的 zone 創建 volume,
  • 調度器感知節點 maxAttachLimit:騰訊云單個 CVM 上默認最多掛載 20塊 CBS 盤,調度器感知該限制,調度時過濾到要超過 maxAttachLimit 的節點,可以全域修改 maxAttachLimit,但需要 IaaS 層先支持,
騰訊云存盤靜態資料卷動態資料卷拓撲感知調度器感知節點 maxAttachLimit
騰訊云硬碟(CBS)支持兩種使用方式:
  • 直接通過 volume 使用
  • 通過PV/PVC使用(推薦)
  • 支持支持,pod 調度后,在同一個可用區創建 volume,避免 CBS 跨可用區無法使用,支持,云服務器(cvm)可以掛載的云硬碟(cbs)是有上限的,調度器調度 pod 時過濾掉超過最大可掛載 CBS 數量的節點,

    原理簡介

    下面簡單了解下 In-Tree 插件 QcloudCbs 的架構圖,了解各相關組件分別完成何種作業,

    上圖是包含 TKE In-Tree 存盤插件的 Kubernetes 存盤架構圖,圖中綠色部分,皆屬于 In-Tree 插件 QcloudCbs 的實作范疇,
    由上述的 Kubernetes持久化存盤流程 可知要動態使用一個 cbs pv,主要有三個程序:provision、attach、mount,而這三個程序是由不同組件負責的:

    • cbs-provisioner 負責 volume 的 provision/delete,為了與 Kubernetes 代碼解耦,cbs-provisioner 是基于kubernetes-sigs/sig-storage-lib-external-provisioner實作的一個 external provisioner,來 provision 和 delete volume,PV Controller 在這種模式下雖然不去 provision/delete volume,但是還是會參與處理(比如 PV 和 PVC 的系結),
    • AD Controller 負責 volume 的 attach/detach,Tencent Cloud Provider 中封裝云 API,In-Tree 插件呼叫 Cloud Provider 實作了 attach/detach 的具體邏輯,并提供給 AD Controller 呼叫,
    • kubelet 的 Volume Manager 負責 volume 的 mount/unmount,In-Tree 插件中實作 MountDevice、SetUp 等介面,Volume Manager 呼叫其完成準備 volume 的最后一步,
    • 另外,Scheduler 中也有 volume 相關的邏輯,我們添加了一個 predicate 策略:MaxQcloudCbsVolumeCount,該策略主要實作調度器感知節點 maxAttachLimit特性,而 Scheduler 原生的一個 predicate 策略:NoVolumeZoneConflictPred,是用來把 pod 調度到已有 PV 所在 zone 的節點,這可以避免云盤跨可用區掛載的問題;對于新建 PV 的話,避免云盤跨可用區掛載問題則由拓撲感知特性完成,

    CSI 插件

    CSI 是 Kubernetes 社區擴展卷的標準和推薦方式,TKE 的 CSI 插件包含 CBS、CFS、COS 三個 driver,本節重點介紹 CBS CSI driver,并與 QcloudCbs 進行對比,3個 driver 的靜態 pv 和動態 pv 的支持情況如下表所示:

    騰訊云存盤 靜態資料卷 動態資料卷
    云硬碟(CBS) 支持 支持
    檔案存盤(CFS) 支持 支持
    物件存盤(COS) 支持 不支持

    CBS CSI 特性及與 QcloudCbs 對比

    • CBS CSI 比 QcloudCbs 多幾個特性:volume 在線擴容,volume 快照和恢復,
    存盤插件 靜態資料卷 動態資料卷 拓撲感知 調度器感知節點maxAttachLimit 卷在線擴容 卷快照&恢復
    CBS CSI
    QcloudCbs(In-Tree) × ×

    原理簡介

    CSI 原理簡介

    CSI 原理參考上圖,要實作一個 CSI driver,一般需要實作以下 3 個 gRPC services(CSI Controller Service 可選):

    • CSI Identity Services:提供 driver 資訊(drivername,版本等)

    • CSI Controller Services

      (可選):controller 負責創刪卷、attach/detach、擴容、快照等,涉及的方法如下:

      • CreateVolume/DeleteVolume
      • Controller[Publish|Unpublish]Volume (對應attach/detach)
      • CreateSnapshot/DeleteSnapshot/ListSnapshots
      • ControllerExpandVolume
    • CSI Node Services

      :負責向節點注冊 driver,mount/unmount,涉及的方法如下:

      • NodeStageVolume/NodeUnstageVolume((un)mount device)
      • NodePublishVolume/NodeUpPublishVolume((un)mount volume)

    在我們實作之外,kuberntes Team 還提供了多個外部組件,用于溝通 k8s 原生組件(apiserver、controller manager、kubelet)與自己實作的 CSI driver,

    • external-provisioner:watch PersistentVolumeClaim(PVC)物件,呼叫 driver 的CreateVolume/DeleteVolume
    • external-attacher:watch VolumeAttachment物件,呼叫 driver 的Controller[Publish|Unpublish]Volume
    • external-resizer: watch PersistentVolumeClaim物件,呼叫 driver 的ControllerExpandVolume
    • external-snapshottersnapshot-controller:snapshot-controller watch VolumeSnapshotVolumeSnapshotContent CRD 物件,external-snapshotter watch VolumeSnapshotContent物件,呼叫 driver 的CreateSnapshot/DeleteSnapshot/ListSnapshots
    • *node-driver-registrar*:使用NodeGetInfo獲取 driver 資訊,然后使用 kubelet 插件注冊機制注冊 driver,
    CBS CSI 部署圖

    CBS CSI 使用社區推薦部署方式,包含兩個 workload:

    • 一個 DaemonSet,也就是每個 Node 會有一個,我們可以簡單稱為NodePlugin,由 CBS CSI Driver 和 node-driver-registrar 兩個容器組成,負責向節點注冊 driver,并提供 mount 的能力,
    • 一個 StatefulSet/Deployment,我們可以簡稱為Controller,由 driver 和多個 sidecar(external-provisioner、external-attacher、external-resizer、external-snapshotter、snapshot-controller)一起構成,提供創刪卷、attach/detach、擴容、快照等能力

    CBS CSI 插件的 mount 是 driver 容器執行的,它是如何 mount 到 Node 上的?
    • 答案是:掛載傳播(Mount propagation),掛載傳播允許容器內的 mount 在容器外可見,參見https://stupefied-goodall-e282f7.netlify.app/contributors/design-proposals/node/propagation/
    • CBS CSI 的 global mount 階段(NodeStageVolume)要把設備 mount 到/var/lib/kubelet/plugins的子目錄下;之后 bind mount 階段(NodePublishVolume)的 target path 是/var/lib/kubelet/pods,所以我們為這兩個目錄都設定了掛載傳播(模式為Bidirectional

    使用推薦

    • TKE 集群版本為 1.14+(包含 1.14),推薦使用 CSI 插件
    • 需要在TKE集群中使用 CFS 和 COS 能力,使用 CSI 插件
    • 需要在TKE集群中對 CBS 盤在線擴容和使用快照功能,使用 CSI 插件
    • 已經使用了 QcloudCbs(In-Tree 插件)的,可以繼續使用,(后續會通過 Volume Migration 統一到 CBS CSI)

    最佳實踐

    provisioner:

    • cbs csi —— "com.tencent.cloud.csi.cbs"
    • cbs intree —— "cloud.tencent.com/qcloud-cbs"

    cbs csi 的安裝請參見 cbs csi 檔案,我們也已經在騰訊云控制臺支持擴展組件安裝,

    本節最佳實踐均以 cbs csi 插件為例,相應版本要求也是針對 cbs csi 插件,

    1、如果集群節點跨 zone,如何避免 cbs 云盤跨可用區掛載?

    cbs 云盤不支持跨可用區掛載到節點,所以在跨可用區的集群中推薦通過拓撲感知特性來避免跨可用區掛載的問題,

    1.1 使用前注意

    • TKE集群版本 >= 1.14
    • 確保 csi 插件為最新版本

    1.2 如何使用

    使用方式很簡單,在 storageclass 中設定 volumeBindingModeWaitForFirstConsumer,然后使用該 storageClass 即可,intree 和 csi 插件均支持,

    kind: StorageClass
    metadata:
      name: cbs-topo
    parameters:
      type: cbs
    provisioner: com.tencent.cloud.csi.cbs
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    

    1.3 原理

    拓撲感知調度需要多個 k8s 組件配合完成,包括 scheduler、pv controller、external-provisioner,流程為:

    1. pv controller watch 到 PVC 物件,發現 storageclass 的 volumeBindingMode 為WaitForFirstConsumer,即不會馬上處理該pvc的創建事件,等待 scheduler 處理;
    2. scheduler 調度完 pod 后,會將 nodeName 以 annotation 的方式打到 PVC 物件上: volume.kubernetes.io/selected-node: 10.0.0.72
    3. pv controller 獲取到 PVC 物件的更新事件后,處理這個 annotation(volume.kubernetes.io/selected-node),根據 nodeName 獲取 Node 物件,傳入到 provisioner 中,
    4. provisioner 根據傳過來的 Node 物件的 label 獲取可用區(failure-domain.beta.kubernetes.io/zone),之后在對應 zone 創建 pv,從而達到和 pod 相同可用區的效果,避免云盤和 node 在不同可用區而無法掛載,

    2、如何在線擴容云盤?

    TKE 支持在線擴容 PV,對應的云盤及檔案系統,即不需要重啟 pod 即可完成擴容,但,為了確保檔案系統的穩定性,還是推薦先讓云盤檔案系統處于未 mount 情況下,為此,我們將提供兩種擴容方式:

    1. 不重啟 pod 的情況下在線擴容
      • 這種情況下被擴容的云盤的檔案系統被 mount 在節點上,如果 I/O 的話,有可能會出現檔案系統擴容錯誤
    2. 重啟 pod 的情況下在線擴容
      • 這種情況下被擴容的云盤的檔案系統被 unmount了,可以避免上面的問題,推薦這種方式

    2.1 使用前注意

    • TKE集群版本 >= 1.16,詳見 cbs csi 檔案
    • 僅 cbs csi 插件支持擴容,確保 csi 插件為最新版本
    • 可以在擴容前使用快照來備份資料,避免擴容失敗導致資料丟失,參見下方 3.2.1 使用快照備份云硬碟

    2.2 如何使用

    2.2.1 創建允許擴容的 StorageClass

    在 storageclass 中設定allowVolumeExpansiontrue

    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: cbs-csi-expand
    parameters:
      diskType: CLOUD_PREMIUM
    provisioner: com.tencent.cloud.csi.cbs
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    
    2.2.2 不重啟 pod 的情況下在線擴容

    1、確認擴容前 pv 和檔案系統狀態,大小均為 20G

    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/vdd        20511312 45036  20449892   1% /usr/share/nginx/html
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c   20Gi       RWO            Delete           Bound    default/www1-ivantestweb-0   cbs-csi                 20h
    

    2、執行以下命令修改 PVC 物件中的容量,擴容至 30G

    $ kubectl patch pvc www1-ivantestweb-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
    

    執行后稍等片刻,可以發現 pv 和檔案系統已經擴容至 30G:

    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/vdd        30832548 44992  30771172   1% /usr/share/nginx/html
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c   30Gi       RWO            Delete           Bound    default/www1-ivantestweb-0   cbs-csi                 20h
    
    2.2.3 重啟 pod 的情況下在線擴容

    1、確認擴容前 pv 和檔案系統狀態,大小均為 30G

    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/vdd        30832548 44992  30771172   1% /usr/share/nginx/html
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c   30Gi       RWO            Delete           Bound    default/www1-ivantestweb-0   cbs-csi                 20h
    

    2、使用下面命令給 PV 物件打標簽,打一個非法 zone,旨在下一步重啟 pod 后 pod 無法調度到某個節點上

    $ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone=nozone
    

    3、重啟 pod,重啟后由于 pod 對應的 pv 的標簽表明的是非法 zone,pod 會處于 Pending 狀態

    $ kubectl delete pod ivantestweb-0
    
    $ kubectl get pod ivantestweb-0
    NAME            READY   STATUS    RESTARTS   AGE
    ivantestweb-0   0/1     Pending   0          25s
    
    $ kubectl describe pod ivantestweb-0
    Events:
      Type     Reason            Age                 From               Message
      ----     ------            ----                ----               -------
      Warning  FailedScheduling  40s (x3 over 2m3s)  default-scheduler  0/1 nodes are available: 1 node(s) had no available volume zone.
    

    4、修改 PVC 物件中的容量,擴容至 40G

    kubectl patch pvc www1-ivantestweb-0 -p '{"spec":{"resources":{"requests":{"storage":"40Gi"}}}}'
    

    5、去掉 PV 物件之前打的標簽,這樣 pod 就能調度成功了,

    $ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone-persistentvolume/pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c labeled
    

    稍等片刻,pod running,對應的 pv 和檔案系統也擴容成功,從 30G 擴容到 40G 了

    $ kubectl get pod ivantestweb-0
    NAME            READY   STATUS    RESTARTS   AGE
    ivantestweb-0   1/1     Running   0          17m
    
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c   40Gi       RWO            Delete           Bound    default/www1-ivantestweb-0   cbs-csi                 20h
    
    $ kubectl get pvc www1-ivantestweb-0
    NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    www1-ivantestweb-0   Bound    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c   40Gi       RWO            cbs-csi        20h
    
    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/vdd        41153760 49032  41088344   1% /usr/share/nginx/html
    

    3、如何創建快照和使用快照來恢復卷?

    3.1 使用前注意

    • TKE集群版本 >= 1.18,詳見 cbs csi 檔案
    • 僅 cbs csi 插件支持快照,確保 csi 插件鏡像為最新版本

    3.2 如何使用

    3.2.1 使用快照備份云硬碟

    1、使用下面 yaml,創建VolumeSnapshotClass物件

    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshotClass
    metadata:
      name: cbs-snapclass
    driver: com.tencent.cloud.csi.cbs
    deletionPolicy: Delete
    

    創建后顯示:

    $ kubectl get volumesnapshotclass
    NAME            DRIVER                      DELETIONPOLICY   AGE
    cbs-snapclass   com.tencent.cloud.csi.cbs   Delete           17m
    

    2、使用下面 yaml,創建

    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-demo
    spec:
      volumeSnapshotClassName: cbs-snapclass
      source:
        persistentVolumeClaimName: csi-pvc
    

    創建后稍等片刻,volumesnapshot 和 volumesnapshotcontent 物件都創建成功,READYTOUSE為 true:

    $ kubectl get volumesnapshot
    NAME                READYTOUSE   SOURCEPVC            SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    new-snapshot-demo   true         www1-ivantestweb-0                           10Gi          cbs-snapclass   snapcontent-ea11a797-d438-4410-ae21-41d9147fe610   22m            22m
    $ kubectl get volumesnapshotcontent
    NAME                                               READYTOUSE   RESTORESIZE   DELETIONPOLICY   DRIVER                      VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT      AGE
    snapcontent-ea11a797-d438-4410-ae21-41d9147fe610   true         10737418240   Delete           com.tencent.cloud.csi.cbs   cbs-snapclass         new-snapshot-demo   22m
    

    具體快照 id 在 volumesnapshotcontent 物件中,status.snapshotHandle(snap-e406fc9m),可以根據這個快照 id 在騰訊云控制臺確認快照是否存在

    $ kubectl get volumesnapshotcontent snapcontent-ea11a797-d438-4410-ae21-41d9147fe610 -oyaml
    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshotContent
    metadata:
      creationTimestamp: "2020-11-04T08:58:39Z"
      finalizers:
      - snapshot.storage.kubernetes.io/volumesnapshotcontent-bound-protection
      name: snapcontent-ea11a797-d438-4410-ae21-41d9147fe610
      resourceVersion: "471437790"
      selfLink: /apis/snapshot.storage.k8s.io/v1beta1/volumesnapshotcontents/snapcontent-ea11a797-d438-4410-ae21-41d9147fe610
      uid: 70d0390b-79b8-4276-aa79-a32e3bdef3d6
    spec:
      deletionPolicy: Delete
      driver: com.tencent.cloud.csi.cbs
      source:
        volumeHandle: disk-7z32tin5
      volumeSnapshotClassName: cbs-snapclass
      volumeSnapshotRef:
        apiVersion: snapshot.storage.k8s.io/v1beta1
        kind: VolumeSnapshot
        name: new-snapshot-demo
        namespace: default
        resourceVersion: "471418661"
        uid: ea11a797-d438-4410-ae21-41d9147fe610
    status:
      creationTime: 1604480319000000000
      readyToUse: true
      restoreSize: 10737418240
      snapshotHandle: snap-e406fc9m
    
    3.2.2 從快斬訓復卷(云硬碟)

    1、我們在 3.2.1 中創建的VolumeSnapshot的物件名為new-snapshot-demo,使用下面 yaml 來從快斬訓復一個卷

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-test
    spec:
      storageClassName: cbs-csi
      dataSource:
        name: new-snapshot-demo
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    

    發現 restore 的 pvc 已經創建出來,diskid 也在 pv 中(disk-gahz1kw1)

    $ kubectl get pvc restore-test
    NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    restore-test   Bound    pvc-80b98084-29a3-4a38-a96c-2f284042cf4f   10Gi       RWO            cbs-csi        97s
    $ kubectl get pv pvc-80b98084-29a3-4a38-a96c-2f284042cf4f -oyaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: com.tencent.cloud.csi.cbs
      creationTimestamp: "2020-11-04T12:08:25Z"
      finalizers:
      - kubernetes.io/pv-protection
      name: pvc-80b98084-29a3-4a38-a96c-2f284042cf4f
      resourceVersion: "474676883"
      selfLink: /api/v1/persistentvolumes/pvc-80b98084-29a3-4a38-a96c-2f284042cf4f
      uid: 5321df93-5f21-4895-bafc-71538d50293a
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 10Gi
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: restore-test
        namespace: default
        resourceVersion: "474675088"
        uid: 80b98084-29a3-4a38-a96c-2f284042cf4f
      csi:
        driver: com.tencent.cloud.csi.cbs
        fsType: ext4
        volumeAttributes:
          diskType: CLOUD_PREMIUM
          storage.kubernetes.io/csiProvisionerIdentity: 1604478835151-8081-com.tencent.cloud.csi.cbs
        volumeHandle: disk-gahz1kw1
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.com.tencent.cloud.csi.cbs/zone
              operator: In
              values:
              - ap-beijing-2
      persistentVolumeReclaimPolicy: Delete
      storageClassName: cbs-csi
      volumeMode: Filesystem
    status:
      phase: Bound
    

    參考

    • Kubernetes CSI in Action: Explained with Features and Use Cases
    • CSI Volume Plugins in Kubernetes Design Doc

    【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!

    轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236433.html

    標籤:其他

    上一篇:二叉樹的下一個結點

    下一篇:用好WinSCP,無懼Linux命令

    標籤雲
    其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

    熱門瀏覽
    • 網閘典型架構簡述

      網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

      uj5u.com 2020-09-10 02:00:44 more
    • 如何從xshell上傳檔案到centos linux虛擬機里

      如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

      uj5u.com 2020-09-10 02:00:47 more
    • 一、SQLMAP入門

      一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

      uj5u.com 2020-09-10 02:00:50 more
    • Metasploit 簡單使用教程

      metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

      uj5u.com 2020-09-10 02:00:53 more
    • 游戲逆向之驅動層與用戶層通訊

      驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

      uj5u.com 2020-09-10 02:00:56 more
    • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

      北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

      uj5u.com 2020-09-10 02:01:03 more
    • 【CTF】CTFHub 技能樹 彩蛋 writeup

      ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

      uj5u.com 2020-09-10 02:04:05 more
    • 02windows基礎操作

      我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

      uj5u.com 2020-09-10 02:04:18 more
    • 03.Linux基礎操作

      我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

      uj5u.com 2020-09-10 02:04:30 more
    • 05HTML

      01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

      uj5u.com 2020-09-10 02:04:36 more
    最新发布
    • 2023年最新微信小程式抓包教程

      01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

      uj5u.com 2023-04-20 08:48:24 more
    • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

      Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

      uj5u.com 2023-04-20 08:47:46 more
    • vulnhub_Earth

      前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

      uj5u.com 2023-04-20 07:46:20 more
    • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

      清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

      uj5u.com 2023-04-20 07:44:00 more
    • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

      🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

      uj5u.com 2023-04-20 07:43:36 more
    • 漫談前端自動化測驗演進之路及測驗工具分析

      隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

      uj5u.com 2023-04-20 07:43:16 more
    • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

      摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

      uj5u.com 2023-04-20 07:43:03 more
    • msf學習

      msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

      uj5u.com 2023-04-20 07:42:59 more
    • Halcon軟體安裝與界面簡介

      1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

      uj5u.com 2023-04-20 07:42:17 more
    • 在MacOS下使用Unity3D開發游戲

      第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

      uj5u.com 2023-04-20 07:40:19 more