文档首页/ 云容器引擎 CCE/ 最佳实践/ 存储/ 存储多可用区部署的推荐配置
更新时间:2024-09-14 GMT+08:00
分享

存储多可用区部署的推荐配置

应用场景

  • 在多可用区构成的集群下,业务可以指定可用区部署。
  • 多可用区部署可以减少可用区资源不足带来的故障问题。

通过存储多可用区部署优化,可以帮您最大限度地减少应用发布中断,确保关键业务系统和应用在各种故障情况下能持续运行。

前提条件

  • 您已创建一个安装CCE容器存储(Everest)的集群,并且集群版本 ≥ 1.21。若没有可用集群 ,请参照购买Standard/Turbo集群创建。
  • 集群的节点至少分布在三个不同的可用区,若当前集群的节点分布尚未覆盖三个可用区,请参照创建节点创建节点池在未部署的可用区中创建新节点。

操作步骤

  1. kubectl连接集群,具体请参见kubectl连接集群
  2. 创建存储类StorageClass的Yaml文件,需要使用高可用类型的云盘避免云盘挂载失败。

    vi storageclass.yaml

    向storageclass.yaml中填入以下内容,该内容仅是StorageClass配置的模板,您可以根据需求自行修改。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: test-disk-topology-alltype
    provisioner: everest-csi-provisioner
    parameters:
      csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
      csi.storage.k8s.io/fstype: ext4
      everest.io/disk-volume-type: SAS
      everest.io/passthrough: "true"
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    表1 StorageClass部分参数说明

    参数

    说明

    provisioner

    存储资源提供商,CCE均由everest插件提供,此处只能填写everest-csi-provisioner。

    parameters

    存储参数,不同类型的存储支持的参数不同。详情请参见parameters参数说明

    须知:

    everest.io/disk-volume-type表示云盘类型,有多种选择。

    • SAS:高I/O。
    • SSD:超高I/O。
    • GPSSD:通用型SSD。
    • ESSD:极速型SSD。
    • GPSSD2:通用型SSD v2,everest版本为2.4.4及以上支持使用,使用时需同时指定everest.io/disk-iops和everest.io/disk-throughput注解。
    • ESSD2:极速型SSD v2,everest版本为2.4.4及以上支持使用,使用时需指定everest.io/disk-iops注解。

    reclaimPolicy

    用来指定创建PV的persistentVolumeReclaimPolicy字段值,支持Delete和Retain。如果StorageClass对象被创建时没有指定reclaimPolicy,它将默认为Delete。

    • Delete:表示动态创建的PV,在PVC销毁的时候PV也会自动销毁。
    • Retain:表示动态创建的PV,在PVC销毁的时候PV不会自动销毁。

    allowVolumeExpansion

    定义由此存储类创建的PV是否支持动态扩容,默认为false。是否能动态扩容是由底层存储插件来实现的,这里只是一个开关。

    volumeBindingMode

    表示卷绑定模式,即动态创建PV的时间,分为立即创建和延迟创建。

    • Immediate:创建PVC时完成PV绑定和动态创建。
    • WaitForFirstConsumer:延迟PV的绑定和创建,当在工作负载中使用该PVC时才执行PV创建和绑定流程。

  3. 创建StorageClass。

    kubectl create -f storageclass.yaml

  4. 创建StatefulSet的Yaml文件。

    vi statefulset.yaml

    向statefulset.yaml文件中填入以下内容,该内容仅是标准StatefulSet应用配置的模板,您可以根据需求自行定义。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx 
    spec:
      serviceName: "nginx"
      selector:
        matchLabels: 
          app: nginx
      template:
        metadata:
          labels: 
            app: nginx
        spec:
          topologySpreadConstraints:
          - labelSelector:
              matchLabels:
                app: nginx
            maxSkew: 1
            topologyKey: topology.kubernetes.io/zone
            whenUnsatisfiable: ScheduleAnyway
          containers:
          - image: nginx:latest
            name: nginx
            env:
            - name: NGINX_ROOT_PASSWORD
              value: "nginx"
            volumeMounts: 
            - name: disk-csi
              mountPath: /var/lib/nginx
          tolerations:
          - key: "app"
            operator: "Exists"
            effect: "NoSchedule"
      volumeClaimTemplates:
      - metadata:
          name: disk-csi
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: test-disk-topology-alltype
          resources:
            requests:
              storage: 40Gi
    表2 StatefulSet部分参数说明

    参数

    说明

    topologySpreadConstraints

    尽量让高可用的Pod分布在不同的可用区。

    topologySpreadConstraints.labelSelector

    用于查找匹配的Pod。对匹配此标签选择器的Pod进行计数,以确定其相应拓扑域中的Pod数量。

    topologySpreadConstraints.maxSkew

    表示在给定的拓扑类型中,任意两个拓扑域上匹配的Pod数量所允许的最大差异。这个值用来衡量Pod分布的不均匀程度,且取值必须大于0。

    topologySpreadConstraints.topologyKey

    表示节点标签的键。当两个节点都使用此键标记且标签值相同时,调度器会认为这两个节点处于相同的拓扑中。调度器试图向每个拓扑域放入数量均衡的Pod。

    topologySpreadConstraints.whenUnsatisfiable

    表示当Pod不满足传播约束时,调度器处理该Pod的方式。whenUnsatisfiable有两种取值:

    • DoNotSchedule(默认):不调度该Pod。
    • ScheduleAnyway:仍然调度该Pod,并且优先考虑最小化偏斜的节点。

    volumeClaimTemplates

    根据指定的Replicas数量自动创建对应数量的云盘,便于快速扩展。

  5. 创建StatefulSet应用。

    kubectl create -f statefulset.yaml

配置验证

以下步骤均满足,则说明配置成功。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧选择“工作负载”,上方选择“有状态负载”,目标工作负载状态为运行中。

    图1 检查目标工作负载状态

  3. 在左侧选择“存储”,上方选择“存储卷声明”,SC名称为test-disk-topology-alltype对应的PVC状态为已绑定。

    图2 检查PVC状态

  4. 上方选择“存储卷”,SC名称为test-disk-topology-alltype对应的PV状态为已绑定。

    图3 检查PV状态

  5. 在PV的操作列单击“查看YAML”,检查PV的YAML文件中是否存在可用区信息。

    图4 检查PV可用区

相关文档