K8S學習筆記之如何讓多個Pod均勻部署到各個節點上

Kubernetes中kube-scheduler組件負責Pod的調度,對每一個新創建的 Pod 或者是未被調度的 Pod,kube-scheduler 會選擇一個最優的節點去運行這個 Pod。

kube-scheduler 給一個 Pod 做調度選擇包含過濾和打分兩個步驟。

 

過濾階段會將所有滿足 Pod 調度需求的節點選出來,在打分階段 kube-scheduler 會給每一個可調度節點進行優先級打分,最後kube-scheduler 會將 Pod 調度到得分最高的節點上,如果存在多個得分最高的節點,kube-scheduler 會從中隨機選取一個。

 

打分優先級中節點調度均衡(BalancedResourceAllocation)只是其中一項,還有其他打分項會導致分佈不均勻。詳細的調度說明請參見Kubernetes 調度器調度策略

 

想要讓多個Pod儘可能的均勻分佈在各個節點上,可以考慮使用工作負載反親和特性,讓Pod之間儘量“互斥”,這樣就能儘量均勻的分佈在各節點上。

示例如下:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: container-0
          image: nginx:alpine
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi
      affinity:
        podAntiAffinity:                   # 工作負載反親和
          preferredDuringSchedulingIgnoredDuringExecution:    # 儘量滿足如下條件
            - podAffinityTerm:
                labelSelector:                       # 選擇Pod的標籤,與工作負載本身反親和
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - nginx
                namespaces:
                  - default
                topologyKey: kubernetes.io/hostname     # 在節點上起作用
      imagePullSecrets:
        - name: default-secret

 

轉載

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章