国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

建模外包網(wǎng)站推廣怎么做

建模外包網(wǎng)站,推廣怎么做,wordpress注冊(cè)qq郵箱配置,做網(wǎng)站所需知識(shí)調(diào)度 一、Kurbernetes的list-watch機(jī)制1.1 list-watch機(jī)制簡(jiǎn)介1.2 創(chuàng)建pod的流程(結(jié)合list-watch機(jī)制) 二、Scheduler的調(diào)度策略2.1 簡(jiǎn)介2.2 預(yù)選策略(predicate)2.3 優(yōu)選策略(priorities) 三、標(biāo)簽管理3.1…

調(diào)度

  • 一、Kurbernetes的list-watch機(jī)制
    • 1.1 list-watch機(jī)制簡(jiǎn)介
    • 1.2 創(chuàng)建pod的流程(結(jié)合list-watch機(jī)制)
  • 二、Scheduler的調(diào)度策略
    • 2.1 簡(jiǎn)介
    • 2.2 預(yù)選策略(predicate)
    • 2.3 優(yōu)選策略(priorities)
  • 三、標(biāo)簽管理
    • 3.1 查看標(biāo)簽的幫助信息
    • 3.2 查看標(biāo)簽信息
    • 3.3 添加標(biāo)簽
    • 3.4 修改標(biāo)簽
    • 3.5 刪除標(biāo)簽
    • 3.6 根據(jù)標(biāo)簽值查找資源對(duì)象
  • 四、kubernetes對(duì)Pod的調(diào)度策略
  • 五、定向調(diào)度
    • 5.1 調(diào)度策略簡(jiǎn)介
    • 5.2 調(diào)度實(shí)例
      • 5.2.1 通過(guò)nodeName字段
      • 5.2.2 通過(guò)nodeSelector字段
        • 配置
        • 測(cè)試
  • 六、親和性調(diào)度
    • 6.1 Node親和性
    • 6.2 Pod親和性
    • 6.3 Pod反親和性
    • 6.4 拓?fù)溆?/li>
      • 6.4.1 拓?fù)溆虻亩x
      • 6.4.2 如何判斷是否在同一個(gè)拓?fù)溆?#xff1f;
    • 6.5 親和性的策略
    • 6.6 親和性調(diào)度實(shí)例
      • 6.6.1 node親和性
      • 6.6.2 Pod親和性
      • 6.6.3 Pod反親和性
  • 六、污點(diǎn)和容忍
    • 7.1 節(jié)點(diǎn)設(shè)置污點(diǎn)
    • 7.2 Pod設(shè)置容忍
    • 7.3 調(diào)度實(shí)例
  • 八、Pod啟動(dòng)階段
    • 8.1 Pod啟動(dòng)過(guò)程
    • 8.2 Pod生命周期的5種狀態(tài)
  • 九、小結(jié)
    • 9.1 理論部分
    • 9.2 K8s常用故障排錯(cuò)流程/手段

一、Kurbernetes的list-watch機(jī)制

1.1 list-watch機(jī)制簡(jiǎn)介

Kubernetes 通過(guò) List-Watch 的機(jī)制進(jìn)行每個(gè)組件的協(xié)作,保持?jǐn)?shù)據(jù)同步,每個(gè)組件之間的設(shè)計(jì)實(shí)現(xiàn)了解耦。

list 機(jī)制,通過(guò)調(diào)用資源的list API羅列資源,基于HTTP短鏈接實(shí)現(xiàn);

watch機(jī)制,通過(guò)調(diào)用資源的watch API監(jiān)聽(tīng)資源變更事件,基于HTTP 長(zhǎng)鏈接實(shí)現(xiàn)

這種機(jī)制對(duì)于需要持續(xù)跟蹤 Kubernetes 集群中資源的狀態(tài)變化的應(yīng)用程序非常有用,例如自動(dòng)伸縮、監(jiān)控、日志收集等。

1.2 創(chuàng)建pod的流程(結(jié)合list-watch機(jī)制)

外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳

1)客戶端向apiserver發(fā)送創(chuàng)建Pod的請(qǐng)求,然后apiserver將請(qǐng)求信息存入到etcd中;

2)存入完成后,etcd會(huì)通過(guò)apiserver發(fā)送創(chuàng)建Pod資源的事件;

3)controller manager通過(guò)list-watch機(jī)制監(jiān)聽(tīng)apiserver發(fā)送出來(lái)的事件,并創(chuàng)建相關(guān)的Pod資源,創(chuàng)建完成后,通過(guò)apiserver將信存入到etcd中

4) etcd存入更新信息之后,再次通過(guò)apiserver發(fā)送調(diào)度Pod資源的事件;

5)scheduler通過(guò)list-watch機(jī)制監(jiān)聽(tīng)到apiserver發(fā)出的調(diào)度事件,通過(guò)調(diào)度算法,將Pod資源調(diào)度到合適的node節(jié)點(diǎn)上,調(diào)度完成后通過(guò)apiserver將調(diào)度完成后的信息更新到etcd中;

6)etcd收到更新信息后,再次向apiserver發(fā)送創(chuàng)建Pod的事件;

7)kubelet通過(guò)list-watch機(jī)制監(jiān)聽(tīng)apiserver發(fā)出的創(chuàng)建Pod的事件,然后根據(jù)事件信息,在相應(yīng)的node節(jié)點(diǎn)完成Pod的創(chuàng)建。

二、Scheduler的調(diào)度策略

在這里插入圖片描述

2.1 簡(jiǎn)介

Scheduler 是 kubernetes 的調(diào)度器,主要的任務(wù)是把定義的 pod 分配到集群的節(jié)點(diǎn)上

Sheduler 是作為單獨(dú)的程序運(yùn)行的,啟動(dòng)之后會(huì)一直監(jiān)聽(tīng) APIServer,獲取 spec.nodeName 為空的 pod,對(duì)每個(gè) pod 都會(huì)創(chuàng)建一個(gè) binding,表明該 pod 應(yīng)該放到哪個(gè)節(jié)點(diǎn)上。

調(diào)度規(guī)則

1)公平:如何保證每個(gè)節(jié)點(diǎn)都能被分配資源

2)資源高效利用:集群所有資源最大化被使用

3)效率:調(diào)度的性能要好,能夠盡快地對(duì)大批量的 pod 完成調(diào)度工作

4)靈活:允許用戶根據(jù)自己的需求控制調(diào)度的邏輯

調(diào)度的流程

1)首先是過(guò)濾掉不滿足條件的節(jié)點(diǎn),這個(gè)過(guò)程稱為預(yù)算策略(predicate);

2)然后對(duì)通過(guò)的節(jié)點(diǎn)按照優(yōu)先級(jí)排序,這個(gè)是優(yōu)選策略(priorities);

3)最后從中選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)。如果中間任何一步驟有錯(cuò)誤,就直接返回錯(cuò)誤。

2.2 預(yù)選策略(predicate)

預(yù)選策略過(guò)濾掉不滿足條件的節(jié)點(diǎn)的過(guò)程。

常見(jiàn)的算法描述
PodFitsResources節(jié)點(diǎn)上剩余的資源是否大于 pod 請(qǐng)求的資源。
PodFitsHost如果 pod 指定了 NodeName,檢查節(jié)點(diǎn)名稱是否和 NodeName 匹配。
PodFitsHostPorts節(jié)點(diǎn)上已經(jīng)使用的 port 是否和 pod 申請(qǐng)的 port 沖突。
PodSelectorMatches過(guò)濾掉和 pod 指定的 label 不匹配的節(jié)點(diǎn)。
NoDiskConflict已經(jīng) mount 的 volume 和 pod 指定的 volume 不沖突,除非它們都是只讀。

如果在 predicate 過(guò)程沒(méi)有合適的節(jié)點(diǎn),pod 會(huì)一直在 Pending 狀態(tài)`,不斷重試調(diào)度,直到有節(jié)點(diǎn)滿足條件。

2.3 優(yōu)選策略(priorities)

**優(yōu)選策略:**對(duì)通過(guò)的節(jié)點(diǎn)按照優(yōu)先級(jí)排序。

優(yōu)先級(jí)由一系列鍵值對(duì)組成,鍵是該優(yōu)先級(jí)項(xiàng)的名稱,值是它的權(quán)重(該項(xiàng)的重要性)。

常見(jiàn)的優(yōu)先級(jí)選項(xiàng)描述
LeastRequestedPriority通過(guò)計(jì)算CPU和Memory的使用率來(lái)決定權(quán)重,使用率越低權(quán)重越高。也就是說(shuō),這個(gè)優(yōu)先級(jí)指標(biāo)傾向于資源使用比例更低的節(jié)點(diǎn)。
BalancedResourceAllocation節(jié)點(diǎn)上 CPU 和 Memory 使用率越接近,權(quán)重越高。這個(gè)一般和上面的一起使用,不單獨(dú)使用。比如 node01 的 CPU 和 Memory 使用率 20:60,node02 的 CPU 和 Memory 使用率 50:50,雖然 node01 的總使用率比 node02 低,但 node02 的 CPU 和 Memory 使用率更接近,從而調(diào)度時(shí)會(huì)優(yōu)選 node02。
ImageLocalityPriority傾向于已經(jīng)有要使用鏡像的節(jié)點(diǎn),鏡像總大小值越大,權(quán)重越高。

通過(guò)算法對(duì)所有的優(yōu)先級(jí)項(xiàng)目和權(quán)重進(jìn)行計(jì)算,得出最終的結(jié)果。

三、標(biāo)簽管理

#基本語(yǔ)法
kubectl label <資源類型> <資源名稱> <標(biāo)簽鍵>=<標(biāo)簽值> [options]
字段功能
<資源類型>要添加或修改標(biāo)簽的資源類型如 pod、deployment、service 等
<資源名稱>要添加或修改標(biāo)簽的資源對(duì)象的名稱
<標(biāo)簽鍵>=<標(biāo)簽值>要添加或修改的標(biāo)簽及其對(duì)應(yīng)的值

3.1 查看標(biāo)簽的幫助信息

kubectl label --help

在這里插入圖片描述

3.2 查看標(biāo)簽信息

--show-labels選項(xiàng)

#基本語(yǔ)法
kubectl get <資源類型> [<資源名稱>]  [-n namespace] --show-labels 

舉個(gè)例子

#查看指定命名空間中所有pod的標(biāo)簽
kubectl get pods  -n my-ns --show-labels

在這里插入圖片描述

3.3 添加標(biāo)簽

使用 kubectl label 命令可以為資源對(duì)象添加標(biāo)簽,在命令中指定資源類型、名稱和要添加的標(biāo)簽及其值。

kubectl label <資源類型> <資源名稱> [-n namespce] key=value

key=value 表示要添加或修改的標(biāo)簽鍵值對(duì)。

鍵(key)是一個(gè)字符串,可以是任何你指定的名字;

值(value)是一個(gè)字符串,可以是任何你指定的值。

鍵和值之間使用等號(hào)(=)連接。

舉個(gè)例子

#為名為 nginx-test1 的 Pod 添加app=backend 和 version=1.15 兩個(gè)標(biāo)簽
kubectl label pod nginx-test1 -n my-ns app=backend version=1.15

在這里插入圖片描述

3.4 修改標(biāo)簽

使用--overwrite選項(xiàng) 可以修改已存在的標(biāo)簽值。

如果不使用該選項(xiàng),則只會(huì)添加新標(biāo)簽或更新值不同的標(biāo)簽。

#基本格式
kubectl label <資源類型> <資源名稱> <標(biāo)簽鍵>=<新標(biāo)簽值> --overwrite

舉個(gè)例子

kubectl label pod nginx-test1 -n my-ns app=1234 version=1222 --overwrite

在這里插入圖片描述

3.5 刪除標(biāo)簽

要?jiǎng)h除 Kubernetes 資源對(duì)象的標(biāo)簽,可以使用 kubectl label 命令,將標(biāo)簽值設(shè)置為空。

#基本格式
kubectl label <資源類型> <資源名稱> <標(biāo)簽鍵>-

使用 -(減號(hào))指示要?jiǎng)h除標(biāo)簽。

刪除標(biāo)簽不會(huì)刪除整個(gè)資源對(duì)象,只會(huì)刪除指定的標(biāo)簽鍵和值。

舉個(gè)例子

#刪除app標(biāo)簽
kubectl label pod nginx-test1 -n my-ns app-

在這里插入圖片描述

3.6 根據(jù)標(biāo)簽值查找資源對(duì)象

-l選項(xiàng),根據(jù)標(biāo)簽值查找 Kubernetes 資源對(duì)象。

標(biāo)簽選擇器支持邏輯操作符(例如逗號(hào)表示邏輯與)和等價(jià)性操作符(= 表示等于)。

#基本格式
kubectl get/describe <資源類型>  -l key[=value]

使用 kubectl get 命令和自定義選擇器查詢語(yǔ)句來(lái)進(jìn)行更復(fù)雜的標(biāo)簽篩選。

使用 kubectl describe 命令查找具有指定標(biāo)簽的資源對(duì)象的詳細(xì)信息。

舉個(gè)例子

kubectl get pod  -n my-ns -l app
kubectl get pod  -n my-ns -l version

在這里插入圖片描述

kubectl describe pod  -n my-ns -l name=test1

在這里插入圖片描述

四、kubernetes對(duì)Pod的調(diào)度策略

在 Kubernetes 中,調(diào)度 是指將 Pod 放置到合適的節(jié)點(diǎn)上,以便對(duì)應(yīng)節(jié)點(diǎn)上的 Kubelet 能夠運(yùn)行這些 Pod。

1)定向調(diào)度: 使用 nodeName 字段指定node節(jié)點(diǎn)名稱;使用 nodeSelector 字段指定node節(jié)點(diǎn)的標(biāo)簽;

2)親和性調(diào)度: 使用 節(jié)點(diǎn)/Pod 親和性(NodeAffinity、PodAffinity、PodAntiAffinity);

3)污點(diǎn)與容忍: 使用 節(jié)點(diǎn)設(shè)置污點(diǎn),結(jié)合 Pod設(shè)置容忍。

4)全自動(dòng)調(diào)度:運(yùn)行在哪個(gè)節(jié)點(diǎn)上完全由Scheduler經(jīng)過(guò)一系列的算法計(jì)算得出;

#補(bǔ)充,Pod和node的關(guān)系
Node 是 Kubernetes 集群中的工作節(jié)點(diǎn)
一個(gè) Node 可以運(yùn)行多個(gè) Pod,而一個(gè) Pod 只能運(yùn)行在一個(gè) Node 上
使用標(biāo)簽和選擇器可以管理 Node 和 Pod 之間的關(guān)系,從而實(shí)現(xiàn)靈活的調(diào)度和管理。

五、定向調(diào)度

5.1 調(diào)度策略簡(jiǎn)介

nodeName:指定節(jié)點(diǎn)名稱,用于將Pod調(diào)度到指定的Node上,不經(jīng)過(guò)調(diào)度器。

nodeSelector:在 Pod 定義文件的 spec 下的 nodeSelector 字段中設(shè)置一個(gè)標(biāo)簽選擇器,在 Pod 調(diào)度的時(shí)候,只有具有這些標(biāo)簽的 Node 才會(huì)被考慮用來(lái)運(yùn)行這個(gè) Pod。

5.2 調(diào)度實(shí)例

5.2.1 通過(guò)nodeName字段

配置清單文件

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:nodeName: node02containers:- name: my-containerimage: nginx

創(chuàng)建與測(cè)試

kubectl apply -f test2.yamlkubectl get pods 

在這里插入圖片描述

5.2.2 通過(guò)nodeSelector字段

配置

1.為在 Kubernetes 集群的節(jié)點(diǎn)設(shè)置標(biāo)簽

kubectl label nodes node01 mylabel=backend
kubectl label nodes node02 mylabel=frontend

在這里插入圖片描述

2.創(chuàng)建一個(gè) Deployment

定義 Pod 調(diào)度策略為使用 NodeSelector,在創(chuàng)建時(shí)選擇具有 mylabel=backend 的節(jié)點(diǎn)上運(yùn)行。

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:nodeSelector:mylabel: backendcontainers:- name: myapp-containerimage: nginx

在這里插入圖片描述

kubectl apply -f test1.yaml
測(cè)試
kubectl get pods -o wide

在這里插入圖片描述

所有的 Pod 都運(yùn)行在具有 mylabel=backend 的節(jié)點(diǎn)上。

六、親和性調(diào)度

官方文檔:將 Pod 指派給節(jié)點(diǎn) | Kubernetes

kubectl explain pod.spec.affinity

在這里插入圖片描述

鍵值運(yùn)算關(guān)系描述
Inlabel 的值某個(gè)列表中
NotInlabel 的值不在某個(gè)列表中
Gtlabel 的值大于某個(gè)值
Ltlabel 的值小于某個(gè)值
Exists某個(gè) label 存在
DoesNotExist某個(gè) label 不存在

6.1 Node親和性

節(jié)點(diǎn)親和性(nodeAffinity):匹配指定node節(jié)點(diǎn)的標(biāo)簽,將要部署的Pod調(diào)度到滿足條件的node節(jié)點(diǎn)上

6.2 Pod親和性

Pod親和性(podAffinity):匹配指定的Pod的標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的node節(jié)點(diǎn)處于同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上。

如果有多個(gè)node節(jié)點(diǎn)屬于同一個(gè)拓?fù)溆?#xff0c;通過(guò)Pod親和性部署多個(gè)Pod時(shí)則調(diào)度器會(huì)試圖將Pod均衡的調(diào)度到處于同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上

6.3 Pod反親和性

Pod反親和性(podAntiAffinity):匹配指定的Pod的標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的node節(jié)點(diǎn)處于不同的拓?fù)溆虻膎ode節(jié)點(diǎn)上

如果有多個(gè)node節(jié)點(diǎn)不在同一個(gè)拓?fù)溆?#xff0c;通過(guò)Pod反親和性部署多個(gè)Pod時(shí)則調(diào)度器會(huì)試圖將Pod均衡的調(diào)度到不在同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上

6.4 拓?fù)溆?/h3>

6.4.1 拓?fù)溆虻亩x

拓?fù)溆?/strong>(Topology Domain)是用于描述和控制Pod調(diào)度和部署的一種機(jī)制,它基于節(jié)點(diǎn)的拓?fù)湫畔?lái)限制Pod的調(diào)度位置,以滿足用戶定義的性能和資源需求。

使用拓?fù)溆蛱匦?#xff0c;可以在Pod的調(diào)度過(guò)程中指定節(jié)點(diǎn)的拓?fù)浼s束,這意味著可以定義一個(gè)Pod只能被調(diào)度到帶有某些特定標(biāo)簽的節(jié)點(diǎn)上,或者避免被調(diào)度到具有某些標(biāo)簽的節(jié)點(diǎn)上。

例如,可以指定要求一個(gè)Pod只能調(diào)度到同一個(gè)機(jī)架或同一個(gè)區(qū)域中的節(jié)點(diǎn)上,以滿足高可用性或數(shù)據(jù)局部性的需求。

6.4.2 如何判斷是否在同一個(gè)拓?fù)溆?#xff1f;

通過(guò)拓?fù)溆騥ey(topologyKey)判斷。

如果有其它node節(jié)點(diǎn)擁有,和指定Pod所在的node節(jié)點(diǎn),相同的拓?fù)溆騥ey的標(biāo)簽key和值,那么它們就屬于同一個(gè)拓?fù)溆颉?/p>

6.5 親和性的策略

#查看字段信息
kubectl explain pod.spec.affinity.xxAffinity

在這里插入圖片描述

字段字段名描述
required…硬策略強(qiáng)制性的滿足條件
如果沒(méi)有滿足條件的node節(jié)點(diǎn),Pod會(huì)處于Pending狀態(tài),直到有符合條件的node節(jié)點(diǎn)出現(xiàn)
preferred…軟策略非強(qiáng)制性的,會(huì)優(yōu)先選擇滿足條件的node節(jié)點(diǎn)進(jìn)行調(diào)度
即使沒(méi)有滿足條件的node節(jié)點(diǎn),Pod依然會(huì)完成調(diào)度

如果有多個(gè)軟策略選項(xiàng)的話,權(quán)重越大,優(yōu)先級(jí)越高。

如果把硬策略和軟策略合在一起使用,則要先滿足硬策略之后才會(huì)滿足軟策略。

6.6 親和性調(diào)度實(shí)例

6.6.1 node親和性

1.添加標(biāo)簽

kubectl label nodes node01 disk=ssd
kubectl label nodes node02 disk=dds

在這里插入圖片描述

配置清單文件

使用節(jié)點(diǎn)親和性調(diào)度規(guī)則,要求將 Pod 調(diào)度到標(biāo)簽為 “disk=ssd” 的節(jié)點(diǎn)。

vim pod1.yamlapiVersion: v1
kind: Pod
metadata:name: frontend-pod
spec:containers:- name: frontendimage: nginxaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: diskoperator: Invalues:- ssd

在這里插入圖片描述

創(chuàng)建并測(cè)試

kubectl apply -f pod1.yaml -n my-ns 
kubectl get pods -n my-ns -o wide

在這里插入圖片描述

6.6.2 Pod親和性

多個(gè)pod在一個(gè)節(jié)點(diǎn)

添加標(biāo)簽

kubectl label nodes node01 app=backend
kubectl label nodes node02 app=frontend

配置清單文件

apiVersion: v1
kind: Pod
metadata:name: frontend-pod
spec:containers:- name: frontendimage: nginxaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: NotInvalues:- frontendtopologyKey: "kubernetes.io/hostname"
---
apiVersion: v1
kind: Pod
metadata:name: backend-pod
spec:containers:- name: backendimage: mysqlaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: NotInvalues:- backendtopologyKey: "kubernetes.io/hostname"

創(chuàng)建并測(cè)試

kubectl apply -f pod2.yaml -n my-ns 
kubectl get pods -n my-ns -o wide

在這里插入圖片描述

Kubernetes 將會(huì)創(chuàng)建一個(gè)具有 Pod Anti-Affinity 配置的 Deployment,確保這三個(gè) Pod 盡量運(yùn)行在不同的節(jié)點(diǎn)上。

6.6.3 Pod反親和性

多個(gè)pod不在同一個(gè)節(jié)點(diǎn)

配置清單文件

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-app-containerimage: my-app-imageaffinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- my-apptopologyKey: "kubernetes.io/hostname"

在這里插入圖片描述

創(chuàng)建并測(cè)試

kubectl apply -f pod3.yaml -n my-ns 
kubectl get pods -n my-ns -o wide

在這里插入圖片描述

六、污點(diǎn)和容忍

通過(guò)使用污點(diǎn)和容忍機(jī)制,可以更精確地控制Pod的調(diào)度行為,確保Pod被調(diào)度到滿足特定條件的節(jié)點(diǎn)上。

7.1 節(jié)點(diǎn)設(shè)置污點(diǎn)

基本概念

在 Kubernetes 中,Node(節(jié)點(diǎn))上的污點(diǎn)(Taint)是用于標(biāo)記節(jié)點(diǎn)的屬性,以控制 Pod(容器)在節(jié)點(diǎn)上的調(diào)度行為。

通過(guò)給節(jié)點(diǎn)打上污點(diǎn),可以限制節(jié)點(diǎn)上可以調(diào)度的 Pod,從而實(shí)現(xiàn)更精細(xì)的調(diào)度策略。

污點(diǎn)由三個(gè)部分組成:

  • Key(鍵):標(biāo)記的名稱。
  • Value(值):標(biāo)記的值,可選。
  • Effect(作用):標(biāo)記的作用。
污點(diǎn)的組成格式如下:
key=value:effect
taint effect 支持的選項(xiàng)描述
NoSchedule一定不會(huì)被調(diào)度表示 k8s 將不會(huì)將 Pod 調(diào)度到具有該污點(diǎn)的 Node 上
PreferNoSchedule盡量不被調(diào)度表示 k8s 將盡量避免將 Pod 調(diào)度到具有該污點(diǎn)的 Node 上
NoExecute不會(huì)被調(diào)度,并驅(qū)逐Pod表示 k8s 將不會(huì)將 Pod 調(diào)度到具有該污點(diǎn)

相關(guān)命令

#給節(jié)點(diǎn)打上污點(diǎn)
kubectl taint node <node名稱> key=[value]:effect#覆蓋現(xiàn)有的污點(diǎn)
kubectl taint node <node名稱> key=[value]:effect --overwrite#刪除
kubectl taint node <node名稱> key[=value:effect]-kubectl describe nodes <node名稱> | grep Taints
##舉個(gè)例子##
#給名為 `node-1` 的節(jié)點(diǎn)打上鍵為 `special`,值為 `true` 的污點(diǎn),并設(shè)置作用為 `NoSchedule`:
kubectl taint node node-1 special=true:NoSchedule這將導(dǎo)致 Pod 除非聲明容忍該污點(diǎn),否則不會(huì)被調(diào)度到 `node-1` 節(jié)點(diǎn)上。

7.2 Pod設(shè)置容忍

Pod 可以使用容忍(Toleration)來(lái)聲明對(duì)污點(diǎn)的容忍,以允許在具有相應(yīng)污點(diǎn)的節(jié)點(diǎn)上調(diào)度。

配置清單格式

#Pod設(shè)置容忍 toleration
spec:tolerations:- key: 污點(diǎn)鍵名operator: Equal|Existsvalue: 污點(diǎn)鍵值effect: NoSchedule|PreferNoSchedule|NoExecute

相關(guān)命令

設(shè)置node節(jié)點(diǎn)不可調(diào)用
kubectl cordon <node名稱>
kubectl uncordon <node名稱>設(shè)置node節(jié)點(diǎn)不可調(diào)用并驅(qū)逐Pod
kubectl drain <node名稱> --ignore-daemonsets --force --delete-emptydir-data

7.3 調(diào)度實(shí)例

1.打上污點(diǎn)

kubectl taint node node01 key1=value1:NoSchedule

在這里插入圖片描述
在這里插入圖片描述

2.編寫(xiě)測(cè)試清單文件

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-appimage: my-app-imagetolerations:- key: "key1"operator: "Equal"value: "value1"effect: "NoSchedule"

在這里插入圖片描述

3.測(cè)試

kubectl apply -f pod4.yaml -n my-nskubectl get pod -o wide -n my-ns

在這里插入圖片描述

八、Pod啟動(dòng)階段

8.1 Pod啟動(dòng)過(guò)程

0)控制器創(chuàng)建Pod副本;

1)調(diào)度器scheduler根據(jù)調(diào)度算法選擇一臺(tái)最適合的node節(jié)點(diǎn)調(diào)度Pod;

2)kubelet拉取鏡像;

3)kubelet掛載存儲(chǔ)卷等;

4)kubelet創(chuàng)建并運(yùn)行容器;

5)kubelet根據(jù)容器的探針探測(cè)結(jié)果設(shè)置Pod狀態(tài)。

8.2 Pod生命周期的5種狀態(tài)

狀態(tài)描述
PendingPod已經(jīng)創(chuàng)建,但是Pod還處于包括未完成調(diào)度到node節(jié)點(diǎn)的過(guò)程或者還處于在鏡像拉取過(guò)程中、存儲(chǔ)卷掛載失敗的情況
RunningPod所有容器已被創(chuàng)建,且至少有一個(gè)容器正在運(yùn)行
SucceededPod所有容器都已經(jīng)成功退出,且不再重啟。(completed)
FailedPod所有容器都退出,且至少有一個(gè)容器是異常退出的。(error)
Unknownmaster節(jié)點(diǎn)的controller manager無(wú)法獲取到Pod狀態(tài)
通常是因?yàn)閙aster節(jié)點(diǎn)的apiserver與Pod所在node節(jié)點(diǎn)的kubelet通信失聯(lián)導(dǎo)致的

?

?

九、小結(jié)

9.1 理論部分

K8S是通過(guò) List-Watch 機(jī)制實(shí)現(xiàn)每個(gè)組件的協(xié)作
controller manager、scheduler、kubelet 通過(guò) List-Watch 機(jī)制監(jiān)聽(tīng) apiserver 發(fā)出的事件,apiserver 通過(guò) List-Watch 機(jī)制監(jiān)聽(tīng) etcd 發(fā)出的事件scheduler的調(diào)度策略:
預(yù)選策略/預(yù)算策略:通過(guò)調(diào)度算法過(guò)濾掉不滿足條件的node節(jié)點(diǎn);如果沒(méi)有滿足條件的node節(jié)點(diǎn),Pod會(huì)處于Pending狀態(tài),直到有符合條件的node節(jié)點(diǎn)出現(xiàn)
PodFitsResources、PodFitsHost、PodFitsHostPorts、PodSelectorMatches、NoDiskConflict優(yōu)選策略:根據(jù)優(yōu)先級(jí)選項(xiàng)為滿足預(yù)選策略條件的node節(jié)點(diǎn)進(jìn)行優(yōu)先級(jí)權(quán)重排序,最終選擇優(yōu)先級(jí)最高的node節(jié)點(diǎn)來(lái)調(diào)度Pod
LeastRequestedPriority、BalancedResourceAllocation、ImageLocalityPriority標(biāo)簽的管理操作:
kubectl label <資源類型> <資源名稱> 標(biāo)簽key=標(biāo)簽value
kubectl label <資源類型> <資源名稱> 標(biāo)簽key=標(biāo)簽value --overwrite
kubectl label <資源類型> <資源名稱> 標(biāo)簽key-kubectl get <資源類型> [資源名稱] --show-labels
kubectl get <資源類型> -l 標(biāo)簽key[=標(biāo)簽value]指定node節(jié)點(diǎn)調(diào)度Pod的方式:
1)使用 nodeName 字段指定node節(jié)點(diǎn)名稱
2)使用 nodeSelector 字段指定node節(jié)點(diǎn)的標(biāo)簽
3)使用 節(jié)點(diǎn)/Pod 親和性
4)使用 節(jié)點(diǎn)設(shè)置污點(diǎn) + Pod設(shè)置容忍親和性:
節(jié)點(diǎn)親和性(nodeAffinity):匹配指定node節(jié)點(diǎn)的標(biāo)簽,將要部署的Pod調(diào)度到滿足條件的node節(jié)點(diǎn)上Pod親和性(podAffinity):匹配指定的Pod的標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的node節(jié)點(diǎn)處于同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上如果有多個(gè)node節(jié)點(diǎn)屬于同一個(gè)拓?fù)溆?#xff0c;通過(guò)Pod親和性部署多個(gè)Pod時(shí)則調(diào)度器會(huì)試圖將Pod均衡的調(diào)度到處于同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上Pod反親和性(podAntiAffinity):匹配指定的Pod的標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的node節(jié)點(diǎn)處于不同的拓?fù)溆虻膎ode節(jié)點(diǎn)上如果有多個(gè)node節(jié)點(diǎn)不在同一個(gè)拓?fù)溆?#xff0c;通過(guò)Pod反親和性部署多個(gè)Pod時(shí)則調(diào)度器會(huì)試圖將Pod均衡的調(diào)度到不在同一個(gè)拓?fù)溆虻膎ode節(jié)點(diǎn)上如何判斷是否在同一個(gè)拓?fù)溆?#xff1f;
通過(guò)拓?fù)溆騥ey(topologyKey)判斷,如果有其它node節(jié)點(diǎn)擁有與指定Pod所在的node節(jié)點(diǎn)相同的拓?fù)溆騥ey的標(biāo)簽key和值,那么它們就屬于同一個(gè)拓?fù)溆蛴H和性的策略:
硬策略(required....):要強(qiáng)制性的滿足條件,如果沒(méi)有滿足條件的node節(jié)點(diǎn),Pod會(huì)處于Pending狀態(tài),直到有符合條件的node節(jié)點(diǎn)出現(xiàn)軟策略(preferred....):非強(qiáng)制性的,會(huì)優(yōu)先選擇滿足條件的node節(jié)點(diǎn)進(jìn)行調(diào)度,即使沒(méi)有滿足條件的node節(jié)點(diǎn),Pod依然會(huì)完成調(diào)度節(jié)點(diǎn)設(shè)置污點(diǎn) taint
kubectl taint node <node名稱> key=[value]:effectNoSchedule(一定不會(huì)被調(diào)度)  PreferNoSchedule(盡量不被調(diào)度)  NoExecute(不會(huì)被調(diào)度,并驅(qū)逐Pod)kubectl taint node <node名稱> key=[value]:effect --overwritekubectl taint node <node名稱> key[=value:effect]-kubectl describe nodes <node名稱> | grep TaintsPod設(shè)置容忍 toleration
spec:tolerations:- key: 污點(diǎn)鍵名operator: Equal|Existsvalue: 污點(diǎn)鍵值effect: NoSchedule|PreferNoSchedule|NoExecute設(shè)置node節(jié)點(diǎn)不可調(diào)用
kubectl cordon <node名稱>
kubectl uncordon <node名稱>設(shè)置node節(jié)點(diǎn)不可調(diào)用并驅(qū)逐Pod
kubectl drain <node名稱> --ignore-daemonsets --force --delete-emptydir-dataPod的啟動(dòng)過(guò)程:
0)控制器創(chuàng)建Pod副本
1)調(diào)度器scheduler根據(jù)調(diào)度算法選擇一臺(tái)最適合的node節(jié)點(diǎn)調(diào)度Pod
2)kubelet拉取鏡像
3)kubelet掛載存儲(chǔ)卷等
4)kubelet創(chuàng)建并運(yùn)行容器
5)kubelet根據(jù)容器的探針探測(cè)結(jié)果設(shè)置Pod狀態(tài)Pod生命周期的5種狀態(tài)
Pending    Pod已經(jīng)創(chuàng)建,但是Pod還處于包括未完成調(diào)度到node節(jié)點(diǎn)的過(guò)程或者還處于在鏡像拉取過(guò)程中、存儲(chǔ)卷掛載失敗的情況
Running    Pod所有容器已被創(chuàng)建,且至少有一個(gè)容器正在運(yùn)行
Succeeded  Pod所有容器都已經(jīng)成功退出,且不再重啟。(completed)
Failed     Pod所有容器都退出,且至少有一個(gè)容器是異常退出的。(error)
Unknown    master節(jié)點(diǎn)的controller manager無(wú)法獲取到Pod狀態(tài),通常是因?yàn)閙aster節(jié)點(diǎn)的apiserver與Pod所在node節(jié)點(diǎn)的kubelet通信失聯(lián)導(dǎo)致的(比如kubelet本身出故障)
總結(jié):Pod遵循預(yù)定義的生命周期,起始于Pending階段,如果至少其中有一個(gè)主容器正常運(yùn)行,則進(jìn)入Running階段,之后取決于Pod是否有容器以失敗狀態(tài)退出而進(jìn)入Succeeded或者Failed階段。

9.2 K8s常用故障排錯(cuò)流程/手段

kubectl get pods                                   查看Pod的運(yùn)行狀態(tài)和就緒狀態(tài)
kubectl describe <資源類型|pods> <資源名稱>        查看資源的詳細(xì)信息和事件描述,主要是針對(duì)沒(méi)有進(jìn)入Running階段的排查手段
kubectl logs <pod名稱> -c <容器名稱> [-p]          查看Pod容器的進(jìn)程日志,主要是針對(duì)進(jìn)入Running階段后的排查手段
kubectl exec -it <pod名稱> -c <容器名稱> sh|bash   進(jìn)入Pod容器查看容器內(nèi)部相關(guān)的(進(jìn)程、端口、文件等)狀態(tài)信息
kubectl debug -it <pod名稱> --image=<臨時(shí)容器的鏡像名> --target=<目標(biāo)容器>    在Pod中創(chuàng)建臨時(shí)容器進(jìn)入目標(biāo)容器進(jìn)行調(diào)試,主要是針對(duì)沒(méi)有調(diào)試工具的容器使用
nsenter -n --target <容器pid>                      在Pod容器的宿主機(jī)使用nsenter轉(zhuǎn)換網(wǎng)絡(luò)命名空間,直接在宿主機(jī)進(jìn)入目標(biāo)容器的網(wǎng)絡(luò)命名空間進(jìn)行抓包等調(diào)試kubectl get nodes           查看node節(jié)點(diǎn)運(yùn)行狀態(tài)
kubectl describe nodes      查看node節(jié)點(diǎn)詳細(xì)信息和資源描述
kubectl get cs              查看master組件的健康狀態(tài)
kubectl cluster-info        查看集群信息journalctl -u kubelet -f    跟蹤查看kubelet進(jìn)程日志
http://m.aloenet.com.cn/news/38145.html

相關(guān)文章:

  • 衡水網(wǎng)站建設(shè)服務(wù)廣告聯(lián)盟有哪些
  • 廣州移動(dòng) 網(wǎng)站建設(shè)今日特大新聞
  • 如何做高校的網(wǎng)站版面設(shè)計(jì)品牌宣傳策略
  • 做網(wǎng)站需要續(xù)費(fèi)嗎深圳seo優(yōu)化外包
  • 德州哪里有做網(wǎng)站推廣的深圳seo優(yōu)化排名優(yōu)化
  • 網(wǎng)站建設(shè)需要精通什么知識(shí)網(wǎng)絡(luò)推廣的優(yōu)勢(shì)有哪些
  • 個(gè)人可以做幾個(gè)網(wǎng)站嗎百度快照是什么意思?
  • 網(wǎng)站開(kāi)發(fā)與網(wǎng)站建設(shè)精準(zhǔn)獲客
  • 網(wǎng)站 建設(shè)網(wǎng)站市場(chǎng)調(diào)研分析
  • 廈門(mén)做網(wǎng)站個(gè)人蘇州做網(wǎng)站的專業(yè)公司
  • 網(wǎng)站建設(shè)需要什么資料智能營(yíng)銷方法
  • 松江新城投資建設(shè)集團(tuán)有限公司網(wǎng)站網(wǎng)絡(luò)營(yíng)銷第三版課本
  • 龍崗做網(wǎng)站的公司源碼之家
  • 網(wǎng)站建設(shè)到運(yùn)營(yíng)需要多少錢(qián)怎樣在百度上做廣告
  • 做品牌網(wǎng)站公司淄博網(wǎng)站營(yíng)銷與推廣
  • 臺(tái)州專業(yè)網(wǎng)站設(shè)計(jì)系統(tǒng)網(wǎng)絡(luò)推廣有哪幾種方法
  • 做網(wǎng)站品牌怎么注冊(cè)自己公司的網(wǎng)址
  • 舟山市城鄉(xiāng)建設(shè)委員會(huì)網(wǎng)站seo搜索引擎優(yōu)化是通過(guò)優(yōu)化答案
  • 什么網(wǎng)站可以做自考試題seo教育
  • 品牌網(wǎng)站建設(shè)多少錢(qián)品牌推廣策略分析
  • 網(wǎng)站怎樣才有流量seo是指搜索引擎營(yíng)銷
  • 深圳設(shè)計(jì)裝修公司哪家好百度關(guān)鍵詞優(yōu)化培訓(xùn)
  • 合肥最好的網(wǎng)站建設(shè)公司化妝培訓(xùn)
  • 上海松江做網(wǎng)站多少錢(qián)怎么做百度推廣平臺(tái)
  • 網(wǎng)站開(kāi)發(fā)流程百度文庫(kù)北京關(guān)鍵詞優(yōu)化報(bào)價(jià)
  • 天津網(wǎng)站建設(shè)價(jià)格培訓(xùn)課程安排
  • 小縣城做網(wǎng)站百度推廣平臺(tái)收費(fèi)標(biāo)準(zhǔn)
  • 外貿(mào)cms 網(wǎng)站app推廣聯(lián)盟平臺(tái)
  • 廣州手機(jī)軟件開(kāi)發(fā)制作初學(xué)seo網(wǎng)站推廣需要怎么做
  • 企業(yè)專屬網(wǎng)頁(yè)免費(fèi)刷seo