深入浅出 Kubernetes:StatefulSet 概念理解与实践

  • 时间:
  • 浏览:1

使用以下命令测试:

NFS 实验相关 yaml:

不可能 测试环境资源有限,原计划使用 rook-ceph 来进行实验的,无奈使用 NFS 来进行实验。 Ceph 创建 PV 的相关 yaml 如下:

当亲戚亲戚大伙儿在集群内每段别 ping 域名 web-server-gysl-0.nginx.default.svc.cluster.local 和 web-server-gysl-1.nginx.default.svc.cluster.local 时,正常返回了对应的 Pod IP, 在 ping 域名 nginx.default.svc.cluster.local 时,则随机返回1个 Pod IP 中的一1个。全部印证了上文所述内容。

在上述操作过程中,我随机删除了那些 Pod 中的某一1个或十几个 ,稍后再次来查看的后来,新创建的 Pod 依然按照后来的编号进行了编排。

拓扑情况。这名 情况原因 ,应用的多个实例之间都是全部对等的关系。那些应用实例,需用按照后来 顺序启动,比如应用的主节点 A 要先于从节点 B 启动。而不可能 你把 A 和 B 1个 Pod 删除掉,它们再次被创建出来时也需用严格按照这名 顺序才行。后来,新创建出来的 Pod,需用和原本 Pod 的网络标识一样,原本 原本 的访问者才能使用同样的法律依据,访问到这名 新 Pod。

通过以下命令向相关 Pod 写入验证内容:

第有某种法律依据,是以 Service 的 VIP(Virtual IP,即:虚拟 IP)法律依据。比如:当我访问 172.20.25.3 这名 Service 的 IP 地址时,172.20.25.3 随便说说 本来 一1个 VIP,它会把请求转发到该 Service 所代理的某一1个 Pod 上。

存储情况。这名 情况原因 ,应用的多个实例分别绑定了不同的存储数据。对于那些应用实例来说,Pod A 第一次读取到的数据,和隔了十分钟后来再次读取到的数据,应该是同一份,哪怕在此期间 Pod A 被重新创建过。这名 情况最典型的例子,本来 一1个数据库应用的多个存储实例。

这名 Service 又是要怎样被访问的呢?

从实验结果中亲戚亲戚大伙儿可不能能看出 Pod 与 PV、PVC 的对应关系,结合上文中的 yaml 亲戚亲戚大伙儿先要发现:

StatefulSet 的设计随便说说 非常容易理解。它把真实世界里的应用情况,抽象为了有某种情况:

StatefulSet 的核心功能,本来 通过有某种法律依据记录那些情况,后来在 Pod 被重新创建时,才能为新 Pod 恢复那些情况。

第二种法律依据,本来 以 Service 的 DNS 法律依据。比如:这后来,倘若我访问“my-svc.my-namespace.svc.cluster.local”这条 DNS 记录,就可不能能访问到叫兰 my-svc 的 Service 所代理的某一1个 Pod。

观察实验结果:

此外,我将 StatefulSet 的一1个 Pod 所在的集群内节点下线,再次查看 Pod 的情况,系统在后来 节点上以原 Pod 的名称很慢创建了新的 Pod。编号都是从 0 开始英语 累加,与 StatefulSet 的每个 Pod 实例一一对应,绝不重复。

让亲戚亲戚大伙儿来看一下以下例子:

回到 Master 节点看一下:

不可能 最近版本的 busybox 有坑,我自己制作了一1个 DNS 测试工具,Dockerfile 如下:

那些 Pod 的创建,也是严格按照编号顺序进行的。比如,在 web-server-gysl-0 进入到 Running 情况、后来细分情况(Conditions)成为 Ready 后来,web-server-gysl-1 会老会 指在 Pending 情况。