内容简介:StatefulSet 的设计其实非常容易理解。它把真实世界的应用状态,抽象为了两种情况:StatefulSet 的核心功能,就是通过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。程序 = 数据结构 + 算法。StatefulSet 这个控制器的主要作用之一,就是使用Pod 模板创建 Pod 的时候,对它们进行编号,并且按照编号顺序逐一完成创建工作。而当 StatefulSet 的“控制循环”发现 Pod 的“实际状态”与“期望状态”不一致,需要新建或者删除 Pod 进
简介(未完成)
- 集大成者——StatefulSet
集大成者——StatefulSet
StatefulSet 的设计其实非常容易理解。它把真实世界的应用状态,抽象为了两种情况:
- 拓扑状态,比如应用的主节点 A 要先于从节点 B 启动
- 存储状态,应用的多个实例分别绑定了不同的存储数据
StatefulSet 的核心功能,就是通过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。程序 = 数据结构 + 算法。 新增了一个功能,一定在数据表示上有体现(对应数据结构),一定在原来的工作流程中有体现或者改了工作流程(对应算法)
StatefulSet 这个控制器的主要作用之一,就是使用Pod 模板创建 Pod 的时候,对它们进行编号,并且按照编号顺序逐一完成创建工作。而当 StatefulSet 的“控制循环”发现 Pod 的“实际状态”与“期望状态”不一致,需要新建或者删除 Pod 进行“调谐”的时候,它会严格按照这些Pod 编号的顺序,逐一完成这些操作。 所以,StatefulSet 其实可以认为是对 Deployment 的改良。
StatefulSet 里的不同 Pod 实例,不再像 ReplicaSet 中那样都是完全一样的,而是有了细微区别的。比如,每个 Pod 的 hostname、名字等都是不同的、携带了编号的。Kubernetes 通过 Headless Service,为这些有编号的 Pod,在 DNS 服务器中生成带有同样编号的 DNS 记录。StatefulSet 还为每一个 Pod 分配并创建一个同样编号的 PVC。
DNS for Services and Pods
“Normal” (not headless) Services are assigned a DNS A record for a name of the form my-svc.my-namespace.svc.cluster.local
. Headless Service 所代理的所有 Pod 的 IP 地址,都会被绑定一个这样格式的 DNS 记录 <pod-name>.<svc-name>.<namespace>.svc.cluster.local
通过 Headless Service 的方式,StatefulSet 为每个 Pod 创建了一个固定并且稳定的 DNS记录,来作为它的访问入口。在部署“有状态应用”的时候,应用的每个实例拥有唯一并且稳定的“网络标识”,是一个非常重要的假设。
Persistent Volume Claim 和 PV 的关系。运维人员创建PV,告知有多少volume。开发人员创建Persistent Volume Claim 告知需要多少大小的volume。创建一个 PVC,Kubernetes 就会自动为它绑定一个符合条件的Volume。即使 Pod 被删除,它所对应的 PVC 和 PV 依然会保留下来。所以当这个 Pod 被重新创建出来之后,Kubernetes 会为它找到同样编号的 PVC,挂载这个 PVC 对应的 Volume,从而获取到以前保存在 Volume 里的数据。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Instagram 如何跨大洋拆分有状态服务
- 学习如何统计 Mysql 服务器状态信息
- 架构设计笔记(九):关键模式之无状态服务
- 使用Testinfra和Ansible验证服务器状态
- ASP.NET如何使用web服务的会话状态
- Zabbix监控服务器硬件RAID阵列卡状态
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。