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

K8S Pod定向部署到指定節(jié)點(diǎn)的實(shí)現(xiàn)全過(guò)程

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

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

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

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

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

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

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

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

三、節(jié)點(diǎn)標(biāo)簽與選擇器(Label & Selector)實(shí)現(xiàn)定向部署

3.1 技術(shù)原理

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

3.2 實(shí)際應(yīng)用場(chǎng)景

適用于需求固定、無(wú)容錯(cuò)的場(chǎng)景,例如:“將所有深度學(xué)習(xí)訓(xùn)練Pod(依賴(lài)GPU)部署到標(biāo)簽為hardware=gpu的節(jié)點(diǎn)”“將測(cè)試環(huán)境Pod僅部署到標(biāo)簽為env=test的節(jié)點(diǎn)”。

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

步驟1:為目標(biāo)節(jié)點(diǎn)添加標(biāo)簽

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

# 查看集群所有節(jié)點(diǎn)名稱(chēng)
kubectl get nodes

# 為node-01添加標(biāo)簽:hardware=gpu
kubectl label nodes node-01 hardware=gpu

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

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

創(chuàng)建gpu-pod.yaml,定義一個(gè)依賴(lài)GPU的TensorFlow Pod,通過(guò)nodeSelector定向到hardware=gpu的節(jié)點(diǎn):

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

步驟3:部署Pod并驗(yàn)證

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

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

步驟4:刪除節(jié)點(diǎn)標(biāo)簽(可選)

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

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

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

4.1 技術(shù)原理

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

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

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

4.2 實(shí)際應(yīng)用場(chǎng)景

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

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

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

創(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é)點(diǎn)存在storage標(biāo)簽(不限制值,只要有該標(biāo)簽即可)

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

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

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)先級(jí)越高
        preference:
          matchExpressions:
          - key: cpu
            operator: In
            values:
            - high  # 優(yōu)先匹配cpu=high的節(jié)點(diǎn)

部署與驗(yàn)證

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

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

五、節(jié)點(diǎn)污點(diǎn)與容忍(Taint & Toleration)實(shí)現(xiàn)節(jié)點(diǎn)專(zhuān)屬化

5.1 技術(shù)原理

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

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

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

5.2 實(shí)際應(yīng)用場(chǎng)景

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

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

步驟1:為目標(biāo)節(jié)點(diǎn)添加污點(diǎn)(GPU節(jié)點(diǎn)專(zhuān)屬)

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

# 為node-02添加污點(diǎn)
kubectl taint nodes node-02 gpu-only=true:NoSchedule

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

步驟2:編寫(xiě)具備容忍的Pod yaml(AI訓(xùn)練Pod)

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

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

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

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

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

部署與驗(yàn)證

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

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

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

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

6.1 方案核心差異對(duì)比

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

6.2 選型建議

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

    阿里云oss對(duì)象存儲(chǔ)使用詳細(xì)步驟

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

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

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

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

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

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

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

    舉例詳解k8s是如何實(shí)現(xiàn)自動(dòng)擴(kuò)縮的

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

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

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

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

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

    kubernetes(k8s)中Yaml文件詳解

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

最新評(píng)論

西藏| 筠连县| 兰州市| 建宁县| 宁波市| 调兵山市| 舒兰市| 樟树市| 咸阳市| 庆元县| 阆中市| 桓仁| 怀化市| 天气| 铁岭市| 蕲春县| 雅江县| 维西| 浦城县| 梁山县| 临湘市| 连州市| 通海县| 齐河县| 五台县| 永寿县| 吉安县| 牙克石市| 万年县| 湘西| 永昌县| 正阳县| 福建省| 抚远县| 张家川| 兴山县| 彭州市| 金华市| 永新县| 广汉市| 怀柔区|