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