全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用云硬盘存储卷

最近更新时间: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 分配给节点

直接通过volume使用

注:只有安装了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/PVC使用

  • 定义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。

创建StorageClass

注:安装了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:若选择"包年包月"的计费方式,需要设置购买时长,单位为月。

创建Deployment

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

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈