有状态负载
在运行过程中会保存数据或状态的工作负载称为“有状态工作负载(statefulset)”,创建的Pod拥有持久型标识符,Pod迁移或销毁重启后,标识符仍会保留。有状态负载不支持弹性伸缩,适用于需要使用持久化存储的场景,如ETCD等。
创建有状态负载
- 登录UCS控制台,在左侧导航栏中选择“容器舰队”。
- 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。
- 在左侧导航栏中选择“工作负载”,切换至“有状态负载”页签,并单击右上角“镜像创建”。
若使用已有的YAML创建工作负载,请单击右上角“YAML创建”。
- 设置工作负载基本信息。
- 负载类型:选择“有状态负载”。
- 负载名称:新增工作负载的名称,命名必须唯一。
- 命名空间:选择工作负载所在命名空间。如需新建命名空间,请参见创建命名空间。
- 描述:工作负载的描述信息。
- 实例数量:设置多集群的工作负载中各集群的实例数。用户可以设置具体实例个数,默认为2。每个工作负载实例都由相同的容器部署而成。在UCS中可以通过设置弹性扩缩容策略,根据工作负载资源使用情况,动态调整工作负载实例数。
- 设置工作负载容器配置。
Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器并分别进行设置。
图1 容器配置
- 基本信息:
表1 基本信息参数说明 参数
说明
容器名称
为容器命名。
镜像名称
单击后方“选择镜像”,选择容器使用的镜像。- 我的镜像:当前区域下华为云镜像仓库中的镜像。若无可用的镜像,可单击“上传镜像”进行上传。
- 镜像中心:开源镜像仓库中的官方镜像。
- 共享镜像:由他人账号共享的私有镜像,详情请参见共享私有镜像。
镜像版本
选择需要部署的镜像版本。
更新策略
镜像更新/拉取策略。勾选“总是拉取镜像”表示每次都从镜像仓库拉取镜像;如不勾选则优先使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。
CPU配额
- 申请:容器需要使用的最小CPU值,默认0.25Core。
- 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。
内存配额
- 申请:容器需要使用的内存最小值,默认512MiB。
- 限制:允许容器使用的内存最大值。如果超过,容器会被终止。
关于CPU/内存配额申请和限制的具体说明请参见设置容器规格。
初始化容器
选择容器是否作为初始化容器。
Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。详细说明请参见Init 容器。
- 生命周期:设置生命周期回调函数可在容器的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以设置相应的函数。目前提供的生命周期回调函数有启动命令、启动后处理、停止前处理,详情请参见设置容器生命周期。
- 健康检查:设置健康检查可以在容器运行过程中定时检查容器的健康状况,详情请参见设置容器健康检查。
- 环境变量:容器运行环境中设定的一个变量,通过环境变量设置的配置项不会随着Pod生命周期结束而变化,详情请参见设置环境变量。
- 数据存储:配置容器存储,可以使用本地存储和存储卷声明(PVC)。建议使用PVC将工作负载Pod数据存储在云存储上。若存储在本地磁盘上,节点异常无法恢复时,本地磁盘中的数据也将无法恢复。容器存储相关内容请参见容器存储。
- 安全设置:对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。
- 镜像访问凭证:用于访问镜像仓库的凭证。该凭证仅访问私有镜像仓库时使用,如所选镜像为公开镜像,则无需选择密钥。密钥的创建方法请参见创建密钥。
- 基本信息:
- 设置工作负载实例间发现服务配置。
StatefulSet实例间发现通过无头服务(Headless Service)实现,无头服务并不会分配 Cluster IP,并且查询会返回所有Pod的DNS记录,这样就可查询到所有Pod的IP地址。
- Service名称:输入工作负载所对应的服务名称,用于集群内工作负载间的互相访问。该服务主要用于实例的内部发现,不需要有单独的IP地址,也不需要做负载均衡。
- 端口配置:
- 端口名称:端口名称用于给容器端口命名,通常以端口用途命名。
- 服务端口:输入服务端口。
- 容器端口:输入容器的监听端口。
- (可选)单击服务配置栏的,进行工作负载服务配置。
若工作负载需要和其它服务互访,或需要被公网访问,您需要添加服务(Service),设置访问方式。工作负载访问的方式决定了这个工作负载的网络属性,不同访问方式的工作负载可以提供不同网络能力,操作详情请参见服务与路由。
您也可以在创建完工作负载之后再创建Service,参见集群内访问(ClusterIP)和节点访问(NodePort)。
- Service名称:新增服务名称,用户可自定义,服务名称必须唯一。
- 访问类型:
- 集群内访问(ClusterIP):只能集群内访问服务。
- 节点访问(NodePort):可以通过集群内任意节点访问到服务。
- 服务亲和(仅节点访问设置):
- 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。
- 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。
- 端口配置:
- 协议:TCP或UDP,请根据业务的协议类型选择。
- 服务端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问应用时使用,端口范围为1-65535,可任意指定。
- 容器端口:容器镜像中应用程序实际监听的端口,需用户确定。例如:nginx程序实际监听的端口为80。
- 节点端口(仅节点访问设置):容器端口映射到节点私有IP上的端口,用私有IP访问应用时使用,端口范围为30000-32767,建议选择“自动生成”。
- 自动生成:系统会自动分配端口号。
- 指定端口:指定固定的节点端口,默认取值范围为30000-32767。若指定端口时,请确保同个集群内的端口唯一性。
- (可选)单击“展开高级配置”,设置工作负载高级配置。
- 升级策略:指定有状态负载的升级方式,包括整体替换升级和逐步滚动升级,详细参数说明请参见配置工作负载升级策略。
- 滚动升级:滚动升级将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新的和旧的实例上,因此业务不会中断。
- 替换升级:有状态工作负载的替换升级,需要手动删除旧实例,再创建新实例。升级过程中业务会中断。
- 实例管理策略:
- 有序策略:默认实例管理策略,有状态负载会逐个的、按顺序的进行部署、删除、伸缩实例, 只有前一个实例部署Ready或者删除完成后,有状态负载才会操作后一个实例。
- 并行策略:支持有状态负载并行创建或者删除所有的实例,有状态负载发生变更时立刻在实例上生效。
- 调度策略:您可设置亲和(affinity)与反亲和(anti-affinity)实现Pod的计划性调度,详细信息请参见配置调度策略(亲和与反亲和)。
- 标签与注解:您可以单击“添加”为Pod增加标签或注解,新增标签或注解的键不能与已有的重复。
- 升级策略:指定有状态负载的升级方式,包括整体替换升级和逐步滚动升级,详细参数说明请参见配置工作负载升级策略。
- 单击“下一步”,对选择的集群进行调度与差异化配置。在选择可调度集群后,可对容器进行“差异化配置”。
- 集群调度策略:
- 调度方式:
- 复制分发:工作负载将在勾选的所有集群中进行部署。
- 部署集群:单击集群即可将其勾选为工作负载可调度的集群,集群个数请您根据自身业务进行确定。
- 调度方式:
- 差异化配置:
工作负载在不同的集群中部署可进行差异化的配置。在选择可调度集群后单击对应集群右上角,即可对每个集群进行差异化配置,差异化后的容器配置只对该集群生效。
具体参数说明请参见容器配置。
- 集群调度策略:
- 设置完成后,单击“创建工作负载”完成创建。