动态存储卷需要您手动创建StorageClass,并在PVC中通过storageClassName来指定期望的云盘类型。
创建指定zoneId的StorageClass
创建并复制以下内容到storage-class.yaml中。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b reclaimPolicy: Retain
参数说明如下。
参数
描述
provisioner
配置为alicloud/disk,标识StorageClass使用阿里云云盘provisioner插件创建。
type
标识云盘类型,支持
cloud_efficiency
、cloud_ssd
、cloud_essd
、available
四种参数,其中available
会对ESSD、SSD、高效云盘依次尝试创建,直到创建成功。regionId
期望创建云盘的地域。
reclaimPolicy
云盘的回收策略,默认为
Delete
,支持Retain
。如果数据安全性要求高,推荐使用Retain
方式以免误删。zoneId
期望创建云盘的可用区。
如果是多可用区的情况,
zoneId
可同时配置多个,示例如下:zoneId: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
encrypted
可选参数。创建的云盘是否加密,默认情况是
false
,创建的云盘不加密。执行以下命令,创建StorageClass。
kubectl apply -f storage-class.yaml
创建延迟绑定的StroageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-ssd
provisioner: alicloud/disk
parameters:
type: cloud_ssd
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
如果配置的StorageClass没有
WaitForFirstConsumer
,且没有配置zoneid
,这时创建的PV和Disk-Controller组件所在节点的Zone是一样的。如果配置的StorageClass没有
WaitForFirstConsumer
,但是配置了zoneid
,这时创建的PV会根据zoneid
的配置,轮询使用其中的zoneid
。如果使用WaitForFirstConsumer,会根据消费此PVC的Pod所调度的节点创建云盘,即在Pod调度的可用区创建云盘。
创建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: disk-ssd
spec:
accessModes:
- ReadWriteOnce
storageClassName: alicloud-disk-ssd-hangzhou-b
resources:
requests:
storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
name: disk-pod-ssd
spec:
containers:
- name: disk-pod
image: nginx
volumeMounts:
- name: disk-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: disk-pvc
persistentVolumeClaim:
claimName: disk-ssd
默认选项:
在多可用区的集群中,需要您手动创建上述StorageClass,这样可以更准确地定义所需要云盘的可用区信息。
集群默认提供了以下几种StorageClass,可以在单可用区类型的集群中使用。
alicloud-disk-efficiency:高效云盘。
alicloud-disk-ssd:SSD云盘。
alicloud-disk-essd:ESSD云盘。
alicloud-disk-available:提供高可用选项,优先创建SSD云盘;如果SSD云盘售尽,则创建高效云盘。
重要对于alicloud-disk-controller v1.14.8.44-c23b62c5-aliyun之前的版本,优先创建ESSD云盘;如果ESSD云盘售尽,则创建SSD云盘;如果SSD云盘售尽,则创建高效云盘。
alicloud-disk-topology:使用延迟绑定的方式创建云盘。
使用云盘创建多实例StatefulSet
使用volumeClaimTemplates的方式来创建,这样会动态创建多个PVC和PV并绑定。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: disk-ssd
mountPath: /data
volumeClaimTemplates:
- metadata:
name: disk-ssd
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alicloud-disk-ssd-hangzhou-b"
resources:
requests:
storage: 20Gi
您也可以通过控制台的方式使用动态云盘卷,请参见通过控制台使用动态云盘卷。