k8s之 pod調度
案例:確保Pod分配到具有SSD硬盤的節點上
第一步:給節點添加標簽
格式:kubectl label nodes <node-name> <label-key>=<label-value>
例如:kubectl label nodes k8s-node1 disktype=ssd
驗證:kubectl get nodes --show-labels
第二步:寫yaml 文件
vim pod-ssd.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
disk: ssd
第三步:利用yaml 部署pod
kubectl apply -f pod-ssd.yaml
驗證:
kubectl get pods -o wide
--------
刪除節點標簽:
kubectl label nodes node1.lab.example.com disktype-
**************
nodeSelector & nodeAffinity的區別:
nodeAffinity:節點親和類似于nodeSelector,可以根據節點上
的標簽來約束Pod可以調度到哪些節點。
相比nodeSelector:
? 匹配有更多的邏輯組合,不只是字符串的完全相等,支持的操作
符有:In、NotIn、Exists、DoesNotExist、Gt、Lt
? 調度分為軟策略和硬策略,而不是硬性要求
? 硬(required):必須滿足
? 軟(preferred):嘗試滿足,但不保證
********************
Taint(污點)與Tolerations(污點容忍)
基于節點標簽分配是站在Pod的角度上,通過在Pod上添加屬性,來確定Pod是否要調度到指定的Node上,其實我們也可以站在
Node的角度上,通過在Node上添加污點屬性,來避免Pod被分配到不合適的節點上。
Taints:避免Pod調度到特定Node上
Tolerations:允許Pod調度到持有Taints的Node上
案例:pod調度之污點
第一步:給節點添加污點
格式:kubectl taint node [node] key=value:[effect]
例如:kubectl taint node k8s-node1 gpu=yes:NoSchedule
驗證:kubectl describe node k8s-node1 |grep Taint
其中[effect] 可取值:
? NoSchedule :一定不能被調度
? PreferNoSchedule:盡量不要調度,非必須配置容忍
? NoExecute:不僅不會調度,還會驅逐Node上已有的Pod
第二步: 編寫yaml
vim pod-taints.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: test
image: busybox
tolerations:
- key: "gpu"
operator: "Equal"
value: "yes"
effect: "NoSchedule"
注:如果希望Pod可以被分配到帶有污點的節點上,要在Pod配置
中添加污點容忍(tolrations)字段
---
刪除污點:kubectl taint node [node] key:[effect]-
*****
nodeName:指定節點名稱,用于將Pod調度到指定的Node上,不經過調度器
vim pod-nodename.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
nodeName: k8s-node2
containers:
- name: web
image: nginx

浙公網安備 33010602011771號