Kubernetes 分派 Pod 到指定節點
學習利用 Kubernetes nodeSelector 來限制 pod 的開啟節點
文章目錄
目前 Kubernetes 支援 nodeSelector
、affinity
、anti-affinity
來限制每個 pod 能夠在哪些節點上開啟,本文會介紹如何利用 nodeSelector 來達到此功能
$ kubectl get nodes --show-labels
NAME STATUS AGE LABELS
192.168.1.1 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.1
192.168.1.2 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.2
192.168.1.3 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.3
$ kubectl label node <node name> <label>=<value>
$ kubectl label node 192.168.1.1 networkSpeed=high
$ kubectl label node 192.168.1.2 networkSpeed=high
$ kubectl label node 192.168.1.2 networkSpeed=low
確認 labels 是否有更新上去
$ kubectl get nodes --show-labels
NAME STATUS AGE LABELS
192.168.1.1 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.1,networkSpeed=high
192.168.1.2 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.2,networkSpeed=high
192.168.1.3 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.3,networkSpeed=low
可以使用 <label>-
來移除錯誤的標籤 (重點在後面的 -
號)。
$ kubectl label node 192.168.1.1 networkSpeed-
記得利用雙引號將值括起來。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 3
template:
metadata:
name: nginx
namespace: default
labels:
env: beta
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
nodeSelector:
networkSpeed: "high"
現在我們可以看到 Pod 都跑在有 networkSpeed=high
標籤的節點上了。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-test-3190407156-4g8k5 1/1 Running 0 17s 172.16.88.2 192.168.1.2
nginx-test-3190407156-837ad 1/1 Running 0 17s 172.16.88.3 192.168.1.2
nginx-test-3190407156-o95l8 1/1 Running 0 17s 172.16.84.2 192.168.1.1
- 把 yaml 檔內設定的標籤用雙引號
""
刮起來 (https://github.com/kubernetes/kubernetes/issues/23251)
unable to decode "nginx.yaml": [pos 1742]: json: expect char '"' but got char 't'
相關文章
- 從 Google Kubernetes Engine 移除節點
- Kubernetes 兩步安裝一次上手
- Kubernetes Service 深度剖析 - 標籤對於 Service 的影響
- Kubernetes Service 深度剖析 - 存取路徑差異
- Kubernetes Service 概念詳解
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email