91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s nodeSelector和affinity調度親和性的實現方法

發布時間:2021-06-26 09:15:52 來源:億速云 閱讀:453 作者:chen 欄目:大數據

本篇內容主要講解“k8s nodeSelector和affinity調度親和性的實現方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“k8s nodeSelector和affinity調度親和性的實現方法”吧!

nodeSelector

1.分配pod到node的方法

通過node label selector實現約束pod運行到指定節點,有兩種方法 nodeSelector 以及affinity

2.nodeSelector 是k8s早起提供的節點選擇器實現

1)首先為nodes打對應的label
kubectl label nodes master disktype=ssd
2)創建yaml文件,nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx

創建pod

kubectl create -f nginx-pod.yaml
節點默認的label
kubectl get nodes -o yaml 可以看到默認節點的label,也可以使用這些label進行約束

alpha.kubernetes.io/fluentd-ds-ready: "true"
beta.kubernetes.io/arch: amd64
beta.kubernetes.io/os: linux
disktype: ssd
kubeadm.alpha.kubernetes.io/role: master
kubernetes.io/hostname: master

親和性和反親和性

根據類型有

nodeAffinity(主機親和性),
podAffinity(POD親和性)
podAntiAffinity(POD反親和性)。

三種親和性和反親和性策略的比較如下表所示:

策略名稱匹配目標支持的操作符支持拓撲域設計目標
nodeAffinity主機標簽In,NotIn,Exists,DoesNotExist,Gt,Lt不支持決定Pod可以部署在哪些主機上
podAffinityPod標簽In,NotIn,Exists,DoesNotExist支持決定Pod可以和哪些Pod部署在同一拓撲域
PodAntiAffinityPod標簽In,NotIn,Exists,DoesNotExist支持決定Pod不可以和哪些Pod部署在同一拓撲域

對于親和性和反親和性,每種都有三種規則可以設置:

RequiredDuringSchedulingRequiredDuringExecution :在調度期間要求滿足親和性或者反親和性規則,如果不能滿足規則,則POD不能被調度到對應的主機上。在之后的運行過程中,如果因為某些原因(比如修改label)導致規則不能滿足,系統會嘗試把POD從主機上刪除(現在版本還不支持)。

RequiredDuringSchedulingIgnoredDuringExecution :在調度期間要求滿足親和性或者反親和性規則,如果不能滿足規則,則POD不能被調度到對應的主機上。在之后的運行過程中,系統不會再檢查這些規則是否滿足。

PreferredDuringSchedulingIgnoredDuringExecution :在調度期間盡量滿足親和性或者反親和性規則,如果不能滿足規則,POD也有可能被調度到對應的主機上。在之后的運行過程中,系統不會再檢查這些規則是否滿足。

使用場景介紹

nodeAffinity使用場景 :

  • 將S1服務的所有Pod部署到指定的符合標簽規則的主機上。

  • 將S1服務的所有Pod部署到除部分主機外的其他主機上。

podAffinity使用場景 :

  • 將某一特定服務的pod部署在同一拓撲域中,不用指定具體的拓撲域。

  • 如果S1服務使用S2服務,為了減少它們之間的網絡延遲(或其它原因),把S1服務的POD和S2服務的pod部署在同一拓撲域中。

podAntiAffinity使用場 景:

  • 將一個服務的POD分散在不同的主機或者拓撲域中,提高服務本身的穩定性。

  • 給POD對于一個節點的獨占訪問權限來保證資源隔離,保證不會有其它pod來分享節點資源。

  • 把可能會相互影響的服務的POD分散在不同的主機上。

NodeAffinity

參考:https://k8smeetup.github.io/docs/concepts/configuration/assign-pod-node/#node-親和性beta-特性

requiredDuringSchedulingIgnoredDuringExecution的示例

下面這個例子使用nodeAffinity把POD部署到主機mesos-slave1和mesos-slave2上面

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
  annotations:
    scheduler.alpha.kubernetes.io/affinity: >
      {
        "nodeAffinity": {
          "requiredDuringSchedulingIgnoredDuringExecution": {
            "nodeSelectorTerms": [
              {
                "matchExpressions": [
                  {
                    "key": "kubernetes.io/hostname",
                    "operator": "In",
                    "values": [“mesos-slave1″,”mesos-slave2”]
                  }
                ]
              }
            ]
          }
        }
      }
    another-annotation-key: another-annotation-value
spec:
  containers:
  - name: with-node-affinity
    image: gcr.io/google_containers/pause:2.0

我們可以看到NodeSelectorTerms可以有多個,之間是或的關系,滿足任意一個既滿足,,MatchExpressions也可以有多個,他們之間是且的關系 必須都滿足。

preferredDuringSchedulingIgnoredDuringExecution 例子
apiVersion: v1
kind: Pod
metadata:
  name: with-labels
  annotations:
    scheduler.alpha.kubernetes.io/affinity: >
    {
       "nodeAffinity": {
          "preferredDuringSchedulingIgnoredDuringExecution": [
                {
                    "weight" : 1,
                    "preference": {
                        "matchExpressions": [
                            {
                                "key": "disktype",
                                "operator": "In",
                                "values": ["ssd"]
                            }
                        ]
                    }
                }
            ]
        }
    }
    another-annotation-key: another-annotation-value
spec:
  containers:
  - name: test-affinity
    env:
      - name: MYSQL_ROOT_PASSWORD
        value: pass
    image: mysql
  •  

preferredDuringSchedulingIgnoredDuringExecution值為列表,根據權重決定順序
MatchExpressions 值為列表 關系為且,必須都滿足

Inter-pod affinity and anti-affinity

Inter-pod affinity 是根據通過已運行在節點上的pod的標簽而不是node的標簽來決定被調度pod的運行節點,因為pod運行在指定的namespace所以需要自己指定運行pod的namesapce

anti-affinity 和Inter-pod affinity相反

在下面這個例子中,定義了一個Pod親和性和一個Pod反親和性規則。其中Pod親和性規則是一定要滿足的,Pod反親和性規則是參考滿足的。

Pod親和性規則的含義是:Pod必須部署在一個節點上,這個節點上至少有一個正在運行的Pod,這個Pod的security屬性取值是“S1”,并且要求部署的節點同正在運行的Pod所在節點都在相同的云服務區域中,也就是“topologyKey:failure-domain.beta.kubernetes.io/zone”。換言之,一旦某個區域出了問題,我們希望這些 Pod 能夠再次遷移到同一個區域。

Pod反親和性規則的含義是,Pod不能部署在一個節點上,這個節點上正在運行的Pod中security屬性取值是“S2”,并且新部署的Pod不能同security屬性取值是“S2”的Pod在相同的主機上,也就是“topologyKey: kubernetes.io/hostname”。

matchExpressions中operator的取值包括In、NotIn、Exists、DoesNotExist、Gt和Lt。topologyKey的取值包括:

  1.   kubernetes.io/hostname       同一個主機

     

    • 1

  2.   failure-domain.beta.kubernetes.io/zone      同一個云服務區

     

    • 1

  3.   failure-domain.beta.kubernetes.io/region    同一個區域

     

    • 1

apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
  annotations:
    scheduler.alpha.kubernetes.io/affinity: >
        {
          "podAffinity": {
            "requiredDuringSchedulingIgnoredDuringExecution": [
              {
                "labelSelector": {
                  "matchExpressions": [
                    {
                      "key": "security",
                      "operator": "In",
                      "values": ["S1"]
                    }
                  ]
                },
                "topologyKey": "failure-domain.beta.kubernetes.io/zone"
             }
            ]
           },
          "podAntiAffinity": {
            "requiredDuringSchedulingIgnoredDuringExecution": [
              {
                "labelSelector": {
                  "matchExpressions": [
                    {
                      "key": "security",
                      "operator": "In",
                      "values": ["S2"]
                    }
                  ]
                },
                "topologyKey": "kubernetes.io/hostname"
             }
            ]
           }
         }
spec:
  containers:
  - name: with-pod-affinity
    image: gcr.io/google_containers/pause:2.0

到此,相信大家對“k8s nodeSelector和affinity調度親和性的實現方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南华县| 梅河口市| 当雄县| 林周县| 贵定县| 顺平县| 台南市| 黄平县| 鱼台县| 海伦市| 汉阴县| 保康县| 女性| 县级市| 阜南县| 琼中| 五大连池市| 中卫市| 任丘市| 黄石市| 洛扎县| 静乐县| 柳河县| 大余县| 华容县| 岳池县| 南充市| 孝昌县| 萍乡市| 吴桥县| 武山县| 城固县| 安仁县| 福鼎市| 徐水县| 工布江达县| 汝南县| 环江| 永城市| 侯马市| 梅州市|