5

K8s | StatefulSet是什么?

 2 years ago
source link: https://jiac3366.github.io/2021/11/17/Kubernetes/StatefulSet%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

+c编程手记

Guangzhou, China
  • 18 深入理解StatefulSet(一):拓扑状态

    实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,就被称为“有状态应用” Stateful Application

    • StatefulSet把真实世界的应用抽象成2种情况

      在部署“有状态应用”的时候,应用的每个实例拥有唯一并且稳定的“网络标识”,是一个非常重要的假设

      • 存储状态(下一节讲)

    • Service被访问的方式有2种

      • 一、Service的虚拟 IP

      • 二、Service的DNS

        • 访问这个dns,正是这个 Service 的 VIP,和(一)一致

        • 访问这个dns直接解析出被代理 Pod 的 IP 地址,这就叫 Headless Service

      • 先创建 Headless Service

        Headless Service 不需要分配一个 VIP,而是可以直接以 DNS 记录的方式解析出被代理 Pod 的 IP 地址
        ​仍是一个标准 Service 的 YAML 文件。只不过它的 clusterIP 字段的值是:None

        • 创建后,它所代理的所有 Pod(label selector选出来的) 的 IP 地址,都会被绑定一个DNS 记录
      • 再创建statefulset

        只要知道了一个 Pod 的名字,以及它对应的 Service 的名字,就可通过这条 DNS 记录访问到 Pod 的 IP

        • 和deployment YAML的唯一区别,就是多了一个 serviceName=nginx 字段,StatefulSet控制器会使用这个叫nginx 的Headless Service 来保证 Pod 的可解析身份(DNS记录)
      • 这时候创建一个pod 对statefulset维护的2个pod nslookup 和删除这2个pod后再nslookup 结果一致,说明Kubernetes 就成功地将 Pod 的拓扑状态(比如:哪个节点先启动,哪个节点后启动),按照 Pod 的“名字 + 编号”的方式固定了下来。
        注意:解析到的Pod 的 IP 地址,并不是固定的,所以对于“有状态应用”实例的访问,你必须使用 DNS 记录或者 hostname 的方式


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK