StatefulSet 将应用状态抽象成两种情况:

    • 拓扑状态
      • 启动顺序
      • 网络标识
    • 存储状态
      • 绑定同一数据

    Service 原理:

    • 请求 -> VIP -> Pod IP
    • 请求 -> Service DNS
      • Normal Service: Service DNS -> VIP -> Pod IP
      • Headless Service: Service DNS -> Pod IP

    定义 Headless Service:

    • clusterIP: Node
    • <pod-name>.<svc-name>.<namespace>.svc.cluster.local
    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: nginx
    5. labels:
    6. app: nginx
    7. spec:
    8. ports:
    9. - port: 80
    10. name: web
    11. clusterIP: None
    12. selector:
    13. app: nginx

    StatefulSet yaml 示例:

    • serviceName

    image.png

    image.png

    StatefulSet 通过 Headless 来保留网络标识, 通过编号来保留启动顺序.