有状态服务-动态云盘使用最佳实践
本文为您介绍有状态服务-动态云盘的常见使用场景及方法。
背景信息
动态云盘的使用场景:
没有购买云盘,在应用部署时自动购买云盘的情况。
动态云盘的使用方式:
- 手动创建PVC,在PVC中声明StorageClass。
- 部署应用时通过StorageClass自动创建PV。
前提条件
- 您已成功创建一个Kubernetes集群,参见创建Kubernetes集群。
- 您可以通过kubectl连接到Kubernetes集群,参见通过 kubectl 连接 Kubernetes 集群。
- 集群中需要安装Provisioner插件,该插件可以根据StorageClass自动创建云盘。
Provisioner插件
容器服务Kubernetes版在创建集群时,默认安装Provisioner插件。
创建StorageClass
阿里云容器服务Kubernetes在系统初始化的时候会默认创建4个StorageClass,且使用参数的默认情况。同时这4个StorageClass仅适用于单可用区集群,若是多可用区集群,则需要自己另行创建StorageClass。这4个StorageClass分别为:
- alicloud-disk-common:自动创建普通云盘。
- alicloud-disk-efficiency:自动创建高效云盘。
- alicloud-disk-ssd:自动创建SSD云盘。
- alicloud-disk-available:提供高可用选项,先尝试自动创建高效云盘;如果相应可用区的高效云盘资源售尽,再尝试自动创建SSD云盘,如果该可用区的SSD云盘也售尽,则尝试自动创建普通云盘。
- 创建storageclass.yaml文件。
kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk reclaimPolicy: Retain parameters: type: cloud_ssd regionid: cn-hangzhou zoneid: cn-hangzhou-b fstype: "ext4" readonly: "false"
参数解释:
provisioner
:动态云盘配置为 alicloud/disk,标识使用provisioner 插件自动创建阿里云云盘。reclaimPolicy
:云盘的回收策略。支持Delete和Retain,默认情况为Delete。说明 如果配置为
Delete,删除PVC时,云盘会一起删除,云盘上的数据不可恢复。type
:自动创建云盘的类型,支持cloud、cloud_efficiency、cloud_ssd、available。regionid
:(可选)自动创建云盘所在的region。与集群的region相同。zoneid
:(可选)自动创建云盘所在的zone。- 单可用区集群,与集群所在zone相同。
- 多可用区集群,zoneid可同时配置多个,例如:
zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
fstype
:(可选)自动创建云盘所使用的文件系统,默认情况为ext4。readonly
:(可选)挂载自动创建云盘的权限是否为可读,支持true:云盘具有只读权限,false:云盘具有可读可写权限,默认情况为false。encrypted
:(可选)自动创建的云盘是否加密,支持true:加密,false:不加密,默认情况为false。
- 执行以下命令,创建StorageClass。
$ kubectl create -f storageclass.yaml
创建PVC
- 创建pvc-ssd.yaml文件。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20Gi
- 执行以下命令,创建PVC。
$ kubectl create -f pvc-ssd.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
存储声明列表页面,选择目标集群和命名空间,可以看到该PVC绑定的存储类型为
alicloud-disk-ssd-hangzhou-b,并且关联存储卷。

,进入
存储声明列表页面,选择目标集群和命名空间,可以看到该PVC绑定的存储类型为
StorageClass
中声明的alicloud-disk-ssd-hangzhou-b,并且关联存储卷。

创建应用
- 创建pvc-dynamic.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dynamic labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: disk-ssd
- 执行以下命令,创建Deployment。
$ kubectl create -f nginx-dynamic.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
部署列表页面,选择目标集群和命名空间,可以看到刚刚创建的deployment。

,进入
部署列表页面,选择目标集群和命名空间,可以看到刚刚创建的deployment。

动态云盘的持久化存储
- 执行以下命令,查看部署的deployment所在Pod的名称。
$ kubectl get pod | grep dynamic nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3m
- 执行以下命令,查看/data路径下是否挂载了新的云盘。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf df | grep data /dev/vdh 20511312 45080 20449848 1% /data
- 执行以下命令,查看/data路径下的文件。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf ls /data lost+found
- 执行以下命令,在/data路径下创建文件dynamic。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf touch /data/dynamic
- 执行以下命令,查看/data路径下的文件。
$ kubectl exec nginx-dynamic-5c74594ccb-zl9pf ls /data dynamic lost+found
- 执行以下命令,删除名称为
nginx-dynamic-5c74594ccb-zl9pf
的Pod。$ kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
- 同时在另一个窗口中,执行以下命令,查看Pod删除及Kubernetes重建Pod的过程。
$ kubectl get pod -w -l app=nginx NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 6m48s nginx-dynamic-5c74594ccb-zl9pf 2/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Init:0/1 0 0s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-45sd4 0/2 PodInitializing 0 5s nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 22s
- 执行以下命令,查看Kubernetes重建的Pod名称。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2m
- 执行以下命令,查看/data路径下的文件,刚刚创建的文件dynamic并没有被删除,说明动态云盘的数据可持久保存。
$ kubectl exec nginx-dynamic-5c74594ccb-45sd4 ls /data dynamic lost+found
发布者:佚, 佚名,转转请注明出处:https://www.cms2.cn/aliyun/csk/5186.html