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

K8S Pod定向部署到指定節(jié)點的實現(xiàn)全過程

 更新時間:2025年08月25日 09:30:36   作者:沒事學AI  
K8S Pod定向部署通過節(jié)點標簽、親和性和污點三種機制實現(xiàn)資源適配、業(yè)務(wù)隔離與節(jié)點專屬化,適用于不同場景,選型建議為標簽用于基礎(chǔ)、親和性用于彈性、污點用于資源保護

一、K8S Pod定向部署的技術(shù)背景與核心價值

在Kubernetes(K8S)集群管理中,默認情況下Scheduler會根據(jù)節(jié)點資源利用率、健康狀態(tài)等因素自動調(diào)度Pod,但實際生產(chǎn)與學習場景中,常需將Pod部署到指定服務(wù)器(節(jié)點),核心應用場景與技術(shù)價值如下:

  1. 資源適配需求:部分應用(如AI訓練、大數(shù)據(jù)計算)需依賴GPU、高IO存儲等特殊硬件,需定向調(diào)度到具備對應資源的節(jié)點;
  2. 業(yè)務(wù)隔離需求:核心業(yè)務(wù)(如支付服務(wù))需部署到專用節(jié)點,避免與非核心業(yè)務(wù)共享資源導致性能波動;
  3. 運維管理需求:需將Pod部署到特定機房、特定網(wǎng)段的節(jié)點,滿足網(wǎng)絡(luò)策略、數(shù)據(jù)本地化等運維規(guī)范;
  4. 故障排查需求:測試環(huán)境中,需將待調(diào)試Pod部署到固定節(jié)點,便于日志收集與問題定位。

該技術(shù)是K8S節(jié)點調(diào)度體系的基礎(chǔ)能力,是從“自動調(diào)度”到“可控調(diào)度”的關(guān)鍵過渡,也是DevOps工程師、K8S運維人員必須掌握的核心技能之一。

二、K8S Pod定向部署的核心技術(shù)方案

K8S提供多種機制實現(xiàn)Pod定向部署,不同方案適用于不同場景,核心技術(shù)方案分為節(jié)點標簽與選擇器(Label & Selector)、節(jié)點親和性(Node Affinity)節(jié)點污點與容忍(Taint & Toleration) 三類,三者的適用場景與優(yōu)先級對比如下表:

技術(shù)方案核心原理適用場景調(diào)度優(yōu)先級
節(jié)點標簽與選擇器通過為節(jié)點打標簽,Pod通過nodeSelector指定標簽,僅調(diào)度到匹配標簽的節(jié)點簡單、固定的定向需求(如“部署到所有GPU節(jié)點”)低(僅作基礎(chǔ)篩選)
節(jié)點親和性基于規(guī)則表達式定義Pod與節(jié)點的親和/反親和關(guān)系,支持軟策略(preferredDuringSchedulingIgnoredDuringExecution)與硬策略(requiredDuringSchedulingIgnoredDuringExecution)復雜、靈活的定向需求(如“優(yōu)先部署到GPU節(jié)點,無GPU節(jié)點時可部署到CPU節(jié)點”)中(支持策略化調(diào)度)
節(jié)點污點與容忍節(jié)點通過taint設(shè)置“排斥規(guī)則”,Pod需通過toleration“容忍”該規(guī)則才能被調(diào)度到節(jié)點,常用于節(jié)點專屬化(如“僅允許數(shù)據(jù)庫Pod部署到該節(jié)點”)節(jié)點專屬、資源獨占場景(如“GPU節(jié)點僅允許AI訓練Pod部署”)高(直接控制節(jié)點訪問權(quán)限)

三、節(jié)點標簽與選擇器(Label & Selector)實現(xiàn)定向部署

3.1 技術(shù)原理

節(jié)點標簽(Label)是K8S中用于標識節(jié)點屬性的鍵值對(如hardware=gpu、env=prod),可通過kubectl命令為節(jié)點動態(tài)添加/刪除;Pod的nodeSelector字段會指定一組標簽,Scheduler僅會將Pod調(diào)度到所有標簽完全匹配的節(jié)點上。該方案是最基礎(chǔ)、最輕量的定向部署方式,僅支持“全匹配”邏輯,無靈活策略配置。

3.2 實際應用場景

適用于需求固定、無容錯的場景,例如:“將所有深度學習訓練Pod(依賴GPU)部署到標簽為hardware=gpu的節(jié)點”“將測試環(huán)境Pod僅部署到標簽為env=test的節(jié)點”。

3.3 實戰(zhàn)案例與代碼

步驟1:為目標節(jié)點添加標簽

假設(shè)集群中有一個節(jié)點名為node-01,需將其標記為“GPU節(jié)點”,執(zhí)行以下命令:

# 查看集群所有節(jié)點名稱
kubectl get nodes

# 為node-01添加標簽:hardware=gpu
kubectl label nodes node-01 hardware=gpu

# 驗證標簽是否添加成功(查看node-01的Labels字段)
kubectl describe node node-01 | grep Labels

步驟2:編寫Pod yaml文件(指定nodeSelector)

創(chuàng)建gpu-pod.yaml,定義一個依賴GPU的TensorFlow Pod,通過nodeSelector定向到hardware=gpu的節(jié)點:

apiVersion: v1
kind: Pod
metadata:
  name: tensorflow-gpu-pod
spec:
  containers:
  - name: tensorflow-container
    image: tensorflow/tensorflow:latest-gpu  # 依賴GPU的TensorFlow鏡像
    command: ["sleep", "3600"]  # 保持Pod運行1小時,便于驗證
  nodeSelector:  # 定向到標簽為hardware=gpu的節(jié)點
    hardware: gpu

步驟3:部署Pod并驗證

# 部署Pod
kubectl apply -f gpu-pod.yaml

# 查看Pod調(diào)度結(jié)果(觀察NODE字段是否為node-01)
kubectl get pods tensorflow-gpu-pod -o wide

步驟4:刪除節(jié)點標簽(可選)

若需取消節(jié)點的GPU標記,執(zhí)行以下命令:

kubectl label nodes node-01 hardware-  # 標簽鍵后加“-”表示刪除該標簽

四、節(jié)點親和性(Node Affinity)實現(xiàn)靈活定向部署

4.1 技術(shù)原理

節(jié)點親和性是對nodeSelector的增強,支持更復雜的匹配規(guī)則(如“包含”“不包含”“存在”),且分為兩種策略:

  • 硬親和性(requiredDuringSchedulingIgnoredDuringExecution):必須滿足規(guī)則才能調(diào)度(類似nodeSelector的強制匹配,但規(guī)則更靈活);
  • 軟親和性(preferredDuringSchedulingIgnoredDuringExecution):優(yōu)先滿足規(guī)則,若無匹配節(jié)點則調(diào)度到其他節(jié)點(支持權(quán)重配置,權(quán)重值1-100,值越大優(yōu)先級越高)。

該方案解決了nodeSelector“僅全匹配”的局限性,適用于需要“彈性定向”的場景。

4.2 實際應用場景

  1. 硬親和性:“Pod必須部署到具備storage=ssd標簽且屬于zone=shanghai區(qū)域的節(jié)點”;
  2. 軟親和性:“優(yōu)先將Web服務(wù)Pod部署到env=prodcpu=high的節(jié)點,若無則調(diào)度到其他節(jié)點”。

4.3 實戰(zhàn)案例與代碼

案例1:硬親和性(必須部署到上海區(qū)域的SSD節(jié)點)

創(chuàng)建ssd-pod-hard.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ssd-pod-hard
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:  # 硬親和性
        nodeSelectorTerms:
        - matchExpressions:
          - key: zone
            operator: In  # 匹配規(guī)則:zone的值在[shanghai]中
            values:
            - shanghai
          - key: storage
            operator: Exists  # 匹配規(guī)則:節(jié)點存在storage標簽(不限制值,只要有該標簽即可)

案例2:軟親和性(優(yōu)先部署到高CPU節(jié)點,無則 fallback)

創(chuàng)建web-pod-soft.yaml,配置軟親和性權(quán)重為80(優(yōu)先級較高):

apiVersion: v1
kind: Pod
metadata:
  name: web-pod-soft
spec:
  containers:
  - name: tomcat-container
    image: tomcat:9.0
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:  # 軟親和性
      - weight: 80  # 權(quán)重(1-100),值越大優(yōu)先級越高
        preference:
          matchExpressions:
          - key: cpu
            operator: In
            values:
            - high  # 優(yōu)先匹配cpu=high的節(jié)點

部署與驗證

# 部署兩個Pod
kubectl apply -f ssd-pod-hard.yaml -f web-pod-soft.yaml

# 查看調(diào)度結(jié)果:
# ssd-pod-hard僅會在zone=shanghai且有storage標簽的節(jié)點上運行
# web-pod-soft優(yōu)先在cpu=high節(jié)點運行,若無則在其他節(jié)點運行
kubectl get pods -o wide

五、節(jié)點污點與容忍(Taint & Toleration)實現(xiàn)節(jié)點專屬化

5.1 技術(shù)原理

節(jié)點污點(Taint)是節(jié)點對Pod的“排斥規(guī)則”,格式為key=value:effect,其中effect(作用)有三種:

  • NoSchedule:僅排斥新Pod調(diào)度到該節(jié)點,已運行的Pod不受影響;
  • NoExecute:排斥新Pod調(diào)度,且會驅(qū)逐已運行的、無對應容忍的Pod;
  • PreferNoSchedule:盡量排斥新Pod調(diào)度,若無其他節(jié)點可選則允許調(diào)度。

Pod的容忍(Toleration)是用于“抵消”節(jié)點污點的配置,只有具備對應容忍的Pod才能被調(diào)度到有污點的節(jié)點。該方案常用于“節(jié)點專屬化”,例如“GPU節(jié)點僅允許AI訓練Pod訪問”。

5.2 實際應用場景

  1. 專屬節(jié)點保護:為數(shù)據(jù)庫節(jié)點添加污點,僅允許數(shù)據(jù)庫Pod通過容忍調(diào)度到該節(jié)點;
  2. 故障節(jié)點隔離:為故障節(jié)點添加NoExecute污點,驅(qū)逐現(xiàn)有Pod并阻止新Pod調(diào)度,便于維護;
  3. 資源獨占:為GPU節(jié)點添加污點,避免普通Pod占用GPU資源。

5.3 實戰(zhàn)案例與代碼

步驟1:為目標節(jié)點添加污點(GPU節(jié)點專屬)

假設(shè)node-02是GPU專屬節(jié)點,添加污點gpu-only=true:NoSchedule(僅允許有對應容忍的Pod調(diào)度):

# 為node-02添加污點
kubectl taint nodes node-02 gpu-only=true:NoSchedule

# 查看節(jié)點污點(觀察Taints字段)
kubectl describe node node-02 | grep Taints

步驟2:編寫具備容忍的Pod yaml(AI訓練Pod)

創(chuàng)建ai-training-pod.yaml,配置容忍以匹配node-02的污點:

apiVersion: v1
kind: Pod
metadata:
  name: ai-training-pod
spec:
  containers:
  - name: pytorch-container
    image: pytorch/pytorch:latest
    command: ["sleep", "3600"]
  tolerations:  # 配置容忍,抵消節(jié)點污點
  - key: "gpu-only"
    operator: "Equal"  # 匹配規(guī)則:key和value與污點完全一致
    value: "true"
    effect: "NoSchedule"  # 匹配污點的effect

步驟3:驗證“無容忍Pod無法調(diào)度到污點節(jié)點”

創(chuàng)建一個無容忍的普通Pod(normal-pod.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: normal-pod
spec:
  containers:
  - name: alpine-container
    image: alpine:latest
    command: ["sleep", "3600"]

部署與驗證

# 部署兩個Pod
kubectl apply -f ai-training-pod.yaml -f normal-pod.yaml

# 查看調(diào)度結(jié)果:
# ai-training-pod(有容忍)會調(diào)度到node-02
# normal-pod(無容忍)會被node-02排斥,調(diào)度到其他節(jié)點
kubectl get pods -o wide

# (可選)刪除節(jié)點污點,恢復節(jié)點為普通節(jié)點
kubectl taint nodes node-02 gpu-only=true:NoSchedule-

六、三種定向部署方案的對比與選型建議

6.1 方案核心差異對比

對比維度節(jié)點標簽與選擇器節(jié)點親和性節(jié)點污點與容忍
匹配邏輯僅支持“全量標簽匹配”支持復雜規(guī)則(In/NotIn/Exists等)節(jié)點主動排斥,Pod被動容忍
策略靈活性無策略(強制匹配)支持硬/軟策略(強制/優(yōu)先)支持NoSchedule/NoExecute等排斥強度
適用場景簡單、固定的定向需求復雜、彈性的定向需求節(jié)點專屬化、資源保護
配置復雜度低(僅需nodeSelector)中(需配置affinity規(guī)則)中(需同時配置節(jié)點污點與Pod容忍)

6.2 選型建議

  1. 基礎(chǔ)定向需求:優(yōu)先選擇“節(jié)點標簽與選擇器”,配置簡單、性能開銷低;
  2. 靈活定向需求:選擇“節(jié)點親和性”,例如需要“優(yōu)先部署到A節(jié)點,無A則部署到B節(jié)點”的場景;
  3. 節(jié)點專屬/資源保護需求:選擇“節(jié)點污點與容忍”,例如GPU節(jié)點、數(shù)據(jù)庫節(jié)點的專屬化管理;
  4. 復雜場景組合:可結(jié)合多種方案,例如“污點+親和性”——先通過污點限制節(jié)點訪問,再通過親和性在允許訪問的節(jié)點中進一步篩選。

總結(jié)

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

相關(guān)文章

  • k8s中的多網(wǎng)卡方案multus

    k8s中的多網(wǎng)卡方案multus

    這篇文章主要介紹了k8s中的多網(wǎng)卡方案multus,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • K8S環(huán)境中Containerd運行時占用文件定位安全清理方法

    K8S環(huán)境中Containerd運行時占用文件定位安全清理方法

    容器運行時是Kubernetes最重要的組件之一,負責管理鏡像和容器的生命周期,這篇文章主要介紹了K8S環(huán)境中Containerd運行時占用文件定位安全清理方法的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • 阿里云oss對象存儲使用詳細步驟

    阿里云oss對象存儲使用詳細步驟

    本文主要介紹了阿里云oss對象存儲使用詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • K8s?ConfigMaps與Secret實現(xiàn)配置分離過程

    K8s?ConfigMaps與Secret實現(xiàn)配置分離過程

    本文介紹Kubernetes中ConfigMaps和Secret的創(chuàng)建方式及應用,涵蓋文件、literal、YAML方法,強調(diào)命名空間匹配與鍵名大小寫一致性,Secret類型如Opaque、dockerconfigjson用于加密配置,熱更新需注意envFrom等參數(shù)限制
    2025-08-08
  • K8s學習之Pod的定義及詳細資源調(diào)用案例

    K8s學習之Pod的定義及詳細資源調(diào)用案例

    Kubernetes將所有內(nèi)容抽象為資源,通過操作資源管理集群,核心單元是Pod,通過控制器管理Pod,資源管理分為命令式對象管理、命令式對象配置和聲明式對象配置,各有適用場景,需要的朋友可以參考下
    2024-09-09
  • 在Kubernetes上部署高可用MinIO集群方式

    在Kubernetes上部署高可用MinIO集群方式

    文章介紹了MinIO的分布式架構(gòu)及其在開發(fā)測試和生產(chǎn)環(huán)境中的應用,重點講解了分布式集群模式的核心組件和部署步驟,并通過驗證集群狀態(tài)來確保服務(wù)的高可用性和可靠性
    2025-11-11
  • 舉例詳解k8s是如何實現(xiàn)自動擴縮的

    舉例詳解k8s是如何實現(xiàn)自動擴縮的

    Kubernetes(簡稱k8s)是一個開源的,用于自動部署、擴展和管理容器化應用程序的系統(tǒng),這篇文章主要介紹了k8s是如何實現(xiàn)自動擴縮的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • K8s環(huán)境內(nèi)部的服務(wù)如何注冊到外部

    K8s環(huán)境內(nèi)部的服務(wù)如何注冊到外部

    文章主要討論了在K8s環(huán)境外部部署服務(wù)時如何與部署在K8s內(nèi)部的服務(wù)進行服務(wù)注冊,提出了使用LoadBalancer、Kong和NodePort三種方式,并詳細介紹了每種方式的實現(xiàn)步驟和注意事項
    2026-02-02
  • 最新青龍面板2.10.2搭建+XDD-PLUS的保姆級教程

    最新青龍面板2.10.2搭建+XDD-PLUS的保姆級教程

    這篇文章主要介紹了最新青龍面板2.10.2搭建+XDD-PLUS的保姆級教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • kubernetes(k8s)中Yaml文件詳解

    kubernetes(k8s)中Yaml文件詳解

    這篇文章主要給大家介紹了關(guān)于kubernetes(k8s)中Yaml文件詳解的相關(guān)資料,YAML是專門用來寫配置文件的語言,非常簡潔和強大,使用比json更方便,需要的朋友可以參考下
    2023-12-12

最新評論

阿尔山市| 庆城县| 云龙县| 通河县| 虎林市| 桓台县| 万安县| 沂水县| 固始县| 无为县| 延吉市| 安吉县| 富平县| 龙游县| 株洲县| 阿克陶县| 丰宁| 梧州市| 中卫市| 盘锦市| 汪清县| 吉首市| 宕昌县| 诸暨市| 泗阳县| 新丰县| 马龙县| 赣榆县| 石首市| 定安县| 互助| 红桥区| 民县| 沙坪坝区| 璧山县| 分宜县| 张家港市| 广德县| 额尔古纳市| 武川县| 军事|