You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
存储
存储多可用区部署推荐配置
复制全文
下载 pdf
存储多可用区部署推荐配置
通过存储多可用区部署优化,可以帮您最大程度的减少应用发布中断,确保关键业务系统和应用在各种故障情况下能持续运行。本文为您介绍存储在多可用区部署时的推荐配置。​
背景信息​
虽然 Kubernetes 简化了应用分发部署的流程,但隐藏底层硬件逻辑让用户很难感知具体的硬件逻辑,由此可能导致一些非预期的情况,导致应用发布中断受阻。例如:应用实际部署可用区与期望不一致、创建云盘时报错磁盘无效、挂载应用时报错不支持磁盘类型、调度应用时报错提示节点亲和冲突等。​
存储多可用区部署方案,可以指定可用区部署业务,减少可用区资源不足带来的故障问题,能够最大程度减少上述问题,保证业务稳定运行。​
使用说明​
下文主要介绍容器服务测试并验证通过的实践内容,为了获得符合预期的结果,同时符合容器服务的 使用限制,请按照本文方案(或在本文推荐的资源上)操作。如需替换方案,您可以联系对应的客户经理咨询。​
推荐配置​
存储多可用区部署方案的推荐配置如下:​
  • 推荐集群内包含三个可用区,以确保节点和存储资源满足需求。​
  • 推荐使用云盘进行持久化存储,因为云盘相对于 NAS 存储更加稳定,数据传输带宽更高。​
  • 推荐使用高可用类型的云盘,避免云盘挂载失败,发生单点故障。​
  • 当集群可用区内的节点均不可用时,建议立即弹出节点进行匹配。​
  • 确保应用可以均匀分配至各个可用区、各个节点。​
操作步骤​
步骤一:创建包含三个可用区的集群​
存储多可用区部署方案,推荐创建包含三个可用区的集群,以确保节点、存储、应用资源能够分布在不同可用区,提高容灾能力。​
  1. 在左侧导航栏选择 集群。单击 创建集群,配置创建集群所需的参数。​
  • ​​​
  • 本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建集群。​
  • ​
    配置项​
    说明​
    私有网络​
    私有网络为集群提供一个隔离的、自主配置和管理的虚拟网络环境。本场景推荐选择子网涵盖多个可用区的私有网络。​
    Pod 子网​
    供 Pod 使用的网络,为了保证 Pod 在多可用区中部署,本场景推荐同时选择多个可用区中的 Pod 子网。​
    ​
步骤二:根据推荐配置创建节点池​
存储多可用区部署方案,推荐每个节点使用单一可用区。因此,创建节点池时,需要确保每个节点池对应各自不同的可用区。本场景依次创建 3 个可用区,每个节点池分别占用不同的可用区。​
  1. 在集群管理页面的左侧导航栏,选择 节点管理 > 节点池。​
  1. 单击 创建节点池,配置节点池参数。本场景涉及的关键配置说明如下,其他配置项说明,请参见 创建节点池。​
  • 开启节点池弹性伸缩并选择可用区。​
  • ​​​
  • ​
    配置项​
    说明​
    弹性伸缩​
    根据 Pod 的调度状态以及集群内节点资源的使用情况,对集群进行自动扩容或缩容。本场景推荐开启节点池的弹性伸缩功能。更多详细介绍参见:节点弹性伸缩。​
    可用区​
    可用区是同一地域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离,本场景推荐每个节点池使用单一可用区。​
    ​
  • 配置节存储和污点。​
  • ​​​
  • ​
    配置项​
    说明​
    存储​
    配置节点的系统盘和数据盘。本场景推荐优先选择 极速型 SSD 云盘,更多详细介绍参见:云盘规格。​
    节点污点​
    本场景推荐对节点池上的所有节点进行污点配置,确保不会有其他非预期应用被调度过来影响当前应用。​
    ​
步骤三:使用高可用类型的云盘创建存储类​
存储多可用区部署方案,推荐使用云盘类型的动态存储卷,因为云盘存储的性能更加稳定,数据传输带宽也更好。​
  1. 在集群管理页面的左侧导航栏,选择 存储管理 > 存储类。​
  1. 单击 使用 Yaml 创建,输入已经准备的 Yaml 后,单击 确定 开始创建 StorageClass。​
说明​
以下提供 StorageClass 配置的标准模板,可根据实际需求自行修改。​
  • ​
    apiVersion: storage.k8s.io/v1​
    kind: StorageClass​
    metadata:​
    name: sc-disk-essd​
    parameters:​
    ChargeType: PostPaid​
    type: ESSD_PL0​
    zone: cn-beijing-a​
    provisioner: ebs.csi.volcengine.com​
    reclaimPolicy: Delete​
    allowVolumeExpansion: true​
    volumeBindingMode: WaitForFirstConsumer​
    ​
  • 本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:使用云盘动态存储卷。​
  • ​
    配置项​
    说明​
    provisioner​
    存储类型,本场景使用 ebs.csi.volcengine.com,表示 csi-ebs 存储。​
    parameters​
    存储参数,不同类型的存储支持的参数不同。​
    • type:云盘存储的类型,目前支持 ESSD_PL0、ESSD_FlexPL,可根据实际需求选择。其中,ESSD_FlexPL 提供额外性能扩展,详细配置和说明参见:创建 StorageClass。​
    • zone:用于选择 EBS 云盘所属的可用区,本场景建议将制作卷的拓扑限制在特定的区域。​
    reclaimPolicy​
    云盘的回收策略,包括:Delete、Retain。如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。​
    • Delete:删除PVC的时候,PV和云盘会一起删除。​
    • Retain:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。​
    allowVolumeExpansion​
    定义由此存储类创建的 PV 是否支持动态扩容,本场景推荐 true。​
    volumeBindingMode​
    云盘的绑定模式。包括:​
    • Immediate:随存储卷声明的创建直接完成卷的绑定和分配。​
    • WaitForFirstConsumer:延迟存储卷的绑定和分配,直到使用该存储卷声明的 Pod 被创建。​
    ​
步骤四:创建应用并分布在不同可用区​
存储多可用区部署方案,推荐将应用分布至各个可用区的各个节点,最大程度的减少应用发布中断。​
  1. 在集群管理页面的左侧导航栏,选择 工作负载 > 有状态负载。​
  1. 单击 使用 Yaml 创建,输入已经准备的 Yaml 后,单击 确定 开始创建 StatefulSet。​
说明​
以下仅提供 StatefulSet 配置的标准模板,您可以根据实际需求自行修改。​
  • ​
    apiVersion: apps/v1​
    kind: StatefulSet​
    metadata:​
    name: nginx​
    namespace: default​
    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: sc-disk-essd​
    resources:​
    requests:​
    storage: 40Gi​
    ​
  • 本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建有状态负载。​
  • ​
    配置项​
    说明​
    topologySpreadConstraints​
    尽量让高可用的 Pod 分布在不同的可用区,更多详细说明参见:Topology Spread Constraints。​
    • labelSelector:用于查找匹配的 Pod。对匹配此标签选择器的 Pod 进行计数,以确定其相应拓扑域中的 Pod 数量。​
    • maxSkew:在给定的拓扑类型中,任意两个拓扑域上匹配的 Pod 数量所允许的最大差异。这个值用来衡量 Pod 分布的不均匀程度,且取值必须大于 0。​
    • topologyKey:节点标签的键。当两个节点都使用此键标记且标签值相同时,调度器会认为这两个节点处于相同的拓扑中;调度器试图向每个拓扑域放入数量均衡的 Pod。​
    • whenUnsatisfiable:当 Pod 不满足传播约束时,调度器处理该 Pod 的方式,支持:DoNotSchedule(默认,不调度该 Pod)、ScheduleAnyway(仍然调度该 Pod,并且优先考虑最小化偏斜的节点)。​
    volumeClaimTemplates​
    根据指定的 Replicas 数量自动创建对应数量的云盘,便于快速扩展。​
    ​
​
最近更新时间:2026.08.19 11:38:05
这个页面对您有帮助吗?
有用
有用
无用
无用