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

Kubernetes調(diào)度機制與策略實驗詳解

 更新時間:2025年12月22日 15:15:46   作者:π大星星?  
本文通過實際操作,詳細(xì)介紹了Kubernetes調(diào)度機制的核心原理和常用調(diào)度策略的配置方法,包括節(jié)點選擇、親和性與反親和性、污點與容忍等,實驗環(huán)境為Kubernetes集群,并通過一系列步驟驗證了這些調(diào)度策略的實際應(yīng)用

實驗?zāi)康?/h2>

通過實際操作,理解 Kubernetes 調(diào)度機制的核心原理和常用調(diào)度策略的配置方法,包括節(jié)點選擇、親和性與反親和性、污點與容忍等。

實驗環(huán)境

  • Kubernetes 集群(至少包含一個 Master 節(jié)點和兩個 Worker 節(jié)點)。
  • kubectl 命令行工具。
  • Docker 鏡像(如 nginx 或其他簡單應(yīng)用鏡像)。

實驗步驟

步驟 1:查看集群節(jié)點信息

目的:了解集群中可用的節(jié)點及其狀態(tài)。

kubectl get nodes -o wide

輸出示例

NAME         STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION   CONTAINER-RUNTIME
k8s-master   Ready    control-plane   1d    v1.28.0   192.168.1.10  <none>        Ubuntu 22.04   5.15.0-46-generic   docker://20.10.12
k8s-node1    Ready    <none>          1d    v1.28.0   192.168.1.11  <none>        Ubuntu 22.04   5.15.0-46-generic   docker://20.10.12
k8s-node2    Ready    <none>          1d    v1.28.0   192.168.1.12  <none>        Ubuntu 22.04   5.15.0-46-generic   docker://20.10.12

說明:確保所有節(jié)點狀態(tài)為 Ready,表示集群正常運行。

步驟 2:使用nodeName調(diào)度 Pod

目的:理解 nodeName 的作用,即直接指定 Pod 調(diào)度到特定節(jié)點。

創(chuàng)建 Pod 配置文件 (pod-nodeName.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: pod-node1
spec:
  nodeName: k8s-node1
  containers:
  - name: nginx
    image: nginx

應(yīng)用配置文件

kubectl apply -f pod-nodeName.yaml

驗證 Pod 是否運行在指定節(jié)點

kubectl get pods -o wide

輸出示例

說明nodeName 是最簡單的調(diào)度方式,適用于調(diào)試或測試場景。

步驟 3:使用nodeSelector調(diào)度 Pod

目的:理解 nodeSelector 的作用,即通過節(jié)點標(biāo)簽選擇目標(biāo)節(jié)點。

為節(jié)點添加標(biāo)簽

kubectl label nodes k8s-node1 disk=ssd
kubectl label nodes k8s-node2 disk=hdd

創(chuàng)建 Pod 配置文件 (pod-nodeSelector.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: pod-ssd
spec:
  nodeSelector:
    disk: ssd
  containers:
  - name: nginx
    image: nginx

應(yīng)用配置文件

kubectl apply -f pod-nodeSelector.yaml

驗證 Pod 是否運行在帶有指定標(biāo)簽的節(jié)點

kubectl get pods -o wide

輸出示例

說明nodeSelector 是基于節(jié)點標(biāo)簽的調(diào)度方式,適用于根據(jù)節(jié)點特性(如硬件類型)進(jìn)行調(diào)度。

步驟 4:使用節(jié)點親和性(nodeAffinity)調(diào)度 Pod

目的:理解節(jié)點親和性的作用,即通過復(fù)雜的標(biāo)簽匹配規(guī)則選擇目標(biāo)節(jié)點。

kubectl label pod pod-node-affinity role=frontend

創(chuàng)建 Pod 配置文件 (pod-nodeAffinity.yaml):

這個配置文件的目的是創(chuàng)建一個名為 pod-node-affinity 的 Pod,并通過節(jié)點親和性規(guī)則將它調(diào)度到帶有 disk=ssd 標(biāo)簽的節(jié)點上

apiVersion: v1  # 指定 Kubernetes API 的版本,這里使用的是 v1 版本。
kind: Pod       # 指定資源類型,這里是 Pod。
metadata:       # 定義 Pod 的元數(shù)據(jù),包括名稱、標(biāo)簽等。
  name: pod-node-affinity  # Pod 的名稱,用于標(biāo)識這個 Pod。
spec:           # 定義 Pod 的規(guī)格,包括調(diào)度策略和容器配置。
  affinity:     # 定義 Pod 的親和性規(guī)則,用于控制調(diào)度行為。
    nodeAffinity:  # 節(jié)點親和性規(guī)則,用于根據(jù)節(jié)點的標(biāo)簽選擇目標(biāo)節(jié)點。
      requiredDuringSchedulingIgnoredDuringExecution:  # 必須滿足的節(jié)點親和性約束。
        nodeSelectorTerms:  # 定義節(jié)點選擇條件的列表,調(diào)度器會檢查這些條件。
        - matchExpressions:  # 定義匹配表達(dá)式,用于匹配節(jié)點標(biāo)簽。
          - key: disk  # 節(jié)點標(biāo)簽的鍵,這里匹配節(jié)點的 "disk" 標(biāo)簽。
            operator: In  # 操作符,表示 "包含在",即節(jié)點的 "disk" 標(biāo)簽值必須在 values 列表中。
            values:  # 定義允許的標(biāo)簽值列表。
            - ssd  # 允許的標(biāo)簽值之一,表示節(jié)點的 "disk" 標(biāo)簽值為 "ssd"。
  containers:  # 定義 Pod 中的容器列表。
  - name: nginx  # 容器的名稱,這里是 "nginx"。
    image: nginx  # 容器使用的鏡像,這里是官方的 nginx 鏡像。

應(yīng)用配置文件

kubectl apply -f pod-nodeAffinity.yaml

驗證 Pod 是否運行在符合條件的節(jié)點

kubectl get pods -o wide
  • 輸出示例

說明:節(jié)點親和性比 nodeSelector 更靈活,支持復(fù)雜的匹配規(guī)則。

步驟 5:使用 Pod 親和性與反親和性調(diào)度 Pod

目的:理解 Pod 親和性與反親和性的作用,即通過 Pod 標(biāo)簽選擇調(diào)度位置。

kubectl label pod pod-node-affinity role=frontend

創(chuàng)建帶有親和性的 Pod 配置文件 (pod-affinity.yaml):

這個配置文件的目的是創(chuàng)建一個名為 pod-affinity 的 Pod,并通過 Pod 親和性 規(guī)則將它調(diào)度到與已存在的、帶有 role=frontend 標(biāo)簽的 Pod 相同的節(jié)點上。

關(guān)鍵點解釋

apiVersion: v1  # 指定 Kubernetes API 的版本,這里使用的是 v1 版本。
kind: Pod       # 指定資源類型為 Pod。
metadata:       # 定義 Pod 的元數(shù)據(jù)。
  name: pod-affinity  # Pod 的名稱,用于標(biāo)識這個 Pod。
  labels:       # Pod 的標(biāo)簽,用于標(biāo)識 Pod 的角色或其他屬性。
    role: frontend   # 定義一個標(biāo)簽,鍵為 "role",值為 "frontend"。
spec:           # 定義 Pod 的規(guī)格,包括調(diào)度策略和容器配置。
  affinity:     # 定義 Pod 的親和性規(guī)則。
    podAffinity:  # 定義 Pod 親和性規(guī)則,用于根據(jù)其他 Pod 的標(biāo)簽選擇調(diào)度位置。
      requiredDuringSchedulingIgnoredDuringExecution:  # 必須滿足的 Pod 親和性約束。
      - labelSelector:  # 定義用于選擇目標(biāo) Pod 的標(biāo)簽選擇器。
          matchExpressions:  # 定義匹配表達(dá)式,用于匹配目標(biāo) Pod 的標(biāo)簽。
          - key: role  # 目標(biāo) Pod 的標(biāo)簽鍵,這里匹配 "role" 標(biāo)簽。
            operator: In  # 操作符,表示 "包含在",即目標(biāo) Pod 的 "role" 標(biāo)簽值必須在 values 列表中。
            values:  # 定義允許的標(biāo)簽值列表。
            - frontend  # 允許的標(biāo)簽值之一,表示目標(biāo) Pod 的 "role" 標(biāo)簽值為 "frontend"。
        topologyKey: kubernetes.io/hostname  # 定義親和性約束的拓?fù)溆颍@里是節(jié)點的主機名。
  containers:  # 定義 Pod 中的容器列表。
  - name: nginx  # 容器的名稱,這里是 "nginx"。
    image: nginx  # 容器使用的鏡像,這里是官方的 nginx 鏡像。

創(chuàng)建帶有反親和性的 Pod 配置文件 (pod-antiAffinity.yaml):

這個配置文件的目的是創(chuàng)建一個名為 pod-anti-affinity 的 Pod,并通過 Pod 反親和性 規(guī)則將其調(diào)度到與帶有 role=frontend 標(biāo)簽的 Pod 不同 的節(jié)點上。

apiVersion: v1  # 指定使用的 Kubernetes API 版本為 v1。
kind: Pod       # 指定資源類型為 Pod。
metadata:       # 定義 Pod 的元數(shù)據(jù),包括名稱和標(biāo)簽。
  name: pod-anti-affinity  # Pod 的名稱,用于標(biāo)識這個 Pod。
  labels:       # 定義 Pod 的標(biāo)簽。
    role: backend  # 為 Pod 添加一個標(biāo)簽,鍵為 "role",值為 "backend"。
spec:           # 定義 Pod 的規(guī)格,包括容器配置和調(diào)度策略。
  affinity:     # 定義 Pod 的親和性規(guī)則。
    podAntiAffinity:  # 定義 Pod 的反親和性規(guī)則。
      requiredDuringSchedulingIgnoredDuringExecution:  # 定義必須滿足的反親和性約束。
      - labelSelector:  # 定義用于選擇目標(biāo) Pod 的標(biāo)簽選擇器。
          matchExpressions:  # 定義匹配表達(dá)式,用于匹配目標(biāo) Pod 的標(biāo)簽。
          - key: role  # 目標(biāo) Pod 的標(biāo)簽鍵,這里匹配 "role" 標(biāo)簽。
            operator: In  # 操作符,表示 "包含在",即目標(biāo) Pod 的 "role" 標(biāo)簽值必須在 values 列表中。
            values:  # 定義允許的標(biāo)簽值列表。
            - frontend  # 允許的標(biāo)簽值之一,表示目標(biāo) Pod 的 "role" 標(biāo)簽值為 "frontend"。
        topologyKey: kubernetes.io/hostname  # 定義反親和性約束的拓?fù)溆?,這里是節(jié)點的主機名。
  containers:  # 定義 Pod 中的容器列表。
  - name: nginx  # 定義容器的名稱,這里是 "nginx"。
    image: nginx  # 定義容器使用的鏡像,這里是官方的 nginx 鏡像。

應(yīng)用配置文件

kubectl apply -f pod-affinity.yaml
kubectl apply -f pod-antiAffinity.yaml

驗證 Pod 是否運行在符合條件的位置

kubectl get pods -o wide

輸出示例

說明:Pod 親和性用于將 Pod 調(diào)度到與指定 Pod 相同的節(jié)點,而 Pod 反親和性用于避免將 Pod 調(diào)度到與指定 Pod 相同的節(jié)點。

步驟 6:使用污點與容忍調(diào)度 Pod

目的:理解污點與容忍的作用,即通過節(jié)點上的污點限制 Pod 調(diào)度,并通過容忍允許 Pod 調(diào)度到帶有特定污點的節(jié)點。

為節(jié)點添加污點

kubectl taint nodes k8s-node1 special=true:NoSchedule

創(chuàng)建帶有容忍的 Pod 配置文件 (pod-tolerations.yaml):

這個配置文件的目的是創(chuàng)建一個名為 pod-tolerations 的 Pod,并通過 容忍(Tolerations) 規(guī)則使其能夠被調(diào)度到帶有特定污點(special=true:NoSchedule)的節(jié)點上。

apiVersion: v1  # 指定 Kubernetes API 的版本,這里使用的是 v1。
kind: Pod       # 指定資源類型為 Pod。
metadata:       # 定義 Pod 的元數(shù)據(jù)。
  name: pod-tolerations  # Pod 的名稱,用于標(biāo)識這個 Pod。
spec:           # 定義 Pod 的規(guī)格,包括容器配置和調(diào)度策略。
  containers:   # 定義 Pod 中的容器列表。
  - name: nginx  # 容器的名稱,這里是 "nginx"。
    image: nginx  # 容器使用的鏡像,這里是官方的 nginx 鏡像。
  tolerations:  # 定義 Pod 的容忍(Tolerations)規(guī)則。
  - key: "special"  # 容忍的鍵,表示節(jié)點上污點的鍵。
    operator: "Equal"  # 操作符,表示容忍的條件是鍵值對相等。
    value: "true"  # 容忍的值,表示節(jié)點上污點的值。
    effect: "NoSchedule"  # 容忍的效果,表示容忍節(jié)點上的 "NoSchedule" 污點。

應(yīng)用配置文件

kubectl apply -f pod-tolerations.yaml

驗證 Pod 是否運行在帶有污點的節(jié)點

kubectl get pods -o wide

輸出示例

說明:污點與容忍用于實現(xiàn)靈活的調(diào)度策略,例如隔離特殊節(jié)點或允許 Pod 調(diào)度到帶有特定污點的節(jié)點。

步驟 7:使用調(diào)度優(yōu)先級(Priority Classes)調(diào)度 Pod

目的:理解調(diào)度優(yōu)先級的作用,即為 Pod 分配優(yōu)先級,高優(yōu)先級的 Pod 優(yōu)先調(diào)度。

創(chuàng)建優(yōu)先級類 (priority-class.yaml):

這個配置文件的目的是創(chuàng)建一個名為 high-priority優(yōu)先級類(PriorityClass),其優(yōu)先級值為 1000000。

優(yōu)先級類用于定義 Pod 的調(diào)度優(yōu)先級,調(diào)度器會根據(jù) Pod 的優(yōu)先級來決定調(diào)度順序

apiVersion: scheduling.k8s.io/v1  # 指定使用的 Kubernetes API 版本,這里使用的是 scheduling.k8s.io/v1,適用于優(yōu)先級類。
kind: PriorityClass               # 指定資源類型為 PriorityClass,用于定義 Pod 的優(yōu)先級。
metadata:                         # 定義優(yōu)先級類的元數(shù)據(jù)。
  name: high-priority             # 優(yōu)先級類的名稱,用于標(biāo)識這個優(yōu)先級類。
value: 1000000                    # 定義優(yōu)先級的數(shù)值,數(shù)值越大,優(yōu)先級越高。這里設(shè)置為 1000000,表示這是一個高優(yōu)先級。

應(yīng)用優(yōu)先級類

kubectl apply -f priority-class.yaml

創(chuàng)建帶有高優(yōu)先級的 Pod 配置文件 (pod-priority.yaml):

這個配置文件的目的是創(chuàng)建一個名為 pod-priority 的 Pod,并為其設(shè)置一個高優(yōu)先級。調(diào)度器在調(diào)度 Pod 時會根據(jù)其優(yōu)先級進(jìn)行排序,優(yōu)先級高的 Pod 會優(yōu)先調(diào)度。如果集群資源有限,高優(yōu)先級的 Pod 甚至可以搶占低優(yōu)先級的 Pod。

apiVersion: v1  # 指定 Kubernetes API 的版本,這里使用的是 v1,適用于 Pod 資源。
kind: Pod       # 指定資源類型為 Pod,即 Kubernetes 中的最小部署單元。
metadata:       # 定義 Pod 的元數(shù)據(jù),包括名稱和其他標(biāo)識信息。
  name: pod-priority  # Pod 的名稱,用于標(biāo)識這個 Pod。在同一個命名空間中,Pod 的名稱必須是唯一的。
spec:           # 定義 Pod 的規(guī)格,包括容器配置和調(diào)度策略。
  priorityClassName: high-priority  # 引用一個名為 "high-priority" 的優(yōu)先級類(PriorityClass)。
                                    # 這個優(yōu)先級類必須已經(jīng)存在于集群中,否則 Pod 無法正常調(diào)度。
                                    # 優(yōu)先級類定義了 Pod 的調(diào)度優(yōu)先級,數(shù)值越高,優(yōu)先級越高。
  containers:   # 定義 Pod 中的容器列表,一個 Pod 可以包含一個或多個容器。
  - name: nginx  # 定義容器的名稱,這里是 "nginx"。
    image: nginx  # 定義容器使用的鏡像,這里是官方的 nginx 鏡像。

應(yīng)用配置文件

kubectl apply -f pod-priority.yaml

驗證 Pod 是否優(yōu)先調(diào)度

kubectl get pods -o wide

輸出示例

說明:調(diào)度優(yōu)先級允許為 Pod 分配優(yōu)先級,高優(yōu)先級的 Pod 會優(yōu)先調(diào)度。

步驟 8:清理實驗環(huán)境

目的:清理實驗中創(chuàng)建的資源,恢復(fù)集群的初始狀態(tài)。

刪除創(chuàng)建的 Pod

kubectl delete pod pod-node1 pod-ssd pod-node-affinity pod-anti-affinity pod-tolerations pod-priority

刪除優(yōu)先級類

kubectl delete priorityclass high-priority

刪除節(jié)點標(biāo)簽和污點

kubectl label nodes k8s-node1 disk-
kubectl label nodes k8s-node2 disk-
kubectl taint nodes k8s-node1 special:NoSchedule-

實驗總結(jié)

通過以上實驗,我們詳細(xì)驗證了 Kubernetes 調(diào)度機制的核心原理和常用調(diào)度策略的實際應(yīng)用。以下是關(guān)鍵知識點的總結(jié):

調(diào)度器的作用:將 Pod 分配到合適的節(jié)點,確保資源合理利用和應(yīng)用高可用性。

調(diào)度方法

  • nodeName:直接指定節(jié)點,適用于調(diào)試或測試。
  • nodeSelector:通過節(jié)點標(biāo)簽選擇目標(biāo)節(jié)點,適用于根據(jù)硬件類型或地理位置調(diào)度。
  • 節(jié)點親和性(nodeAffinity):支持復(fù)雜的標(biāo)簽匹配規(guī)則,更靈活。
  • Pod 親和性與反親和性(podAffinity/podAntiAffinity):根據(jù) Pod 標(biāo)簽選擇調(diào)度位置。
  • 污點與容忍(Taints & Tolerations):通過污點限制調(diào)度,并通過容忍允許調(diào)度到帶有特定污點的節(jié)點。
  • 調(diào)度優(yōu)先級(Priority Classes):為 Pod 分配優(yōu)先級,高優(yōu)先級的 Pod 優(yōu)先調(diào)度。
  1. 調(diào)度器優(yōu)化:通過調(diào)整調(diào)度策略文件或參數(shù)優(yōu)化調(diào)度器性能。
  2. 監(jiān)控調(diào)度器:使用 Prometheus 和 Grafana 監(jiān)控調(diào)度器性能指標(biāo)。

通過實踐這些調(diào)度策略,你可以根據(jù)應(yīng)用需求優(yōu)化 Kubernetes 集群的資源分配和應(yīng)用部署。

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

相關(guān)文章

  • Kubernetes中創(chuàng)建命名空間實現(xiàn)方法

    Kubernetes中創(chuàng)建命名空間實現(xiàn)方法

    這篇文章主要為大家介紹了Kubernetes中創(chuàng)建命名空間實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • K8S中的mountPath和subPath使用詳解

    K8S中的mountPath和subPath使用詳解

    這篇文章主要介紹了K8S中的mountPath和subPath使用的相關(guān)資料,通過示例展示了如何使用mountPath和subPath來掛載ConfigMap到Pod中,并解決了服務(wù)無法啟動的問題,需要的朋友可以參考下
    2024-12-12
  • kubernetes token過期生成永久過程

    kubernetes token過期生成永久過程

    本文介紹了如何生成、查看和更新JWT(JSON Web Token),包括生成帶有過期時間的token,以及如何更新token以重新加入node
    2025-12-12
  • KubeSphere中部署Wiki系統(tǒng)wiki.js并啟用中文全文檢索

    KubeSphere中部署Wiki系統(tǒng)wiki.js并啟用中文全文檢索

    這篇文章主要為大家介紹了KubeSphere中部署Wiki系統(tǒng)wiki.js并啟用中文全文檢索實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • k8s進(jìn)入容器實現(xiàn)方式

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

    文章介紹了在Kubernetes(k8s)中進(jìn)入容器的步驟,包括使用`kubectl get pod`命令獲取容器名稱,然后使用`kubectl exec -it <podname> /bin/bash`或`kubectl exec -it <podname> bash`命令進(jìn)入容器,如果容器中沒有`/bin/bash`,可以嘗試使用`sh`
    2026-02-02
  • k8s配置文件用法詳解

    k8s配置文件用法詳解

    文章主要介紹了Kubernetes中的命名空間、資源操作、Deployment、Service、Ingress、Secret、PersistentVolumeClaim、StatefulSet等核心概念和配置文件的使用方法
    2025-10-10
  • Spark實現(xiàn)K-Means算法代碼示例

    Spark實現(xiàn)K-Means算法代碼示例

    這篇文章主要介紹了Spark實現(xiàn)K-Means算法代碼示例,簡單介紹了K-Means算法及其原理,然后通過具體實例向大家展示了用spark實現(xiàn)K-Means算法,需要的朋友可以參考下。
    2017-10-10
  • Kubernetes刪除ns實現(xiàn)方式(namespace)

    Kubernetes刪除ns實現(xiàn)方式(namespace)

    文章介紹了在Kubernetes中刪除無法正常刪除的命名空間(namespace)的幾種方法,首先,通過查看和修改命名空間的JSON文件來刪除`finalizers`,然后使用`kubectl proxy`命令來繞過Kubernetes的安全機制,最終成功刪除了命名空間
    2026-01-01
  • k8s自動化安裝腳本(二進(jìn)制)的操作步驟

    k8s自動化安裝腳本(二進(jìn)制)的操作步驟

    Kubernetes?k8s安裝腳本,非常好用,下面這篇文章主要給大家介紹了關(guān)于k8s自動化安裝腳本(二進(jìn)制)的操作步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 通過kubernetes部署nginx+php網(wǎng)站環(huán)境過程

    通過kubernetes部署nginx+php網(wǎng)站環(huán)境過程

    本文詳細(xì)介紹了如何在Kubernetes中部署Nginx+PHP網(wǎng)站環(huán)境,包括環(huán)境準(zhǔn)備、部署步驟、Service、ConfigMap、Ingress等配置,并提供了具體的YAML文件示例和命令,通過這些步驟,可以實現(xiàn)高可用、可擴展的Web服務(wù)
    2026-01-01

最新評論

葵青区| 长沙县| 乡宁县| 云阳县| 淳化县| 保德县| 宁强县| 通渭县| 桐庐县| 许昌县| 大丰市| 黄石市| 巴彦淖尔市| 卢湾区| 玉田县| 安龙县| 海口市| 托里县| 台南市| 孟州市| 黄浦区| 那曲县| 吴江市| 乌恰县| 赫章县| 仁化县| 昔阳县| 彭泽县| 荣昌县| 调兵山市| 云林县| 曲周县| 红安县| 商城县| 山西省| 自贡市| 平陆县| 陆丰市| 青浦区| 阿尔山市| 盘锦市|