Statefulset管理
更新时间:2026-03-20
概述
在运行中会保存数据或状态的工作负载称为有状态负载,对应 Kubernetes 中的 StatefulSet。本文档介绍如何通过控制台和 kubectl 创建有状态工作负载,并完成查看详情、扩缩容、更新、标签注解、监控、日志与删除等运维操作。
StatefulSet 介绍
与 Deployment 相似,StatefulSet 也会保证既定数量的 Pod 处于运行状态。但不同的是,StatefulSet 会通过以下机制保留 Pod 身份:
- 有序、固定的名称:StatefulSet 的每个 Pod 会按顺序命名为 <StatefulSet名称>-<序号>。例如,StatefulSet 的名称为 db-app,则 Pod 名称为 db-app-0、db-app-1。删除并重建 Pod 时,新建 Pod 会继承原有的名称。
- 稳定的网络标识:StatefulSet 通常需要关联一个 Headless Service(通过 spec.serviceName 指定)。这个 Headless Service 并不像 ClusterIP 提供 Pod 的负载均衡,而仅用于为 Pod 提供固定的域名(对 Headless Service 进行 DNS 查询时,DNS 会返回所有匹配的 Pod 的 IP 地址)。指定 Headless Service 后,Pod 的域名格式为 <Pod名称>.<Headless Service名称>.
.svc. ,例如 db-app-01.db-app.default.svc.cluster.local。Pod 重建后,域名会自动被解析到新 Pod。 - 稳定的持久化存储:在 StatefulSet 中,可以指定 PVC 模板(通过 spec.volumeClaimTemplates 指定)。StatefulSet 会根据此模板为每个 Pod 生成独立的 PersistentVolumeClaim(PVC),PVC 名称为 <PVC模板名称>-<Pod名称>。当 Pod 被删除时,PVC 会被保留并自动关联到使用相同序号的新 Pod。
以上措施保证了 StatefulSet 的 Pod 在重建后能继承原有的网络和存储状态,使应用从持久化数据中恢复运行。关于 StatefulSet 的更多信息,请参见 官方文档。
前提条件
- 已成功创建 CCE 集群,操作说明参见 创建 CCE 集群。
- 已登录 容器引擎CCE控制台,且账号具备目标集群的管理权限。
- 若通过
kubectl创建,请先完成客户端安装与集群连接,详情参见 通过 kubectl 连接集群。
创建有状态工作负载 StatefulSet
用户可以选择通过 CCE 控制台使用表单形式或者通过 YAML 形式创建新的有状态工作负载,也可以选择通过 kubectl 命令创建。
通过控制台表单形式创建
- 登录 容器引擎CCE控制台。
- 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。
- 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 点击 【新建有状态】,进入“创建工作负载”页面。
- 在基本信息模块完成相关配置,点击 下一步 进入容器配置。
- 在容器配置模块,填写容器名称和镜像地址,可点击选择镜像后在弹窗中选择 CCR 中的镜像地址。点击下一步进入高级配置模块。
- 在高级设置模块中,配置调度策略,点击完成进行工作负载创建。
方式二:通过 YAML 创建
- 在 StatefulSet 列表页点击 【使用YAML创建】,进入“新建工作负载”页面。
- 点击下拉列表选择命名空间,填写 yaml 文件,点击 确定。
说明:
- 模板类型:可使用示例模板或我的模板创建。
- 复制:复制当前 YAML 文件内容。
- 另存为:将当前文件模板另存为我的模板。
- 取消:返回列表页。
工作负载 YAML 示例:
YAML
1apiVersion: v1
2kind: Service
3metadata:
4 name: nginx
5 labels:
6 app: nginx
7spec:
8 clusterIP: None
9 selector:
10 app: nginx
11 ports:
12 - name: web
13 port: 80
14---
15apiVersion: apps/v1
16kind: StatefulSet
17metadata:
18 name: statefulset-example
19spec:
20 serviceName: nginx
21 replicas: 2
22 selector:
23 matchLabels:
24 app: nginx
25 updateStrategy:
26 type: RollingUpdate
27 template:
28 metadata:
29 labels:
30 app: nginx
31 spec:
32 containers:
33 - name: nginx
34 image: registry.baidubce.com/cce/nginx-alpine-go:latest
35 livenessProbe:
36 httpGet:
37 path: /
38 port: 80
39 initialDelaySeconds: 20
40 timeoutSeconds: 5
41 periodSeconds: 5
42 readinessProbe:
43 httpGet:
44 path: /
45 port: 80
46 initialDelaySeconds: 5
47 timeoutSeconds: 1
48 periodSeconds: 5
49 ports:
50 - containerPort: 80
51 name: web
方式三:通过 kubectl 创建
- 准备 StatefulSet yaml 文件。
- 安装 kubectl,并连接集群,详情参见 通过 kubectl 连接集群。
- 复制 YAML 文件并保存到
statefulset.yaml中。 - 执行以下命令创建 StatefulSet:
Bash
1kubectl apply -n default -f statefulset.yaml
预期输出:
Bash
1service/nginx created
2statefulset.apps/statefulset-example created
- 执行以下命令查看 Service 信息:
Bash
1kubectl get svc -n default nginx -o wide
预期输出:
Bash
1NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
2nginx ClusterIP None <none> 80/TCP
- 执行以下命令验证 StatefulSet 是否创建成功:
Bash
1kubectl get statefulset -n default statefulset-example -o wide
预期输出:
Bash
1NAME READY AGE
2statefulset-example 0/2 <time>
说明:若 READY 未达到预期,请检查节点调度条件和污点容忍配置。
查看有状态部署详情
- 在详情页可查看 【工作负载详情】、【关联容器组】、【关联自动伸缩】、【更新升级】、【更新策略】、【调度策略】、【监控】、【事件】、【日志】 等信息。

更新 Pod 数
- 在弹窗中修改 期待 Pods 数,点击 【确认】 提交。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 在目标有状态负载列表,点击需要调整的有状态行中的 伸缩,在弹框中填写需要的容器组数量,点击 确认。
更新有状态工作负载
支持通过控制台界面或 YAML 文件编辑已创建的有状态负载。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态负载。
- 在目标有状态负载操作列点击 【更新升级】,或点击 【更多】 -> 【编辑 YAML】 进入 YAML 编辑模式。
- 完成配置更新后,点击 【提交】,并在确认弹窗点击 【确认】。
说明:通过控制台界面更新和编辑 YAML 文件更新,均不支持更新有状态负载名称、命名空间。
标签注解管理
标签是以 key/value 键值对的形式附加在有状态工作负载上的。添加标签后,可通过标签对有状态工作负载进行管理和选择。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 在有状态列表中选择目标工作负载,点击 【更多】 -> 【标签注解】。
- 在“标签注解”窗口点击 【添加标签】,填写标签键和值后点击 【更新】。 说明:标签键值需符合 Kubernetes 标签格式要求。
查看监控
您可以通过 CCE 控制台查看工作负载和容器组的 CPU 和内存占用情况,以确定需要的资源规格。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 在目标有状态负载所在行点击 【监控】。
- 在监控页面查看 CPU、内存等指标。
查看日志
- 在目标有状态负载操作列点击 【更多】 -> 【日志】,进入日志页面。
- 在日志页面按需选择 Pod、容器和显示行数,查看日志内容并可刷新获取最新输出。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 在目标有状态负载列表,单击工作负载后的 更多 > 日志。
- 在日志页面查看容器日志数据。
删除有状态负载
注意: 删除有状态负载会级联删除相关容器组,且不可恢复,请确认业务影响后再执行。
- 在目标有状态负载所在行点击 【更多】 -> 【删除】,进入二次确认弹窗。
- 在弹窗中确认删除信息后,点击 【确认】 完成删除。
- 登录有状态负载管理页面。 a. 登录 容器引擎CCE控制台。 b. 在左侧导航栏,点击 集群管理->集群列表,进入集群列表页,点击集群名称,进入集群管理页面。 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 有状态。
- 在目标有状态负载列表,单击工作负载后的 更多 > 删除。
- 在系统弹出的二次确认对话框,确认信息后,点击 确认。

评价此篇文章
