pod可以根據(jù)調(diào)度策略讓pod調(diào)度到想要的節(jié)點(diǎn)上運(yùn)行,或者不在某節(jié)點(diǎn)運(yùn)行。
1?查看現(xiàn)有節(jié)點(diǎn)運(yùn)行環(huán)境已有標(biāo)簽
$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
ops-master-1 Ready control-plane,master 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-master-1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
ops-master-2 Ready control-plane,master 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-master-2,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
ops-master-3 Ready control-plane,master 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-master-3,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
ops-worker-1 Ready <none> 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-1,kubernetes.io/os=linux
ops-worker-2 Ready <none> 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-2,kubernetes.io/os=linux
2 添加標(biāo)簽
#給節(jié)點(diǎn)ops-worker-1打上標(biāo)簽env=uat
$ kubectl label node ops-worker-1 env=uat
#給節(jié)點(diǎn)ops-worker-2打上標(biāo)簽env=prod
$ kubectl label node ops-worker-2 env=prod
#查看生成的標(biāo)簽
$ kubectl get node --show-labels | grep env
ops-worker-1 Ready <none> 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=uat,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-1,kubernetes.io/os=linux
ops-worker-2 Ready <none> 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=prod,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-2,kubernetes.io/os=linux
3?指定標(biāo)簽分發(fā)pod
3.1?創(chuàng)建pod時(shí)候指定調(diào)度節(jié)點(diǎn)
3.1.1 生成deployment文件
$ cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector: #添加此行
env: uat #指定標(biāo)簽
containers:
- name: nginx-test
image: nginx:latest
ports:
- containerPort: 80
3.1.2 執(zhí)行生成pod?
$ kubectl apply -f nginx.yaml
deployment.apps/nginx-test created
3.1.3 查看結(jié)果?
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-test-6895cc9759-989h8 1/1 Running 0 7s 172.25.78.78 ops-worker-1 <none> <none>
nginx-test-6895cc9759-slzcm 1/1 Running 0 7s 172.25.78.79 ops-worker-1 <none> <none>
3.2?運(yùn)行狀態(tài)pod遷移到指定節(jié)點(diǎn)
遷移過程相當(dāng)于刪除當(dāng)前節(jié)點(diǎn)pod,再在新node上生成pod,生產(chǎn)環(huán)境操作時(shí)需要謹(jǐn)慎。
3.2.1 調(diào)整pod運(yùn)行標(biāo)簽
$ kubectl edit deploy nginx-test
修改
nodeSelector:
env: uat
為
nodeSelector:
env: prod
deployment.apps/nginx-test edited
3.2.2 查看結(jié)果?
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-test-6b7c99bbb-8sfh7 1/1 Running 0 49s 172.25.50.140 ops-worker-2 <none> <none>
nginx-test-6b7c99bbb-hp62s 1/1 Running 0 67s 172.25.50.139 ops-worker-2 <none> <none>
?pod已經(jīng)切換至ops-worker-2節(jié)點(diǎn)上,且pod創(chuàng)建時(shí)間不足1分鐘。
4?刪除標(biāo)簽
$ kubectl label node ops-worker-1 env-
node/ops-worker-1 labeled
?查看節(jié)點(diǎn)上pod狀態(tài)。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-node1-5f9555db6b-db2cq 1/1 Running 0 12m 172.25.78.76 ops-worker-1 <none> <none>
nginx-node1-5f9555db6b-rq2pn 1/1 Running 0 12m 172.25.78.77 ops-worker-1 <none> <none>
刪除節(jié)點(diǎn)標(biāo)簽,正在運(yùn)行的pod不受影響 。
?查看節(jié)點(diǎn)標(biāo)簽。
$ kubectl get nodes --show-labels | grep ops-worker-1
ops-worker-1 Ready <none> 26d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-1,kubernetes.io/os=linux
刪除節(jié)點(diǎn)上的pod,驗(yàn)證pod重新調(diào)度是否正常。
$ kubectl delete pod nginx-node1-5f9555db6b-db2cq
pod "nginx-node1-5f9555db6b-db2cq" deleted
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-node1-5f9555db6b-ctbb9 0/1 Pending 0 59s <none> <none> <none> <none>
nginx-node1-5f9555db6b-rq2pn 1/1 Running 0 16m 172.25.78.77 ops-worker-1 <none> <none>
?pod無法調(diào)度運(yùn)行,因?yàn)檎{(diào)度策略中的nodeSelector調(diào)度策略還存在,因此生產(chǎn)環(huán)境在清理了node標(biāo)簽后,如無其他符合條件的可用節(jié)點(diǎn),一定要將運(yùn)行在節(jié)點(diǎn)上的pod中配置的標(biāo)簽清理掉,否則pod重啟后將無法調(diào)度。
5 多標(biāo)簽
同一個(gè)node同類型只能設(shè)置一個(gè), 重復(fù)設(shè)置會報(bào)錯(cuò):
$ kubectl get nodes --show-labels | grep env
ops-worker-2 Ready <none> 27d v1.21.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=prod,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-worker-2,kubernetes.io/os=linux
?看到ops-worker-2節(jié)點(diǎn)上已經(jīng)有env相關(guān)的標(biāo)簽了。文章來源:http://www.zghlxwxcb.cn/news/detail-795598.html
$ kubectl label node ops-worker-2 env=uat
error: 'env' already has a value (prod), and --overwrite is false
再次在?ops-worker-2節(jié)點(diǎn)上設(shè)置env相關(guān)的標(biāo)簽會提示標(biāo)簽已存在,無法重復(fù)設(shè)置同類型的標(biāo)簽。文章來源地址http://www.zghlxwxcb.cn/news/detail-795598.html
到了這里,關(guān)于Kubernetes實(shí)戰(zhàn)(十六)-k8s節(jié)點(diǎn)打標(biāo)簽的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!