kubernetes每一個節點建立一個服務的Pod

1. 問題場景

但願一個worker節點上僅部署一樣的服務一個. 好比: kubernets有三個worker節點,三個節點部署N個副本的api服務, 爲了提升服務效率但願加入緩存,須要爲三個節點個部署一個redis服務, 這個時候咱們定義這個redis服務副本爲3, 可是如何設置一個節點僅部署一個redis服務呢?node

2. 相關知識

  • 親和性redis

    k8s設計了親和性來配置pod和node, pod和pod的關係, 即:api

  • 思路緩存

    pod和node關係解決的pod選擇node的場景, 這裏不是解決本問題的關鍵, pod和pod的關係纔是解決的關鍵, 只要讓服務副本設置爲3, 且每一個node上redis的pod是互斥或者排他的選擇便可, 如何設置同一個node上的pod互斥呢? 經過Inter-pod affinity and anti-affinity 能夠知道須要指定: topologyKeyapp

  • 具體配置結果ui

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
    spec:
      nodeSelector:
        matchLabels:
          service: mirage
      selector:
        matchLabels:
          service: redis
      replicas: 3
      template:
        metadata:
          labels:
            service: redis
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: service
                      operator: In
                      values:
                        - redis
                  topologyKey: kubernetes.io/hostname
          containers:
            - name: redis
              image: redis:latest
          ports:
            - containerPort: 3306

    解讀上面的配置: 在Pod進行選擇則node建立Pod的時候首先排除那些在該node上有redis pod的節點. 有點繞可是就是這樣的邏輯.設計

3. 參考文檔

相關文章
相關標籤/搜索