DevOps
CICD
K8s
Docker
Schedule a Pod as follows:
Name:nginx-kusc00101
Image:nginx
Nodeselector:disk=ssd
這題是個Pod Scheduling
的概念題,也就是如何將Pod
運行在適合的Node
上。考點在label
和nodeSelector
。那麼label
是甚麼呢?它其實就是一個key:value
的結構,以key
對應的value
來區隔它們屬性的異同。label
可以被附加到各種resource-objects
上,例如Node
、Pod
或Service
等。一個label
可以被增加到任意數量的物件上;一個物件也可以添加任意數量的label
。
有了label
後就可以利用Selector
將共同label
的物件一次選取,實現多維度的資源分組管理功能。Pod中定義label
其實很簡單,定義在Pod
的YAML就行了。或也可以透過指令方式。
常用的
label
包含release(版本)、environment(環境)、tier(架構)、partition(分區)、track(品質管控)等。
label
常見操作如下:
Pod label
$ kubectl get po --show-labels
label
的Pod
$ kubectl get po --selector <key>=<value>
Pod label
$ kubectl label po <pod-name> <key>=<value>
Pod label
$ kubectl label po <pod-name> <key>-
Node
的label
則可以透過以下命令新增:
$ kubectl label nodes <node-name> <key>=<value>
## 例如
$ kubectl label nodes g8node1 cpu=power
刪除label
的話則是:
$ kubectl label nodes <node-name> <key>=<value>-
## 例如
$ kubectl label nodes g8node1 cpu=power-
nodeSelector
則是將Pod
到某Node
上最簡單、直接的調度方式,直接利用label
選取即可。
那這題步驟其實就很簡單了:
Pod
nodeSelector
將Pod
調度到label
為disk=ssd
的Node
上
## 先透過kubectl run命令建立Pod基本YAML
$ kubectl run nginx-kusc00101 --image=nginx --restart=Never --dry-run=client -o yaml> q1.pod
## 將YAML 修改為以下
$ vim q1.pod
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx-kusc00101
name: nginx-kusc00101
spec:
containers:
- image: nginx
name: nginx-kusc00101
resources: {}
## nodeSelector選擇disk: ssd
nodeSelector:
disk: ssd
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
## 創立物件
$ kubectl apply -f q1.pod
K8s
中的Scheduling
方式非常多,但是今天只是第一道題,就先來個簡單的label
問題,其他的方式以後也會陸續介紹到。好啦,今天就到這囉~ 謝謝大家~
Labels and Selectors
Assign Pods to Nodes
You can find me on