ic商城網(wǎng)站建設(shè)同城引流用什么軟件
K8S調(diào)度
一、List-Watch 機(jī)制
controller-manager、scheduler、kubelet 通過 List-Watch 機(jī)制監(jiān)聽 apiserver 發(fā)出的事件,apiserver 通過 List-Watch 機(jī)制監(jiān)聽 etcd 發(fā)出的事件
1.scheduler 的調(diào)度策略
預(yù)選策略/預(yù)算策略:通過調(diào)度算法過濾掉不滿足條件的Node節(jié)點(diǎn),如果沒有滿足條件的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)來調(diào)度Pod
LeastRequestedPriority、BalancedResourceAllocation、ImageLocalityPriority
二、如何將Pod調(diào)度到指定節(jié)點(diǎn)
1)使用 nodeName 字段指定 Node節(jié)點(diǎn)名稱
2)使用 nodeSelector 指定 Node節(jié)點(diǎn)的標(biāo)簽
3)使用 節(jié)點(diǎn)/Pod 親和性
4)使用 污點(diǎn)+容忍
1.標(biāo)簽的管理
kubectl label <資源類型> <資源名稱> 標(biāo)簽key=標(biāo)簽value ##設(shè)置標(biāo)簽
kubectl label <資源類型> <資源名稱> 標(biāo)簽key=標(biāo)簽value --overwrite ##修改標(biāo)簽
kubectl label <資源類型> <資源名稱> 標(biāo)簽key- ##刪除標(biāo)簽kubectl get <資源類型> <資源名稱> --show-labels ##展示資源名稱下的所有標(biāo)簽
kubectl get <資源類型> -l 標(biāo)簽key[=標(biāo)簽value] ##列出符合條件的標(biāo)簽下的資源
2.親和性
2.1節(jié)點(diǎn)親和性
節(jié)點(diǎn)親和性(nodeAffinity):匹配指定的Node節(jié)點(diǎn)標(biāo)簽,將要部署的Pod調(diào)度到滿足條件的Node節(jié)點(diǎn)上
2.2Pod親和性
拓?fù)溆?#xff1a;具有相同標(biāo)簽的node節(jié)點(diǎn)
Pod親和性(podAffinity):匹配指定的Pod標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的Node節(jié)點(diǎn)處于 同一個(gè)拓?fù)溆?的Node節(jié)點(diǎn)上
Pod反親和性(podAntiAffinity):匹配指定的Pod標(biāo)簽,將要部署的Pod調(diào)度到與指定Pod所在的Node節(jié)點(diǎn)處于 不同的拓?fù)溆?的Node節(jié)點(diǎn)上
2.3親和性的策略
硬策略(required....):要強(qiáng)制性的滿足指定條件,如果沒有滿足條件的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)調(diào)度,即使沒有滿足條件的Node節(jié)點(diǎn),Pod依然會(huì)完成調(diào)度
3.污點(diǎn)(taint)
3.1配置
kubectl taint node <node名稱> key=value:effecteffect支持的選項(xiàng)NoSchedule(一定不會(huì)被調(diào)度)
PreferNoSchedule(盡量不被調(diào)度)
NoExecute(不會(huì)被調(diào)度,并驅(qū)逐節(jié)點(diǎn)上的Pod)
3.2污點(diǎn)刪除
kubectl taint node <node名稱> key[=value:effect]-
3.3查看節(jié)點(diǎn)有哪些污點(diǎn)
kubectl describe nodes <node名稱> | grep Taints
4.容忍 (tolerations)
4.1配置
spec:tolerations:- key: 污點(diǎn)鍵名operator: Equal|Existsvalue: 污點(diǎn)鍵值effect: NoSchedule|PreferNoSchedule|NoExecute
5.不可調(diào)度(cordon)
kubectl cordon <node名稱> ##設(shè)置為不可調(diào)度kubectl uncordon <node名稱> ##解除不可調(diào)度
6.不可調(diào)度 + 驅(qū)逐(drain)
kubectl drain <node名稱> --ignore-daemonsets --delete-emptydir-data --force
7.Pod的啟動(dòng)過程
1)通過 scheduler 根據(jù)調(diào)度算法選擇一臺(tái)在最適合的 Node節(jié)點(diǎn)運(yùn)行 Pod
2)拉取鏡像
3)掛載 存儲(chǔ)卷 等
4)創(chuàng)建并運(yùn)行容器
5)根據(jù)容器的探針探測(cè)結(jié)果設(shè)置 Pod 狀態(tài)
8.Pod的生命周期
生命周期狀態(tài) | 說明 |
---|---|
Pending | Pod已經(jīng)創(chuàng)建,但是處于包括Pod還未完成調(diào)度到Node節(jié)點(diǎn)的過程或者處于鏡像拉取過程中、存儲(chǔ)卷掛載失敗等情況 |
Running | Pod中至少有一個(gè)容器正在運(yùn)行 |
Succeeded | Pod中的所有容器都已經(jīng)成功退出,且不再重啟。(Completed) |
Failed | Pod中的所有容器都已終止,且至少有一個(gè)容器異常退出。(Error) |
Unknown | Master節(jié)點(diǎn)的 controller-manager 無法獲取 Pod 的狀態(tài),通常是因?yàn)?Master節(jié)點(diǎn)與 Pod 所在的 Node 節(jié)點(diǎn)通信失聯(lián)導(dǎo)致的 |
Pod遵循預(yù)定義的生命周期,起始于Pending階段,如果至少其中有一個(gè)主要容器正常啟動(dòng),則進(jìn)入Running階段,之后取決于Pod中是否有容器以失敗狀態(tài)結(jié)束而進(jìn)入Succeeded或者Failed階段。
三、K8S中排障方法
kubectl get pods 查看Pod運(yùn)行狀態(tài)
kubectl describe <資源類型|pods> <資源名稱> 查看資源的詳細(xì)信息和事件
kubectl logs <pod名稱> [-c <容器名>] [-p] 查看容器的進(jìn)程日志
kubectl exec -it <pod名稱> [-c <容器名>] sh|bash 進(jìn)入Pod容器,查看容器內(nèi)部相關(guān)狀態(tài)信息
kubectl debug -it <pod名稱> --image=<臨時(shí)容器的鏡像名> --target=<目標(biāo)容器> 在Pod中創(chuàng)建臨時(shí)容器進(jìn)入目標(biāo)容器進(jìn)行調(diào)試在Pod容器的宿主機(jī)使用nsenter轉(zhuǎn)換網(wǎng)絡(luò)等命名空間,直接在宿主機(jī)進(jìn)入目標(biāo)容器的命名空間進(jìn)行調(diào)試
查看k8s集群中相關(guān)信息
kubectl get nodes 查看Node節(jié)點(diǎn)的運(yùn)行狀態(tài)
kubectl get cs 查看Master組件的狀態(tài)
kubectl cluster-info 查看集群信息journalctl -u kubelet -f 跟蹤查看Kubelet進(jìn)程日志
看k8s集群中相關(guān)信息
kubectl get nodes 查看Node節(jié)點(diǎn)的運(yùn)行狀態(tài)
kubectl get cs 查看Master組件的狀態(tài)
kubectl cluster-info 查看集群信息journalctl -u kubelet -f 跟蹤查看Kubelet進(jìn)程日志