当前位置: 首页 > Linux

K8S实战(5)-控制器StatefulSet的原理

时间:2023-04-06 03:42:05 Linux

前言在Deployment中,一个Pod可以随意关闭和启动,Pod之间的关系是平等的。当Pod之间存在主从关系,每个Pod对应一个特定存储卷中的内容时,就不能使用Deploymentcontroller来任意操作Pod。我们需要使用一个名为StatefulSet的控制器来处理这个有状态应用程序Pod。更新历史20200605-初稿-左成礼原文地址-https://blog.zuolinux.com/2020/06/05/about-controller-statefulset.htmlStatefulSetcontrollerworkingprinciple管理有状态应用Pod的秘诀在于提供稳定的ImmutablePod标识和稳定的不可变存储。稳定不变的拓扑状态,即不变的主机名。标识符与Pod绑定,无论Pod被调度到哪个节点。StatefulSet中的每个Pod都会分配一个整数序列号,从0到N-1。序列号在StatefulSet上是唯一的。每个Pod从StatefulSet名称和Pod序列号派生出它的主机名。合并后的主机名格式为$(StatefulSetname)-$(serialnumber)。如果StatefulSet名称为web,replicas为3,则将创建三个名为web-0、web-1和web-2的Pod。每个Pod创建成功后,会得到一个匹配的DNS名称,格式为:...svc.cluster.local,其中service-name由serviceName字段决定StatefulSet的设置和创建这些Pod是严格按照编号顺序进行的。例如,在web-0进入Running状态并且Conditions变为Ready之前,web-1将保持在Pending状态。当我们删除这些Pod后,Kubernetes会按照原来编号的顺序创建新的Pod。而且,Kubernetes仍然为它们分配了和以前一样的“网络身份”。通过这种严格的对应规则,StatefulSet保证了Pod网络身份的稳定性和稳定存储。每个Pod都会绑定到一个固定编号的PVC,这些PVC的名字是-Podnamedweb-0,会声明使用名为www-web-0的PVCPV/PVC作为动态卷存储在远程存储服务器后Pod被删除,对应的PVC和PV不会被删除,数据还在远程服务器上。重建Pod后,StatefulSet会重新寻找对应名称的PVC进行绑定。存储卷具有固定的名称和编号。无论Pod如何处理,这些对应关系都不会发生变化,从而固定了业务逻辑关系和存储关系,保证了有状态应用的正常运行。联系我微信公众号:zuolinux_com