最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8s?Affinity親和力詳解(調(diào)度策略)

 更新時間:2025年08月14日 09:50:32   作者:大新屋  
文章介紹了Kubernetes中親和力和反親和力的調(diào)度策略,包括節(jié)點和Pod的硬性、軟性規(guī)則,用于實現(xiàn)Pod與節(jié)點的標簽匹配、區(qū)域均衡負載及避免單節(jié)點過載等場景,強調(diào)標簽匹配和副本數(shù)限制對調(diào)度結(jié)果的影響

K8s Affinity親和力

提示:Kubernetes 官網(wǎng)Affinity說明文檔 https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/

kubernetes Affinity親和力是一種調(diào)度策略,用于確保Pod被調(diào)度到具有特定標簽(label)或字段的節(jié)點上。

親和力和反親和力:

  • 親和力和反親和力可以用來控制 Pod 如何調(diào)度到節(jié)點上。
  • 親和力表示 Pod 要求與特定的節(jié)點調(diào)度在一起,反親和力表示 Pod 不希望與特定的節(jié)點調(diào)度在一起。

Affinity親和力分為兩類:

  • 節(jié)點親和力:NodeAffinity (包括節(jié)點親和力和節(jié)點反親和力)
  • Pod親和力:PodAffinity/PodAntiAffinity(PodAffinity Pod親和力和PodAntiAffinity Pod反親和力)

親和力和反親和力有兩種性:

  • requiredDuringSchedulingIgnoredDuringExecution(硬親和性):這種類型親和力是硬性,表示Pod必須被調(diào)度到滿足指定條件的節(jié)點上。如果不滿足條件,Pod將不會被調(diào)度。
  • preferredDuringSchedulingIgnoredDuringExecution(軟親和性):這種類型親和力是軟性,表示Pod更傾向于被調(diào)度到滿足指定條件的節(jié)點上,但如果無法滿足,Pod仍會被調(diào)度到其他節(jié)點。

一、Affinity參數(shù)說明

提示:節(jié)點反親和力通過operator參數(shù)設(shè)置成Notln值實現(xiàn)

1、節(jié)點nodeAffinity(硬性)親和力

spec:
  affinity:                                             # 定義Affinity親和力配置
    nodeAffinity:                                       # 定義節(jié)點Affinity親和力配置
      requiredDuringSchedulingIgnoredDuringExecution:   # 定義硬性Affinity親和力配置
        nodeSelectorTerms:                              # 定義節(jié)點選擇器配置
        - matchExpressions:                             # 定義匹配節(jié)點標簽鍵值對key=value
          - key: disktype                               # 設(shè)置節(jié)點標簽鍵名key
            operator: In                                # 節(jié)點標簽匹配方式,In等于
            values:                                     # 設(shè)置節(jié)點標簽值value
            - ssd

2、節(jié)點nodeAffinity(軟性)親和力

spec:
  affinity:                                               # 定義Affinity親和力配置
    nodeAffinity:                                         # 定義節(jié)點Affinity親和力配置
      preferredDuringSchedulingIgnoredDuringExecution:    # 定義軟性Affinity親和力配置
      - weight: 10                                        # 軟親和力的權(quán)重,權(quán)重越高優(yōu)先級越大,范圍1-100
        preference:                                       # 軟親和力配置項
          matchExpressions:                               # 定義匹配節(jié)點標簽鍵值對key=value
          - key: disktype                                 # 設(shè)置節(jié)點標簽鍵名key
            operator: In                                  # 節(jié)點標簽匹配方式,In等于
            values:                                       # 設(shè)置節(jié)點標簽值value
            - ssd

3、Pod podAffinity(硬性)親和力

spec:
  affinity:                                            # 定義Affinity親和力配置
    podAffinity:                                       # 定義Pod Affinity親和力配置
      requiredDuringSchedulingIgnoredDuringExecution:  # 定義Affinity硬性親和力配置
      - labelSelector:                                 # 定義Pod選擇器配置
          matchExpressions:                            # 定義匹配Pod標簽鍵值對key=value
          - key: disktype              i               # 設(shè)置Pod標簽鍵名key
            operator: In                               # Pod標簽規(guī)則匹配條件,In等于
            values:                                    # 設(shè)置Pod標簽值value
            - ssd
        topologkey: kubernetes.io/hostname             # 定義親和力的范圍,匹配的拓撲域的key,也就是節(jié)點上label和key,key和value相同的為同一個域。topologyke拓撲域,主要針對宿主機,相當于對宿主機進行區(qū)域的劃分。用label進行判斷,不同的key和不同的value是屬于不同的拓撲域。kubernetes.io/hostname是K8s默認節(jié)點標簽

4、Pod podAffinity(軟性)親和力

spec:
  affinity:                                             # 定義Affinity親和力配置
    podAffinity:                                        # 定義Pod Affinity親和力配置
      requiredDuringSchedulingIgnoredDuringExecution:   # 定義Affinity硬性親和力配置
      - labelSelector:                                  # 定義Pod選擇器配置
          matchExpressions:                             # 定義匹配Pod標簽鍵值對key=value
          - key: disktype                               # 設(shè)置Pod標簽鍵名key
            operator: In                                # Pod標簽規(guī)則匹配條件,In等于
            values:                                     # 設(shè)置Pod標簽值value
            - ssd
        topologkey: kubernetes.io/hostname              # 定義親和力的范圍,匹配的拓撲域的key,也就是節(jié)點上label和key,key和value相同的為同一個域。topologyke拓撲域,主要針對宿主機,相當于對宿主機進行區(qū)域的劃分。用label進行判斷,不同的key和不同的value是屬于不同的拓撲域。kubernetes.io/hostname是K8s默認節(jié)點標簽

5、Pod podAffinity(硬性)反親和力

spec:
  affinity:                                             # 定義Affinity親和力配置
    podAffinity:                                        # 定義Pod Affinity親和力配置
      requiredDuringSchedulingIgnoredDuringExecution:   # 定義Affinity硬性親和力配置
      - labelSelector:                                  # 定義Pod選擇器配置
          matchExpressions:                             # 定義匹配Pod標簽鍵值對key=value
          - key: disktype                               # 設(shè)置Pod標簽鍵名key
            operator: In                                # Pod標簽規(guī)則匹配條件,In等于
            values:                                     # 設(shè)置Pod標簽值value
            - ssd
        topologkey: kubernetes.io/hostname             # 定義親和力的范圍,匹配的拓撲域的key,也就是節(jié)點上label和key,key和value相同的為同一個域。topologyke拓撲域,主要針對宿主機,相當于對宿主機進行區(qū)域的劃分。用label進行判斷,不同的key和不同的value是屬于不同的拓撲域。kubernetes.io/hostname是K8s默認節(jié)點標簽

6、Pod podAntAffinity(軟性)反親和力

spec:
  affinity:                                                 # 定義Affinity親和力配置
    podAntAffinity:                                         # 定義Pod Affinity反親和力配置
      preferredDuringSchedulingIgnoredDuringExecution:      # 定義Affinity軟性反親和力配置
      - weight: 10                                          # 反親和力的權(quán)重,權(quán)重越高反親和力越大,范圍1-100
        podAffinityTerm:                                   # Pod反親和力配置項
          labelSelector:                                   # 定義Pod選擇器配置
            matchExpressions:                              # 定義匹配Pod標簽鍵值對key=value
            - key: security                                # 設(shè)置Pod標簽鍵名key
              operator: In                                 # Pod標簽規(guī)則匹配條件,In等于
              values:                                      # 設(shè)置Pod標簽值value
              - S2
          topologyKey: failure-domain.beta.kubernetes.io/zone   # 定義反親和力的范圍,匹配的拓撲域的key,也就是節(jié)點上label和key,key和value相同的為同一個域。topologyke拓撲域,主要針對宿主機,相當于對宿主機進行區(qū)域的劃分。用label進行判斷,不同的key和不同的value是屬于不同的拓撲域。

7、operator參數(shù)規(guī)則匹配條件

operator                # 規(guī)則匹配條件
  --- In                # 相當于key=value的形式(等于)
  --- Notln             # 相當于key!=value的形式(不等于)
  --- Exists            # 節(jié)點存在label的key為指定的值即可,不能配置values字段
  --- DoesNotExist      # 節(jié)點不存在label的key為指定的值即可,不能配置values字段
  --- Gt                # 大于value指定的值
  --- Lt                # 小于value指定的值

二、示例1:節(jié)點Affinity(硬性)親和力(強制Pod部署到指定節(jié)點)

### 查看K8s集群節(jié)點是否有污點,如果有污點需要清除節(jié)點污點,為了不影響Affinity親和力參數(shù)
kubectl get nodes -o=custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

### 選擇k8s-node01和k8s-node02節(jié)點打標簽
kubectl label node k8s-node01 k8s-node02 disktype=ssd
kubectl get nodes --show-labels -l disktype=ssd

### 創(chuàng)建Deployment
mkdir -p /data/yaml/affinity
cat > /data/yaml/affinity/deploy-nodeaffinity-hard.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-nodeaffinity-hard
  name: deploy-nodeaffinity-hard
  namespace: default
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: disktype
                operator: In
                values:
                - ssd
      containers:
      - name: nginx
        image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.26
        imagePullPolicy: IfNotPresent
EOF

kubectl create -f /data/yaml/affinity/deploy-nodeaffinity-hard.yaml
kubectl get deploy deploy-nodeaffinity-hard -n default -oyaml

### 查看Pod節(jié)點部署節(jié)點
kubectl get pods -n default -owide

### 刪除Deployment和節(jié)點標簽
kubectl delete -f /data/yaml/affinity/deploy-nodeaffinity-hard.yaml
kubectl label nodes k8s-node01 k8s-node02 disktype-

三、示例2:節(jié)點Affinity(軟性)親和力(盡可能Pod部署到指定節(jié)點)

### 查看K8s集群節(jié)點是否有污點,如果有污點需要清除節(jié)點污點,為了不影響Affinity親和力參數(shù)
kubectl get nodes -o=custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

### 選擇k8s-node02節(jié)點打標簽
kubectl label node k8s-node02 node=erp
kubectl get nodes --show-labels -l node=erp

### 創(chuàng)建Deployment
mkdir -p /data/yaml/affinity
cat > /data/yaml/affinity/deploy-nodeaffinity-soft.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-nodeaffinity-soft
  name: deploy-nodeaffinity-soft
  namespace: default
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: node
                operator: In
                values:
                - erp
      containers:
      - name: nginx
        image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.26
        imagePullPolicy: IfNotPresent
EOF

kubectl create -f /data/yaml/affinity/deploy-nodeaffinity-soft.yaml
kubectl get deploy deploy-nodeaffinity-soft -n default -oyaml

### 查看Pod節(jié)點部署節(jié)點
kubectl get pods -n default -owide

### 刪除Deployment和節(jié)點標簽
kubectl delete -f /data/yaml/affinity/deploy-nodeaffinity-soft.yaml
kubectl label nodes k8s-node02 node-

四、示例3:Pod Affinity(硬性)反親和力(強制Pod部署到指定的不同的節(jié)點)

示例場景描述:假如k8s-node01是深圳機房,k8s-node02是北京機房,k8s-master03是杭州機房,每個不同的機房部署一個nginx容器,實現(xiàn)區(qū)域性均衡負載

提示:當Deployment定義啟動超過3個Pod數(shù)量,但節(jié)點只定義了3個key,當定義了3個key節(jié)點各自都只能運行一個Pod(不會運行兩個以上的Pod),那剩下的Pod會在其它節(jié)點上運行

### 查看K8s集群節(jié)點是否有污點,如果有污點需要清除節(jié)點污點,為了不影響Affinity親和力參數(shù)
kubectl get nodes -o=custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

### 節(jié)點創(chuàng)建label中鍵名key要一樣,但value值不要一樣,topologyke拓撲域參數(shù)才能區(qū)分不同的區(qū)域
kubectl get nodes
kubectl label nodes k8s-master01 area=hangzhou
kubectl label nodes k8s-node01 area=shenzhen
kubectl label nodes k8s-node02 area=beijing
kubectl get nodes --show-labels | grep area

### 創(chuàng)建Deployment 
mkdir -p /data/yaml/affinity
cat > /data/yaml/affinity/deploy-podantaffinity-area.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-podantaffinity-area
  name: deploy-podantaffinity-area
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      run: deploy-pod-area
  template:
    metadata:
      labels:
        run: deploy-pod-area
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: run
                operator: In
                values:
                - deploy-pod-area
            topologyKey: area
      containers:
      - name: nginx
        image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.26
        imagePullPolicy: IfNotPresent
EOF

kubectl create -f /data/yaml/affinity/deploy-podantaffinity-area.yaml
kubectl get deploy deploy-podantaffinity-area -n default -oyaml

### 查看Pod節(jié)點部署節(jié)點
kubectl get pods -n default -owide

### 刪除Deployment和節(jié)點標簽
kubectl delete -f /data/yaml/affinity/deploy-podantaffinity-area.yaml
kubectl label nodes k8s-node01 k8s-node02 k8s-master01 area-

五、示例4:Pod Affinity(硬性)反親和力(強制Pod部署到K8s集群中每一個節(jié)點)

提示:Deployment設(shè)置的Pod副本數(shù)不能超過K8s節(jié)點數(shù),超過的Pod副本數(shù)啟動Pod會失敗,kubernetes.io/hostname是K8s內(nèi)置的默認標簽

### 查看K8s集群節(jié)點是否有污點,如果有污點需要清除節(jié)點污點,為了不影響Affinity親和力參數(shù)
kubectl get nodes -o=custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

### 創(chuàng)建Deployment 
mkdir -p /data/yaml/affinity
cat > /data/yaml/affinity/deploy-podantaffinity-hostname.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-podantaffinity-hostname
  name: deploy-podantaffinity-hostname
  namespace: default
spec:
  replicas: 5
  selector:
    matchLabels:
      run: deploy-pod-hostname
  template:
    metadata:
      labels:
        run: deploy-pod-hostname
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: run
                operator: In
                values:
                - deploy-pod-hostname
            topologyKey: kubernetes.io/hostname
      containers:
      - name: nginx
        image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.26
        imagePullPolicy: IfNotPresent
EOF

kubectl create -f /data/yaml/affinity/deploy-podantaffinity-hostname.yaml
kubectl get deploy deploy-podantaffinity-hostname -n default -oyaml

### 查看Pod節(jié)點部署節(jié)點
kubectl get pods -n default -owide

### 刪除Deployment
kubectl delete -f /data/yaml/affinity/deploy-podantaffinity-hostname.yaml

六、示例5:節(jié)點Affinity(軟性)親和力(重要Pod盡可能部署在高性能節(jié)點)

測試場景描述: nginx容器不部署到master節(jié)點,nginx容器第一選擇部署到高存儲性能k8s-node01,如果k8s-node01節(jié)點出現(xiàn)故障,第二選擇部署到k8s-node02節(jié)點

### 查看K8s集群節(jié)點是否有污點,如果有污點需要清除節(jié)點污點,為了不影響Affinity親和力參數(shù)
kubectl get nodes -o=custom-columns=NAME:.metadata.name,TAINTS:.spec.taints

### 節(jié)點創(chuàng)建label
kubectl get nodes
kubectl label nodes k8s-master01 k8s-master02 k8s-master03 master=manager
kubectl label nodes k8s-node01 ssd=fastest
kubectl label nodes k8s-node02 sata=faster
kubectl get nodes --show-labels | grep master=manager
kubectl get nodes --show-labels | grep ssd
kubectl get nodes --show-labels | grep sata

### 創(chuàng)建Deployment
mkdir -p /data/yaml/affinity
cat > /data/yaml/affinity/nginx-deploy-select.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deploy-select
  name: nginx-deploy-select
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: ssd
                operator: In
                values:
                - "fastest"
              - key: master
                operator: NotIn
                values:
                - "manager"
          - weight: 50
            preference:
              matchExpressions:
              - key: sata
                operator: In
                values:
                - "faster"
      containers:
      - name: nginx
        image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.26
        imagePullPolicy: IfNotPresent
EOF

kubectl create -f /data/yaml/affinity/nginx-deploy-select.yaml
kubectl get deploy nginx-deploy-select -n default -oyaml

### 查看Pod節(jié)點部署節(jié)點
kubectl get pods -n default -owide

### 刪除Deployment
kubectl delete -f /data/yaml/affinity/deploy-podantaffinity-hostname.yaml

### 刪除Deployment和節(jié)點標簽
kubectl delete -f /data/yaml/affinity/nginx-deploy-select.yaml
kubectl label nodes k8s-node01 k8s-master01 k8s-master02 k8s-master03 master-
kubectl label nodes k8s-node01 ssd-
kubectl label nodes k8s-node02 sata-

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MinIO分布式文件存儲(從入門到飛翔)

    MinIO分布式文件存儲(從入門到飛翔)

    MinIO是一款高性能的分布式對象存儲系統(tǒng),兼容Amazon S3協(xié)議,具有輕量級、易部署、高可用和可擴展性等優(yōu)勢,它通過糾刪碼技術(shù)實現(xiàn)數(shù)據(jù)冗余與高容錯性,適用于私有云存儲、大數(shù)據(jù)分析和靜態(tài)資源托管等場景,本文介紹MinIO分布式文件存儲的相關(guān)知識,感興趣的朋友一起看看吧
    2025-03-03
  • k8s按需創(chuàng)建PV和使用PVC詳解

    k8s按需創(chuàng)建PV和使用PVC詳解

    Kubernetes中,PV和PVC用于管理持久存儲,StorageClass實現(xiàn)動態(tài)PV分配,PVC聲明存儲需求并綁定PV,通過kubectl驗證狀態(tài),注意回收策略和綁定模式
    2025-09-09
  • k8s進入容器實現(xiàn)方式

    k8s進入容器實現(xiàn)方式

    文章介紹了在Kubernetes(k8s)中進入容器的步驟,包括使用`kubectl get pod`命令獲取容器名稱,然后使用`kubectl exec -it <podname> /bin/bash`或`kubectl exec -it <podname> bash`命令進入容器,如果容器中沒有`/bin/bash`,可以嘗試使用`sh`
    2026-02-02
  • Rainbond配置組件自動構(gòu)建部署官方文檔講解

    Rainbond配置組件自動構(gòu)建部署官方文檔講解

    這篇文章主要為大家介紹了Rainbond配置組件自動構(gòu)建部署官方文檔講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • kubelet啟動失敗的解決方案

    kubelet啟動失敗的解決方案

    這篇文章主要介紹了kubelet啟動失敗的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • 教你在k8s上部署HADOOP-3.2.2(HDFS)的方法

    教你在k8s上部署HADOOP-3.2.2(HDFS)的方法

    這篇文章主要介紹了k8s-部署HADOOP-3.2.2(HDFS)的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • k8s容器的內(nèi)存設(shè)置的踩坑記錄

    k8s容器的內(nèi)存設(shè)置的踩坑記錄

    這篇文章主要介紹了k8s容器的內(nèi)存設(shè)置的踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • Centos?8.2?升級內(nèi)核通過elrepo源的方法

    Centos?8.2?升級內(nèi)核通過elrepo源的方法

    這篇文章主要介紹了Centos?8.2?升級內(nèi)核通過elrepo源,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • k8s的包管理工具helm使用簡介

    k8s的包管理工具helm使用簡介

    這篇文章主要為大家介紹了k8s的包管理工具helm使用簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • k8s容器狀態(tài)Terminating無法刪除的問題及解決

    k8s容器狀態(tài)Terminating無法刪除的問題及解決

    這篇文章主要介紹了k8s容器狀態(tài)Terminating無法刪除的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07

最新評論

惠东县| 南京市| 香格里拉县| 江源县| 会理县| 慈溪市| 栾川县| 东阿县| 隆子县| 化德县| 铁力市| 陵水| 得荣县| 独山县| 益阳市| 海晏县| 崇明县| 竹北市| 江津市| 湖口县| 苏尼特右旗| 温宿县| 工布江达县| 营口市| 沧州市| 江津市| 慈溪市| 淳化县| 京山县| 洛宁县| 台中市| 札达县| 广元市| 灵丘县| 惠东县| 阜平县| 从化市| 扬州市| 文昌市| 原阳县| 会昌县|