跳到主要内容

构建

2024年11月13日
柏拉文
越努力,越幸运

一、认识


StatefulSet 的关键字段

  • serviceName 指定 StatefulSet 依赖的无头服务(Headless Service)。

  • replicas 定义 Pod 的副本数量。

  • selector: 定义 Pod 的选择器,用于关联 StatefulSetPod

  • template: 定义 Pod 模板,包括容器、镜像、端口等配置。

  • volumeClaimTemplates: 定义持久存储卷模板,用于为每个 Pod 创建独立的 PersistentVolumeClaim

二、操作


2.1 编写 StatefulSet 文件

编写 statefulset.yaml 配置文件如下

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: test-stateful-set
spec:
serviceName: "test-headless-service"
replicas: 3
selector:
matchLabels:
app: test-stateful-set-nginx
template:
metadata:
labels:
app: test-stateful-set-nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
ports:
- containerPort: 80
volumeMounts:
- name: test-volume
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: test-volume
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
  • spec.volumeClaimTemplates.metadata.name: 用于定义卷名称

  • spec.template.spec.volumeMounts.name: 用于匹配 spec.volumeClaimTemplates.metadata.name

2.2 创建 StatefulSet 应用

kubectl apply -f statefulset.yaml

2.3 查看 StatefulSet 应用

kubectl get statefulset

2.4 查看 StatefulSet Pod

kubectl get pods -l app=nginx

2.5 删除 StatefulSet 和存储卷

kubectl delete statefulset web --cascade=orphan
kubectl delete pvc -l app=nginx

2.6 删除 StatefulSet(保留存储卷)

kubectl delete statefulset web