容器服务 StatefulSet 管理

StatefulSet 主要用于管理有状态的应用,可以创建具有持久性标识符的 Pod。Pod 迁移或销毁重启后,标识符仍会保留。在需要持久化存储时,可以以通过标识符对存储卷进行一一对应。如果应用程序不需要持久的标识符,建议你使用 Deployment 部署应用程序。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、创建 StatefulSet

1. 登录容器服务控制台,选择左侧导航栏中的 集群。

2. 单击需要创建 StatefulSet 的集群 ID,进入集群的基本信息页面。

3. 在左侧导航栏选择工作负载,在 StatefulSet 页面单击新建。如下:

4. 在新建工作负载页面,根据实际需求,设置 StatefulSet 参数。关键参数信息如下:

·名称:自定义工作负载名称。

·命名空间:根据实际需求选择。

·Labels:用于资源分类管理的键值对(Key-Value)。

·Annotations:Kubernetes 注解为资源附加任意的非标识的元数据。

·数据卷(选填):为容器提供存储,支持临时路径、主机路径、云硬盘数据卷、文件存储 NFS、配置文件、PVC,并需挂载到容器的指定路径中。

·实例内容器:根据实际需求,为 StatefulSet 的一个 Pod 设置一个或多个不同的容器。

·名称:自定义。

·镜像:根据实际需求选择需使用的容器镜像。

·镜像版本(Tag):根据实际需求进行填写。

·镜像拉取策略:提供以下3种策略,请按需选择。若不设置镜像拉取策略,当镜像版本为空或 latest 时,使用 Always 策略,否则使用 IfNotPresent 策略。

·Always:总是从远程拉取该镜像。

·IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像。

·Never:只使用本地镜像,若本地没有该镜像将报异常。

·环境变量:设置容器中的变量。

·CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。

·GPU 资源:配置该工作负载使用的最少 GPU 资源。

·高级设置:可设置工作目录、运行命令、运行参数、容器健康检查和特权级等参数。

·实例数量:根据实际需求选择调节方式,设置实例数量。

·手动调节:设定实例数量,可单击“+”或“-”控制实例数量。

·自动调节:满足任一设定条件,则自动调节实例(pod)数目。详情请参见 自动伸缩。

·镜像访问凭证:默认无需配置访问凭证,工作负载会基于镜像地址中的域名,自动匹配命名空间下已有的访问凭证。也支持手动指定一个或多个访问凭证,以及新建访问凭证。

·节点调度策略:可根据调度规则,将 Pod 调度到符合预期的 Label 的节点中。详情请参见 设置工作负载的调度规则指引。

·访问设置:根据实际需求,设置 Service 参数。详情请参见 服务访问方式。

5. 单击创建 StatefulSet,完成创建。

二、更新 YAML

1. 登录容器服务控制台,选择左侧导航栏中的 集群。

2. 单击集群 ID,进入集群的基本信息页面。

3. 在左侧导航栏选择工作负载,选择 StatefulSet 页面,在需要更新 YAML 的 StatefulSet 行中,选择更多 > 编辑 yaml。如下:

4. 在编辑 Yaml 页面中进行编辑,单击完成。

三、更新 Pod 配置

1. 在集群管理页面,单击集群 ID,进入集群的基本信息页面。

2. 在左侧导航栏选择工作负载,选择 StatefulSet 页面,在需要更新 Pod 配置的 StatefulSet 行中,单击更新 Pod 配置。如下:

3. 在更新 Pod 配置页面,根据实际需求修改更新方式,设置参数。如下:

4. 单击更新 Pod 配置即可。

四、YAML 示例

apiVersion: v1kind: Service ## 创建一个 Headless Service,用于控制网络域metadata: name: nginx namespace: default labels: app: nginxspec: ports: – port: 80 name: web clusterIP: None selector: app: nginx—apiVersion: apps/v1kind: StatefulSet ### 创建一个 Nginx的StatefulSetmetadata: name: web namespace: defaultspec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 # by default is 1 template: metadata: labels: app: nginx spec: terminationGracePeriodSeconds: 10 containers: – name: nginx image: nginx:latest ports: – containerPort: 80 name: web volumeMounts: – name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: – metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "cbs" resources: requests: storage: 10Gi

·kind:标识 StatefulSet 资源类型。

·metadata:StatefulSet 的名称、Label 等基本信息。

·metadata.annotations:对 StatefulSet 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。

·spec.template:StatefulSet 管理的 Pod 的详细模板配置。

·spec.volumeClaimTemplates:提供创建 PVC&PV 的模板。

更多参数详情可查看 Kubernetes StatefulSet 产品文档。

五、创建 StatefulSet

1. 参考 YAML 示例,准备 StatefulSet YAML 文件。

2. 安装 kubectl,并连接集群。操作详情请参见 通过 kubectl 连接集群。

3. 执行以下命令创建 StatefulSet:

kubectl create -f <StatefulSet YAML 文件名称>

例如,编辑文件,则执行以下命令:

vim web.yaml

创建一个文件名为 web.yaml 的 StatefulSet YAML 文件,则执行以下命令:

kubectl create -f web.yaml

4. 执行以下命令,验证创建是否成功。

kubectl get statefulset

返回类似以下信息,即表示创建成功。

NAME READY AGEweb 2/2 37s

六、更新 StatefulSet

执行以下命令,查看 StatefulSet 的更新策略类型。

kubectl get statefulset/<statefulset-name> -o go-template='{{.spec.updateStrategy.type}}{{"\\n"}}'

StatefulSet 有以下两种更新策略类型:

·OnDelete:默认更新策略。该更新策略在更新 StatefulSet 后,需手动删除旧的 StatefulSet Pod 才会创建新的 StatefulSet Pod。

·RollingUpdate:支持 Kubernetes 1.7或更高版本。该更新策略在更新 StatefulSet 模板后,旧的 StatefulSet Pod 将被终止,并且以滚动更新方式创建新的 StatefulSet Pod(Kubernetes 1.7或更高版本)。

七、方法一

执行以下命令,更新 StatefulSet。

kubectl edit statefulset/<name>

此方法适用于简单的调试验证,不建议在生产环境中直接使用。你可以通过此方法更新任意的 StatefulSet 参数。

八、方法二

执行以下命令,更新指定容器的镜像。

kubectl patch statefulset <NAME> –type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"<newImage>"}]'

建议保持 StatefulSet 的其他参数不变,业务更新时,仅更新容器镜像。如果更新的 StatefulSet 是滚动更新方式的策略,可执行以下命令查看更新状态:

kubectl rollout status sts/<StatefulSet-name>

九、删除 StatefulSet

执行以下命令,删除 StatefulSet。

kubectl delete statefulset <name> –cascade=false

–cascade=false 参数表示 Kubernetes 仅删除 StatefulSet,且不删除任何 Pod。如需删除 Pod,则执行以下命令:

kubectl delete statefulset <name>

更多 StatefulSet 相关操作可查看 Kubernetes指引。

赞 (0)
上一篇 4天前
下一篇 4天前