构建
2024年11月13日
一、认识
StatefulSet
的关键字段
-
serviceName
指定StatefulSet
依赖的无头服务(Headless Service
)。 -
replicas
定义Pod
的副本数量。 -
selector
: 定义Pod
的选择器,用于关联StatefulSet
和Pod
。 -
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