zoukankan      html  css  js  c++  java
  • k8s statefulSet控制器网络标识

    k8s-statefulSet控制器-网络标识

    1. k8s-statefulSet控制器-网络标识

    • 稳定的网络标识:使用Headless Service(相比普通Service只是将spec.clusterIP定义为None)来维护Pod网络身份,会为每个Pod分配一个数字编号并且按照编号顺序部署。还需要在StatefulSet添加serviceName: “nginx” 字段指定StatefulSet控制器要使用这个Headless Service。
    • 稳定主要体现在主机名和Pod A记录:
      • 主机名:<statefulset名称>-<编号>
      • Pod DNS A记录:<statefulset名称-编号>. ..svc.cluster.local

    1.1 headless service示例

    apiVersion: v1
    kind: Service
    metadata:
      name: web
      namespace: default
    spec:
      clusterIP: None       #无头服务
      selector:             #容器选择器
        app: nginx          # 指定关联pod名称
      ports:
        - protocol: TCP    # 协议
          port: 80         # service 端口
          targetPort: 80   # 容器端口
      type: ClusterIP    # 服务类型
    

    1.2 statefulset的pod示例

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "web"  # 绑定的服务
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
              name: web
    

    1.3 执行命令

    • 查询pod创建顺序

      kubectl get pods
      
    • 查询主机名

      [root@k8s-master statefulset]# kubectl exec web-0 -- hostname
      web-0
      
    • 测试A记录解析

      [root@k8s-master statefulset]# kubectl run -it dns-test --image busybox:1.28.4 /bin/sh
      / # nslookup web.default.svc.cluster.local
      Server:    10.96.0.10
      Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
      
      Name:      web.default.svc.cluster.local
      Address 1: 10.244.107.214 web-2.web.default.svc.cluster.local
      Address 2: 10.244.169.145 web-1.web.default.svc.cluster.local
      Address 3: 10.244.36.88 web-0.web.default.svc.cluster.local
      

    2.k8s-案例

    • 创建配置目录

      [root@k8s-master yaml]# mkdir -p statefulset
      [root@k8s-master yaml]# cd statefulset/
      

    2.1 部署headless service

    • 安装headless service服务

      [root@k8s-master statefulset]# vim headless-service.yaml
      [root@k8s-master statefulset]# cat headless-service.yaml 
      apiVersion: v1
      kind: Service
      metadata:
        name: web
        namespace: default
      spec:
        clusterIP: None       #无头服务
        selector:             #容器选择器
          app: nginx          # 指定关联pod名称
        ports:
          - protocol: TCP    # 协议
            port: 80         # service 端口
            targetPort: 80   # 容器端口
        type: ClusterIP    # 服务类型
      
      
    • 启动服务

      [root@k8s-master statefulset]# kubectl apply  -f headless-service.yaml 
      service/web created
      
    • 查看服务

      [root@k8s-master statefulset]# kubectl get svc
      NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
      kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   17d
      web          ClusterIP   None         <none>        80/TCP    2m44s
      

    2.2 部署statefulset的服务

    • 编写statefulset_pod服务

      [root@k8s-master statefulset]# vim statefulset_pod.yaml
      [root@k8s-master statefulset]# cat  statefulset_pod.yaml
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: web
      spec:
        serviceName: "web"  # 绑定的服务
        replicas: 3
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
                name: web
      
      
    • 启动服务

      [root@k8s-master statefulset]# kubectl apply -f statefulset_pod.yaml 
      statefulset.apps/web created
      
    • 验证服务

      [root@k8s-master statefulset]# kubectl get pods
      NAME                                   READY   STATUS    RESTARTS   AGE
      nfs-client-provisioner-95c9579-m2f69   1/1     Running   0          2d4h
      secret-demo-pod                        1/1     Running   0          5d23h
      web-0                                  1/1     Running   0          42s
      web-1                                  1/1     Running   0          37s
      web-2                                  1/1     Running   0          31s
      

    3. 验证服务

    • 查询pod创建顺序

      [root@k8s-master pv]# kubectl get pods
      NAME                                   READY   STATUS    RESTARTS   AGE
      nfs-client-provisioner-95c9579-qslkg   1/1     Running   0          9m49s
      web-0                                  1/1     Running   0          18h
      web-1                                  1/1     Running   0          18h
      web-2                                  1/1     Running   0          18h
      
      
    • 查询主机名

      [root@k8s-master pv]# kubectl exec -it web-0 -- hostname
      web-0
      [root@k8s-master pv]# kubectl exec -it headless-web-0 -- hostname
      headless-web-0
      
    • 测试A记录解析

      [root@k8s-master statefulset]# kubectl run -it test --image=busybox:1.28.4 -- /bin/sh
      If you don't see a command prompt, try pressing enter.
      / # nslookup  web
      Server:    10.96.0.10
      Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
      
      Name:      web
      Address 1: 10.244.85.204 web-2.web.default.svc.cluster.local
      Address 2: 10.244.85.203 web-0.web.default.svc.cluster.local
      Address 3: 10.244.58.196 web-1.web.default.svc.cluster.local
      / # nslookup  web-0.web.default.svc.cluster.local
      Server:    10.96.0.10
      Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
      
      Name:      web-0.web.default.svc.cluster.local
      Address 1: 10.244.85.203 web-0.web.default.svc.cluster.local
      
  • 相关阅读:
    Scons 三
    Scons 二
    vs code插件
    Scons一
    实例演示 C# 中 Dictionary<Key, Value> 的检索速度远远大于 hobbyList.Where(c => c.UserId == user.Id)
    ASP.NET Core 如何用 Cookie 来做身份验证
    如何设计出和 ASP.NET Core 中 Middleware 一样的 API 方法?
    小记编程语言的设计
    解决 VS2019 打开 edmx 文件时没有 Diagram 视图的 Bug
    一款回到顶部的 jQuery 插件,支持 Div 中的滚动条回到顶部
  • 原文地址:https://www.cnblogs.com/scajy/p/15667301.html
Copyright © 2011-2022 走看看