您好,登錄后才能下訂單哦!
apiVersion: v1
kind: Pod
#創(chuàng)建的資源類型可以是,Deployment、Job、Ingress、Service等
metadata:
#包含Pod的一些meta信息,比如名稱、namespace、標簽等信息
name: ng1
#Podname
labels:
#標簽
app: web
spec:
containers:
- name: ng1
#容器name
image: hub.c.163.com/library/nginx
#鏡像拉取地址
imagePullPolicy: IfNotPresent
#鏡像拉取策略,Always,(無論本地是否有每次都拉取) Never,(每次都不拉取,即使本地沒有也不拉取) IfNotPresent(本地有就用,沒有就去拉)
ports:
#對外開放端口
- containerPort: 80
節(jié)點選擇器: nodeSelector、nodeName
基于node_name調(diào)度
apiVersion: v1
kind: Pod
metadata:
name: ng2
spec:
nodeName: cs25
#指定調(diào)度到"cs25" node節(jié)點上
containers:
- name: ng2
image: hub.c.163.com/library/nginx
基于node標簽來調(diào)度
kubectl label nodes cs25 disk=ssd
#給節(jié)點cs25 添加標簽
apiVersion: v1
kind: Pod
metadata:
name: ng2
spec:
nodeSelector:
disk: ssd
#表示要只有node節(jié)點上有"disk=ssd",才能被調(diào)度上去
containers:
- name: ng2
image: hub.c.163.com/library/nginx
節(jié)點親和性調(diào)度: nodeAffinity
apiVersion: v1
kind: Pod
metadata:
name: ng2
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
#requiredDuringSchedulingIgnoredDuringExecution 硬親和性 必須滿足親和性,滿足不調(diào)用
#preferredDuringSchedulingIgnoredDuringExecution 軟親和性 能滿足最好,不滿足也沒關(guān)系。
nodeSelectorTerms:
- matchExpressions:
- key: disk
operator: In
#表示上面那個字段必須包含下面兩個值, 還可以換成"NotIn"取反
values:
- jx
- ssd
#表示 只能調(diào)度到node有"disk=jx" 或"node=ssd"
containers:
- name: ng2
POD調(diào)度 podAffinity 和 podAntiAffinity
apiVersion: v1
kind: Pod
metadata:
name: ng2
labels:
app: nginx
spec:
containers:
- name: ng2
image: hub.c.163.com/library/nginx
---
apiVersion: v1
kind: Pod
metadata:
name: ng3
spec:
containers:
- name: ng3
image: hub.c.163.com/library/nginx
affinity:
podAntiAffinity:
#反親和,表示滿足條件的,讓兩個主機不在同一臺node主機上運行,換成"podAffinity:"功能相反
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["nginx"]}
topologyKey: kubernetes.io/hostname
#親和標準,表示node 都有hostname這個鍵名,及value 一樣我們就認為他們在同一臺節(jié)點
labelSelector : 選擇跟那組Pod親和
namespaces : 選擇哪個命名空間
topologyKey : 指定節(jié)點上的哪個鍵
假如在反親和場景"topologyKey: type" 這個node標簽所有主機都有,則第二臺容器無法被調(diào)度到任何主機
kubectl taint nodes cs25 key=value:NoSchedule
NoSchedule:僅影響調(diào)度過程,對現(xiàn)存的Pod對象不產(chǎn)生影響;
NoExecute:既影響調(diào)度過程,也影響顯著的Pod對象;不容忍的Pod對象將被驅(qū)逐
PreferNoSchedule: 表示盡量不調(diào)度
創(chuàng)建污點
kubectl taint node cs25 rongren=true:NoSchedule
#表示在cs25節(jié)點上創(chuàng)建一個 rongren的鍵 鍵值為"true",調(diào)度策略為NoSchedule
kubectl taint node cs25 rongren-
#刪除污點,指定鍵名加"-"即可
apiVersion: v1
kind: Pod
metadata:
name: ng6
spec:
containers:
- name: ng6
image: nginx
tolerations:
#設(shè)置容忍性
- key: "rongren"
operator: "Equal"
#如果操作符為Exists,那么value屬性可省略,表示key這個存在即通過,如果不指定operator,則默認為Equal,value一定要和設(shè)置的值相等,否則無法通過
value: "true"
effect: "NoSchedule"
#意思是這個Pod要容忍的有污點的Node的key是”rongren“ Equal true,效果是NoSchedule,
#tolerations屬性下各值必須使用引號,容忍的值都是設(shè)置Node的taints時給的值。
如果在設(shè)置node的Taints(污點)之前,就已經(jīng)運行了一些Pod,那么這些Pod是否還能繼續(xù)在此Node上運行? 這就要看設(shè)置Taints污點時的effect(效果)了。
如果effect的值是NoSchedule或PreferNoSchedule,那么已運行的Pod仍然可以運行,只是新Pod(如果沒有容忍)不會再往上調(diào)度。
而如果effect的值是NoExecute,那么此Node上正在運行的Pod,只要沒有容忍的,立刻被驅(qū)逐。
雖然是立刻被驅(qū)逐,但是K8S為了彰顯人性化,又給具有NoExecute效果的污點, 在容忍屬性中有一個可選的
tolerationSeconds字段,用來設(shè)置這些Pod還可以在這個Node之上運行多久,給它們一點寬限的時間,到時間才驅(qū)逐。
如果是以Pod來啟動的,那么Pod被驅(qū)逐后, 將不會再被運行,就等于把它刪除了。
如果是deployment/rc,那么刪除的pod會再其它節(jié)點運行。
如果是DaemonSet在此Node上啟動的Pod,那么也不會再被運行,直到Node上的NoExecute污被去除或者Pod容忍。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。