创建有状态工作负载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看到的规格是提交时用户设置值,不是系统规整后的值。

个结果匹配 ""

    无结果匹配 ""