有状态服务-静态云盘使用最佳实践
本文为您介绍有状态服务-静态云盘的常见使用场景及方法。
背景信息
云盘的使用场景包括:
- 对磁盘I/O要求高的应用,且没有共享数据的需求,如MySQL、Redis等数据存储服务。
- 高速写日志。
- 持久化存储数据,不因Pod生命周期的结束而消失。
静态云盘的使用场景:
已经购买了云盘实例的情况。
静态云盘使用方式:
需手动创建PV及PVC。
前提条件
- 您已成功创建一个Kubernetes集群,参见创建Kubernetes集群。
- 您已成功创建一个云盘,参见创建按量付费云盘。
- 您可以通过kubectl连接到Kubernetes集群,参见通过 kubectl 连接 Kubernetes 集群。
使用限制
- 云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。
- 集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。
创建PV
- 创建pv-static.yaml文件。
apiVersion: v1 kind: PersistentVolume metadata: name: <your-disk-id> labels: alicloud-pvname: <your-disk-id> failure-domain.beta.kubernetes.io/zone: <your-zone> failure-domain.beta.kubernetes.io/region: <your-region> spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce flexVolume: driver: "alicloud/disk" fsType: "ext4" options: volumeId: "<your-disk-id>"
说明alicloud-pvname: <your-disk-id>
:PV的名称。需要与volumeID
云盘ID一致。failure-domain.beta.kubernetes.io/zone: <your-zone>
:云盘所在的可用区。例如:cn-hangzhou-b。failure-domain.beta.kubernetes.io/region: <your-region>
:云盘所在的地域。例如:cn-hangzhou。
failure-domain.beta.kubernetes.io/zone
和failure-domain.beta.kubernetes.io/region
,在多可用区的情况下,必须配置,可保证您的Pod调度到云盘所在的可用区。 - 执行以下命令,创建PV。
$ kubectl create -f pv-static.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
存储卷列表页面,选择目标集群,可以看到刚刚创建的PV。

,进入
存储卷列表页面,选择目标集群,可以看到刚刚创建的PV。

创建PVC
创建云盘存储声明PVC,使用selector
筛选PV,精确配置PVC和PV的绑定关系。
- 创建pvc-static.yaml文件。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: <your-disk-id>
- 执行以下命令,创建PVC。
$ kubectl create -f pvc-static.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
存储声明列表页面,选择目标集群和命名空间,可以看到刚刚创建的PVC。

,进入
存储声明列表页面,选择目标集群和命名空间,可以看到刚刚创建的PVC。

创建应用
- 创建static.yaml文件。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-static 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: pvc-disk
- 执行以下命令,创建Deployment。
$ kubectl create -f static.yaml
预期结果
在 Kubernetes 菜单下,单击左侧导航栏的
,进入
部署列表页面,选择目标集群和命名空间,可以看到刚刚创建的deployment。

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

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