引言
随着自研上云的深刻,越来越多的有状态服务对于在 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 的流程蕴含以下步骤:
- 用户创立一个援用 PVC 的 pod(动态创建 PV);
- Scheduler依据 pod 的配置、节点状态、PV 配置等其余因素把 pod 调度到一个适合的 node 上;
- 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。 - 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。 - 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
下。 - 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/TencentClo… |
In-Tree 插件(QcloudCbs)
- kubernetes 晚期只反对以 In-Tree 的形式扩大存储插件,也就是插件在 Kubernetes 代码中实现。
-
In-Tree 插件名为
cloud.tencent.com/qcloud-cbs
,所以也可称为 QcloudCbs,在 TKE 集群中有个默认的名为cbs
的 StorageClass。NAME PROVISIONER AGEcbs (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) | 反对两种应用形式:<li> 间接通过 volume 应用 </li> <li> 通过 PV/PVC 应用(举荐)</li> | 反对 | 反对。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-snapshotter和 snapshot-controller:snapshot-controller watch
VolumeSnapshot
和VolumeSnapshotContent
CRD 对象,external-snapshotter watchVolumeSnapshotContent
对象。调用 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-e28…
- 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 中设置 volumeBindingMode
为WaitForFirstConsumer
,而后应用该 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。流程为:
- pv controller watch 到 PVC 对象,发现 storageclass 的 volumeBindingMode 为
WaitForFirstConsumer
,即不会马上解决该 pvc 的创立事件,期待 scheduler 解决; - scheduler 调度完 pod 后,会将 nodeName 以 annotation 的形式打到 PVC 对象上:
volume.kubernetes.io/selected-node: 10.0.0.72
- pv controller 获取到 PVC 对象的更新事件后,解决这个 annotation(
volume.kubernetes.io/selected-node
),依据 nodeName 获取 Node 对象,传入到 provisioner 中。 - provisioner 依据传过来的 Node 对象的 label 获取可用区(
failure-domain.beta.kubernetes.io/zone
),之后在对应 zone 创立 pv,从而达到和 pod 雷同可用区的成果,防止云盘和 node 在不同可用区而无奈挂载。
2、如何在线扩容云盘?
TKE 反对在线扩容 PV,对应的云盘及文件系统,即不须要重启 pod 即可实现扩容。但,为了确保文件系统的稳定性,还是举荐先让云盘文件系统处于未 mount 状况下。为此,咱们将提供两种扩容形式:
-
不重启 pod 的状况下在线扩容
- 这种状况下被扩容的云盘的文件系统被 mount 在节点上,如果 I/O 的话,有可能会呈现文件系统扩容谬误
-
重启 pod 的状况下在线扩容
- 这种状况下被扩容的云盘的文件系统被 unmount 了。能够防止下面的问题,举荐这种形式。
2.1 应用前留神
- TKE 集群版本 >= 1.16,详见 cbs csi 文档
- 仅 cbs csi 插件反对扩容,确保 csi 插件为最新版本
- 能够在扩容前应用快照来备份数据,防止扩容失败导致数据失落。参见下方 3.2.1 应用快照备份云硬盘
2.2 如何应用
2.2.1 创立容许扩容的 StorageClass
在 storageclass 中设置 allowVolumeExpansion
为true
:
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
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!