【k8s】Kubernetes存储之 StatefulSet 控制器通过 Headless Service 管理Pod
一、StatefulSet 控制器简介官方网址StatefulSet 是用来管理有状态应用的工作负载 API 对象。StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证。StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:稳定的、唯一的网络标识符。稳定的、持久的存储。有序的部署和缩放。有序的、自动的滚动更新。
一、StatefulSet 控制器简介
-
StatefulSet 是用来管理有状态应用的工作负载 API 对象。
-
StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证。
-
StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
稳定的、唯一的网络标识符。
稳定的、持久的存储。
有序的部署和缩放。
有序的、自动的滚动更新。 -
和 Deployment 相同的是,StatefulSet 管理了基于相同容器定义的一组 Pod。但和 Deployment不同的是,StatefulSet 为它们的每个 Pod 维护了一个固定的 ID。这些 Pod是基于相同的声明来创建的,但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。
-
StatefulSet给所有的Pod进行了编号,编号规则是: ( s t a t e f u l s e t 名 称 ) − (statefulset名称)- (statefulset名称)−(序号),从0开始。
-
删除或者收缩 StatefulSet 并不会删除它关联的存储卷。这样做是为了保证数据安全,它通常比自动清除 StatefulSet
所有相关的资源更有价值。 -
当删除 StatefulSets 时,StatefulSet 不提供任何终止 Pod 的保证。为了实现 StatefulSet 中的Pod 可以有序的终止,可以在删除之前将 StatefulSet 缩放为 0。
-
删除或者收缩 StatefulSet 并不会删除它关联的存储卷,这样做是为了保证数据安全。
-
Pod被删除后重建,重建Pod的网络标识也不会改变,Pod的拓扑状态按照Pod的“名字+编号”的方式固定下来,并且为每个Pod提供了一个固定且唯一的访问入口,即Pod对应的DNS记录,同时重建时保证每个pod挂载到原来的卷上。
-
StatefulSet将应用状态抽象成了两种情况:
拓扑状态:应用实例必须按照某种顺序启动。新创建的Pod必须和原来Pod的网络标识一样
存储状态:应用的多个实例分别绑定了不同存储数据。
二、创建无存储 StatefulSet
01_创建 Headless service
vim service.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
02_创建StatefulSet
- 指定服务为创建的无头服务:nginx-svc
特点:
- 指定StatefulSet名称为 web,pod命名自动为 web-数字编号
- 发现名称根据副本个数依次排序,从 0 开始:web-0,web-1,web-2,web-3…
- 上一个pod处于 Running和Ready 后再去创建下一个pod
- 名称是它们的唯一标识
vim pod.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-svc"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v1
ports:
- containerPort: 80
name: web
03_测试
检查pod在集群内部的地址: headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。SRV 记录指向一个包含 Pod IP 地址的记录表项。
删除StatefulSet并重建,检查集群内部IP: 发现Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址发生了改变。
更多推荐
所有评论(0)