创建有状态工作负载statefulset
创建有状态工作负载Statefulset
1. 前提条件
已创建容器集群,具体操作请参见 创建集群 ;
已构建私有镜像仓库。
2. 操作步骤
登录容器云服务控制台,若默认进入的集群非目标集群,可在顶部的导航栏出切换进入集群;
在左侧导航栏中,选择【工作负载】->【有状态】;
单击【创建】,进入“创建有状态”页面。根据实际需求,完成参数设置:
基本信息
- 负载名称:设置负载资源的名称;
- 命名空间:根据实际需求选择集群下的命名空间;
- Pod数量:Deployment包含的Pod数量,默认为1;
- 实例类型:根据需要选择容器实例的机型配置;
- Statefulset标签:输入键-值对(Key-Value),为Statefulset设置标签;
- Statefulset注释:输入键-值对(Key-Value),为Statefulset设置注释;
容器配置
- 镜像名称:
- 我的镜像:若已开通容器镜像服务,则对应显示该区域镜像仓库镜像信息。根据需要进行选择;
- 公共镜像:平台提供的公共镜像;
- 镜像tag:选择镜像tag;
- 选择Secret:当选择镜像为【我的镜像】私有镜像时,需要关联选择对应镜像仓库的Secret;
- 镜像拉取策略:
- IfNotPresent:如果本地存在该镜像,则使用本地镜像;若本地无该镜像,则从远程拉取镜像;
- Always:每次部署总是从远程拉取镜像;
- 所需资源:容器的GPU/CPU/内存,根据需要设置;
- 容器启动项:
- stdin:勾选表示为该容器开启标准输入;
- tty:勾选表示为该容器分配一个虚拟终端;
初始化容器:勾选表示创建一个init Container。
展开页面【高级设置】设置按钮,可完成以下参数设置:
端口设置:
- 名称:设置容器端口的名称;
- 容器端口:设置暴露的容器访问端口,端口范围1~65535;
- 协议:支持TCP、UDP;
- 环境变量:
- 类型:设置环境变量的类型,支持:
- 自定义
- 配置项ConfigMap
- 保密字典Secret
- 变量名称:设置环境变量的名称;
- 变量/变量 引用:设置变量引用的值;
- 类型:设置环境变量的类型,支持:
- 工作目录:设置容器的工作目录;
- 运行命令:设置容器运行的输入命令;
- 运行参数:传递给容器运行命令的输入参数;
- 健康检查:
- 存活检查:勾选后可进行设置,用来检查容器是否正常,不正常则重启容器;
- 就绪检查:勾选后可进行设置,使用就绪检查可以判断容器合适准备好接受流量;
- 启动检查:勾选后可进行设置,用于检测容器内应用是否启动;
- 生命周期:勾选后可设置容器的启动前处理和停止前处理。支持二进制方式和bash方式;
存储:为容器提供存储,支持本地存储和PVC;
添加本地存储:支持临时目录、ConfigMap、Secret,将对应挂载源挂载到容器路径中;
添加PVC:支持通过PVC挂载云存储卷。选择挂载源前需要提前创建好PVC,具体操作请参见 使用云硬盘静态存储卷 或 使用CFS动态存储卷 。
扩展配置
- 服务Service:勾选后可进行Service配置,具体参数使用说明参见 Service管理 ;
- Pod标签:输入键-值对(Key-Value),为Pod设置标签;
- Pod注释:输入键-值对(Key-Value),为Pod设置注释。
3. 使用YAML创建Statefulset
登录容器云服务控制台,若默认进入的集群非目标集群,可在顶部的导航栏出切换进入集群。
在左侧导航栏中,选择【工作负载】->【有状态】。
单击【YAML 创建】,完成参数设置:
- 模板:支持使用定义模板或平台提供的系统模板;
- 模板内容:选择好模板后,在“模板内容”区域可以对模板进行编辑。完成参数设置后,点“保存模板”可将改动保存到自定义模板。点“确定”完成创建。
4. 使用kubectl创建Statefulset
参考系统模板,根据需要准备好创建Statefulset的YAML文件;
YAML示例:
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
labels:
app/statefulset: "nginx"
name: "nginx"
namespace: "default"
spec:
podManagementPolicy: "OrderedReady"
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app/statefulset: "nginx"
serviceName: "nginx"
template:
metadata:
annotations:
node.yovole.com/cpu-type: "intel"
labels:
app/statefulset: "nginx"
spec:
containers:
- image: "nginx:latest"
imagePullPolicy: "Always"
name: "nginx-1"
resources:
requests:
cpu: "1"
memory: "1024m"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
dnsPolicy: "ClusterFirst"
imagePullSecrets:
- name: "harbor"
restartPolicy: "Always"
schedulerName: "default-scheduler"
terminationGracePeriodSeconds: 30
updateStrategy:
rollingUpdate:
partition: 0
type: "RollingUpdate"
安装kubectl工具,获取访问集群的kubeconfig,具体操作请参见 使用kubectl工具连接集群操作步骤 ; 在kubectl客户端执行命令创建Statefulset:
kubectl --kubeconfig KUBECONFIG_NAME create -f statefulset YAML 文件名称
执行一下命令,查看Statefulset创建结果。
kubectl --kubeconfig KUBECONFIG_NAME get statefulset -A
说明:
如果模板设置的资源规格(CPU/内存/GPU)不符合系统设置,系统会自动规整为标准配置,具体说明请参见 关于yaml指定资源规格 ,查看YAML看到的规格是提交时用户设置值,不是系统规整后的值。