原文:https://blog.csdn.net/xhredeem/article/details/127687465
作者:xhredeem
來源:CSDN
默認情況下,k8s master 管理節點有污點標籤,默認是NoSchedule,即不會被調度。新創建的pod 會隨機選擇除了master管理節點的以外的node工作節點上創建。如果想要使某個新建pod在某個node節點創建,可以使用nodeName或者nodeSelector兩種方式
nodeName
這種方式適合某個pod在某臺主機上創建。以nginx爲例
[root@matser-0001 test]# kubectl apply -f nginx.pod.nodeName.example.yml
apiVersion: apps/v1 #api版本,沒什麼可說的 kind: Deployment # 資源類型爲Deployment metadata: #元數據,即資源的描述 name: nginx-deployment #Deployment資源的名稱, 可以自定義 labels: #Deployment的標籤定義 app: nginx #Deployment的標籤 spec: #Deployment資源對象的核心信息 replicas: 4 #定義pod副本的數量爲4 selector: #定義標籤選擇器 matchLabels: #定義匹配標籤 app: nginx #定義匹配的標籤具體是誰 template: #定義pod的模板 metadata: #定義pod的元數據,即pod的描述信息 labels: #定義pod的標籤 app: nginx #pod標籤的具體值 spec: #pod資源對象的核心信息 containers: #定義容器資源 - name: nginx #容器名 image: nginx #容器使用的鏡像 imagePullPolicy: IfNotPresent #鏡像拉取策略,默認是Always ports: #容器端口定義 - containerPort: 80 #暴露容器端口 nodeName: node-0002 # 選擇在主機名爲node-0002的主機上創建pod
結果顯示在node-0002上創建了4個nginx pod
nodeSelector
這種方式適合給打上特定標籤的node節點上創建pod。還是以nginx爲例,給node-0001標籤app=nginx
[root@matser-0001 test]# kubectl label nodes node-0001 app=nginx
[root@matser-0001 test]# kubectl
apply -f nginx.pod.nodeSelector.example.yml
apiVersion: apps/v1 #api版本,沒什麼可說的 kind: Deployment # 資源類型爲Deployment metadata: #元數據,即資源的描述 name: nginx-deployment #Deployment資源的名稱, 可以自定義 labels: #Deployment的標籤定義 app: nginx #Deployment的標籤 spec: #Deployment資源對象的核心信息 replicas: 4 #定義pod副本的數量爲4 selector: #定義標籤選擇器 matchLabels: #定義匹配標籤 app: nginx #定義匹配的標籤具體是誰 template: #定義pod的模板 metadata: #定義pod的元數據,即pod的描述信息 labels: #定義pod的標籤 app: nginx #pod標籤的具體值 spec: #pod資源對象的核心信息 containers: #定義容器資源 - name: nginx #容器名 image: nginx #容器使用的鏡像 imagePullPolicy: IfNotPresent #鏡像拉取策略,默認是Always ports: #容器端口定義 - containerPort: 80 #暴露容器端口 nodeSelector: #定義節點標籤選擇 app: nginx # 選擇在打了標籤app=nginx的主機上創建pod
結果顯示pod在點node-0001上創建