您可以在金山云容器服务Kubernetes集群中使用云硬盘存储卷,支持以静态存储卷的形式挂载到容器的某一路径,云硬盘会随着容器的迁移而迁移。
目前,金山云提供两种kubernetes挂载方式:
静态存储卷
可以通过以下两种方式使用云硬盘静态存储卷:
如果某一节点上挂载的云硬盘已达到数量限制(8块),此节点不再支持使用存储卷挂载云硬盘。
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
注:安装了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"
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" # 节点的可用区
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-disk
spec:
storageClassName: ""
volumeName: csi-pv # 指定需绑定的PV名称,如不指定会根据存储容量和accessModes自动匹配符合条件的PV
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
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: 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
参数说明:
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
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!