statefulset (有状态负载)控制器

WHY:用于运行管理有状态副本集
What:它所管理的Pod拥有固定的pod名称,主机名,启动和停止顺序
How:创建一个statefulset的pdo,并指定servicename,创建headless类型的svc

有状态pod一般有以下几个特点:

  1. 稳定且有唯一的标识符(pod名称作为标识符,必须稳定唯一且持久,pod被删除或重建后pod名称不会发生改变)
  2. 稳定且持久的存储
  3. 有序、平滑的部署和扩展(比如redis:应该先启动主节点再启动从节点)
  4. 有序、平滑的终止、删除(先终止从节点)
  5. 有序的滚动更新(先更新从节点)
三个组件:

1.headless service (无头service)
2.statefulset
3.volumeclaimTemlate (存储卷申请模板,每一个pod都会有一个自己专用的PV)

deployment 控制器创建的pod 是无序的
statefulset 创建的pod是有序的,这样就可以根据每个pod的标识符进行管理

在这里插入代码片

在这里插入图片描述
在这里插入图片描述
volumeClaim
1.为每一个pod定义volumeClaim
2.在pod所在的名称空间创建pvc

可以看到PVC已创建并自动绑定到PV,且pod名称固定且唯一
在这里插入图片描述

当pod删除后,PVC不会被删除,一旦PV与PVC绑定后,PV不支持删除,防止误删除。
当pod重建后,PVC与pod再次绑定,一 一对应关系,实现有状态负载
每个pod的名称唯一并且可以被解析
pod_name.service_name.ns_name.svc.cluster.loal //pod域名解析格式

在这里插入图片描述
statefulset控制器的滚动更新与扩展

扩容
在这里插入图片描述
可以看到有序的扩展3-4
在这里插入图片描述
缩容
在这里插入图片描述
可以看到是从后往前依次删除,此时PVC并不会被删除
在这里插入图片描述
滚动升级
partition(分区): >=N 的被更新
这种方法可以用于做金丝雀发布

通过打补丁方式设置partition更新策略为4,也就是说当partition大于等于4的都被更新
在这里插入图片描述
升级镜像为v2
在这里插入图片描述
验证
kubectl get pods myapp-4 -o yaml
在这里插入图片描述

kubectl get pods myapp-3 -o yaml
在这里插入图片描述

一段时间后,确认全部发布

在这里插入图片描述
在这里插入图片描述
再次查看
kubectl get pods myapp-3 -o yaml
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐