zoukankan      html  css  js  c++  java
  • K8S实战(五)| 控制器 StatefulSet 的原理

    前言

    Deployment 中可以随意的关闭和启动一个 Pod,Pod 之间的关系是平等的。

    当 Pod 之间有主从关系,以及每个 Pod 对应特定的存储卷中的内容时,无法使用 Deployment 控制器来随意的操作 Pod。

    我们需要使用一个叫做 StatefulSet 的控制器来处理这种有状态应用 Pod。

    更新历史

    StatefulSet 控制器工作原理

    管理有状态应用 Pod 的秘诀是,提供稳定不变的 Pod 标识和稳定不变的存储。

    稳定不变的拓扑状态,即不变的主机名

    • 该标识和 Pod 是绑定的,不管 Pod 被调度到哪个节点上

    • StatefulSet 中每个 Pod 将被分配一个整数序号,从 0 到 N-1,该序号在 StatefulSet 上是唯一的

    • 每个 Pod 根据 StatefulSet 的名称和 Pod 的序号派生出它的主机名。组合主机名的格式为 $(StatefulSet 名称)-$(序号)

    • StatefulSet 名称为 web,replicas 为 3,那么将会创建三个名称分别为 web-0、web-1、web-2 的 Pod。一旦每个 Pod 创建成功,就会得到一个匹配的 DNS 名称,格式为:..svc.cluster.local,其中 service-name 由 StatefulSet 的 serviceName 域来设定

    • 并且这些 Pod 的创建,是严格按照编号顺序进行的。比如,在 web-0 进入到 Running 状态、并且 Conditions 成为 Ready 之前,web-1 会一直处于 Pending 状态

    • 当我们把这几个 Pod 删除之后,Kubernetes 会按照原先编号的顺序,创建出新的 Pod。并且,Kubernetes 依然为它们分配了与原来相同的“网络身份”

    • 通过这种严格的对应规则,StatefulSet 就保证了 Pod 网络标识的稳定性

    稳定不变的存储

    • 每个 Pod 都会绑定一个固定编号的 PVC,这些 PVC 的名字都是 <PVC名>-<Pod名>

    • 名叫 web-0 的 Pod,会声明使用名叫 www-web-0 的 PVC

    • PV/PVC 通过动态卷的方式存储于远程存储服务器

    • 当一个 Pod 被删除后,对应的 PVC 和 PV 并不会被删除,数据依然存在于远程服务器,Pod 被重建后,StatefulSet 会重新查找对应名称的 PVC 来进行绑定

    结束语

    StatefulSet 扩展了 Deployment,对 Pod 和对应的存储卷都进行了固定名称和编号,不管 Pod 如何处理,这些对应关系都不会有变化,从而将业务逻辑关系以及存储关系固定了下来,确保了有状态应用正常运行。

    联系我

    微信公众号:zuolinux_com

    微信扫码关注

  • 相关阅读:
    vue中computed计算属性和methods区别
    java解决跨域问题
    redis服务端开启
    使用excel生成商品条形码
    MySQL主键自增时SQL写法/当前时间写法
    修改MySQL数据库密码
    MySQL5.6.42解压版安装教程
    完全卸载MySQL数据库
    IDEA快捷键及xml文件中网址报错
    IDEA导入外部包
  • 原文地址:https://www.cnblogs.com/zuolinux/p/13693611.html
Copyright © 2011-2022 走看看