基本概念
有状态工作负载:即kubernetes中的“StatefulSet”,有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如ETCD、mysql-HA等。
操作场景
在运行过程中会保存数据或状态的工作负载称为“有状态工作负载(statefulset)”。例如Mysql,它需要存储产生的新数据。因为容器可以在不同主机间迁移,所以在宿主机上并不会保存数据,这依赖于云容器引擎提供的高可用存储卷,将存储卷挂载在容器上,从而实现有状态工作负载的数据持久化。
约束与限制
当您删除或扩缩有状态负载时,为保证数据安全,系统并不会删除它所关联的存储卷。
当您删除一个有状态负载时,为实现有状态负载中的Pod可以有序停止,请在删除之前将副本数缩容到0。
您需要在创建有状态负载的同时,创建一个Headless Service,用于解决有状态负载Pod互相访问的问题,详情请参见Headless Service。
节点不可用时,Pod状态变为“未就绪”,此时需要手工删除有状态工作负载的Pod,Pod实例才会迁移到正常节点上。
前提条件
在创建容器工作负载前,您需要存在一个可用集群。若没有请参照集群开通中内容创建。
若工作负载需要被外网访问,请确保集群中至少有一个节点已绑定弹性IP,或已购买负载均衡实例。
创建多个工作负载时,请确保容器使用的端口不冲突 ,否则部署会失败。
操作步骤及说明
步骤 1 登录云容器引擎控制台。
步骤 2 单击集群名称进入集群,在左侧选择“工作负载”,选择“有状态”,在右上角单击“创建StatefulSet”。
步骤 3 配置工作负载的信息。
基本信息
负载类型:选择有状态工作负载StatefulSet。工作负载类型的介绍请参见工作负载概述。
负载名称:填写工作负载的名称。
命名空间:选择工作负载的命名空间,默认为当前进入的命名空间。您可以单击后面的“创建命名空间”,命名空间的详细介绍请参见创建命名空间。
实例数量:填写实例的数量,也就是Pod的数量。
时区同步:选择是否开启时区同步。开启后容器与节点使用相同时区(时区同步功能依赖容器中挂载的本地磁盘,请勿修改删除),时区同步详细介绍请参见时区同步。
容器配置
容器信息Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
容器名称:为容器命名。
镜像更新策略:选择是否总是拉取镜像。
镜像名称:选择容器使用的镜像,支持多种镜像来源。
镜像版本:选择需要部署的镜像版本。
资源配额:配置 CPU 和内存的申请值和限制值。
初始化容器:选择是否作为初始化容器。
生命周期:配置容器生命周期的特定操作。
健康检查:设置存活探针、就绪探针及启动探针。
环境变量:设置容器运行环境的变量。
数据存储:挂载本地存储或云存储。
安全设置:对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。
特权容器:选择是否启用特权容器。
镜像访问凭证:选择访问镜像仓库的凭证。
说明
有状态负载支持“动态挂载”云硬盘。动态挂载通过[volumeClaimTemplates]字段实现,并依赖于StorageClass动态创建能力。有状态工作负载通过volumeClaimTemplates字段为每一个Pod关联了一个独有的PVC,而这个PVC又会和对应的PV绑定。因此当Pod被重新调度后,仍然能够根据该PVC名称挂载原有的数据。负载创建完成后,动态存储不支持更新。
实例间发现服务配置
Headless Service用于解决StatefulSet内Pod互相访问的问题,Headless Service给每个Pod提供固定的访问域名。具体请参见Headless Service。
服务配置
服务(Service)是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。您也可以在创建完工作负载之后再创建Service,Service的概念和使用方法请参见Service概述。
高级配置
设置升级策略、调度策略、标签与注解、DNS 配置、性能管理配置、网络配置等。单击右下角“创建工作负载”完成创建。