最近更新时间:2024-04-25 09:59:16
您可以在金山云容器服务Kubernetes集群中使用云硬盘存储卷,支持以静态存储卷的形式挂载到容器的某一路径,云硬盘会随着容器的迁移而迁移。
目前,金山云提供两种kubernetes挂载方式:
静态存储卷
可以通过以下两种方式使用云硬盘静态存储卷:
动态存储卷
如果某一节点上挂载的云硬盘已达数量限制,此节点不再支持使用存储卷挂载云硬盘,且csinode yaml中不再显示allocatable.account字段。您可通过以下命令查看可挂载的云硬盘数量限制。
kubectl get csinode <ip> -oyaml
可挂载的云硬盘数量限制只会在csi-diskplugin Pod启动时计算,所以不建议您手动在节点上添加或删除云硬盘,若手动操作了,可重建该节点上的csi-diskplugin Pod,重新计算可挂载的云硬盘数量限制。
1、云硬盘为非共享存储,只能被一个实例挂载,实例数量需要设置为1。
2、使用前需要先在控制台申请一块云硬盘,并获得磁盘 ID(volumeId)。
3、在使用Flexvolume模式时,volumeName、PV Name要与之volumeId相同。
4、集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。
5、文件系统类型(fsType)支持ext3、ext4、xfs。
6、如您选择云硬盘作为存储卷,建议在创建服务时,将pod调度到支持挂载云硬盘的机型(详见云硬盘使用限制),否则可能存在云硬盘无法挂载的情况出现。具体调度方式参考将 Pod 分配给节点。
注:只有安装了flexvolume组件的集群可以直接通过volume使用EBS云硬盘,如您安装的是csi-driver组件,请参考通过PV/PVC使用和动态存储卷章节使用EBS云硬盘。
下面的示例 nginx-disk-deploy.yaml 将yaml文件中声明的EBS云硬盘挂在到pod内的nginx-flexvolume-disk容器的 /data 路径下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-disk-deploy
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-flexvolume-disk
image: nginx
volumeMounts:
- name: "b5c80953-1499-40ff-918a-4d6d4dfbfddd"
mountPath: "/data"
volumes:
- name: "b5c80953-1499-40ff-918a-4d6d4dfbfddd" # volume的name要与volumeId相同
flexVolume:
driver: "ksc/ebs"
fsType: "ext4"
options:
volumeId: "b5c80953-1499-40ff-918a-4d6d4dfbfddd" # 待挂载的云硬盘Id
定义PV
注:安装了flexvolume组件的集群请使用Flexvolume模式,安装了csi-driver组件的集群请使用CSI模式。
Flexvolume模式
apiVersion: v1
kind: PersistentVolume
metadata:
name: "b5c80953-1499-40ff-918a-4d6d4dfbfddd" # 使用Flexvolume模式时,PV的name要与volumeId相同
spec:
storageClassName: ""
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
flexVolume:
driver: "ksc/ebs"
fsType: "ext4"
options:
volumeId: "b5c80953-1499-40ff-918a-4d6d4dfbfddd" # 待挂载的云硬盘Id
CSI模式
apiVersion: v1
kind: PersistentVolume
metadata:
name: csi-pv
spec:
storageClassName: ""
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
csi:
driver: "com.ksc.csi.diskplugin"
fsType: "ext4"
volumeAttributes:
type: ESSD_PL0 #type为云硬盘类型
volumeHandle: "b5c80953-1499-40ff-918a-4d6d4dfbfddd" # 待挂载的云硬盘Id
nodeAffinity: # 选填,通过定义该参数可以将使用这个PV的Pod调度到指定地域和可用区的节点
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/region
operator: In
values:
- "cn-beijing-6" # 节点的地域
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- "cn-beijing-6a" # 节点的可用区
定义PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-disk
spec:
storageClassName: ""
volumeName: csi-pv # 指定需绑定的PV名称,如不指定会根据存储容量和accessModes自动匹配符合条件的PV
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-disk-deploy
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: pvc-disk
mountPath: "/data"
volumes:
- name: pvc-disk
persistentVolumeClaim:
claimName: pvc-disk
动态存储卷需要手动创建 StorageClass,并在PVC中指定storageClassName。
注:安装了flexvolume组件的集群请使用Flexvolume模式,安装了csi-driver组件的集群请使用CSI模式。
Flexvolume模式
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd30
provisioner: ksc/ebs
parameters:
type: SSD3.0
region: cn-beijing-6 # 选填
zone: cn-beijing-6a # 选填
chargetype: Daily
CSI模式
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd30
provisioner: com.ksc.csi.diskplugin
parameters:
type: SSD3.0
region: cn-beijing-6 # 选填
zone: cn-beijing-6a # 选填
chargetype: Daily
参数说明:
provisioner:Flexvolume模式配置为ksc/ebs,CSI模式配置为com.ksc.csi.diskplugin,指定使用金山云Provsioner插件创建。
reclaimPolicy: 云盘的回收策略,默认为Delete,支持Retain。
type:EBS类型,必填,可选参数:SSD3.0/EHDD/ESSD_PL1/ESSD_PL2/ESSD_PL3(字母全部大写)。
region(选填):创建云盘的地域。
zone(选填):创建云盘的可用区,注意不同可用区可创建的EBS类型不一样,具体对应关系参考云硬盘使用限制。当不指定zone参数时,则会在集群所拥有的全部节点所在可用区中随机选择可用区创建云盘。
chargetype:云盘的计费方式,默认值为Daliy,详情参考创建云硬盘OpenAPI中的chargetype字段。
purchasetime:若选择"包年包月"的计费方式,需要设置购买时长,单位为月。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: pvc-disk
mountPath: "/data"
volumes:
- name: pvc-disk
persistentVolumeClaim:
claimName: nginx-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: ssd30
resources:
requests:
storage: 20Gi
纯净模式