Kubernetes----Pod定向调度

网友投稿 272 2022-09-10

Kubernetes----Pod定向调度

一、Pod调度简介

1.1 调度简介

在默认情况下,一个Pod在哪个Node节点上运行,是由scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的,但是在实际使用中,这并不满足要求,因为在很多情况下,我们想控制某些Pod在某些某些节点上,这就要求Kubernetes能对Pod进行调度,Kubernetes提供了四种调度方式

自动调度:由scheduler计算得出定向调度:NodeName,NodeSelector亲和性调度:NodeAffinity,PodAffinity,PodAntiAffinity污点(容忍)调度:Taints,Toleration

1.2 定向调度简介

二、定向调度实例

2.1 基于NodeName定向调度

编辑pod_nodename.yaml文件,定向约束到node2节点,如下:

apiVersion: v1kind: Namespacemetadata: name: dev---apiVersion: v1kind: Podmetadata: name: pod-nginx namespace: devspec: containers: - name: nginx image: nginx:1.17.1 nodeName:

使用如下命令创建资源

[root@master resource_manage]# kubectl apply -f pod_nodename.yamlnamespace/dev createdpod/pod-nginx created[root@master resource_manage]#

如下,查看可以发现此时已经调度到node2节点上了

[root@master resource_manage]# kubectl get pod -n dev -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-nginx 1/1 Running 0 10s 10.244.2.43 node2 [root@master resource_manage]#

使用如下命令删除资源

[root@master resource_manage]# kubectl delete -f pod_nodename.yamlnamespace "dev" deletedpod "pod-nginx" deleted[root@master resource_manage]#

2.2 基于节点标签使用nodeSelector定向调度

首先给node1和node2节点打不同的标签

[root@master resource_manage]# kubectl label nodes node1 nodeenv=testnode/node1 labeled[root@master resource_manage]# kubectl label nodes node2 nodeenv=demonode/node2 labeled[root@master resource_manage]# kubectl get node --show-labelsNAME STATUS ROLES AGE VERSION LABELSmaster Ready control-plane,master 10d v1.21.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=node1 Ready 10d v1.21.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,nodeenv=testnode2 Ready 10d v1.21.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,nodeenv=demo[root@master resource_manage]#

然后编辑pod_nodeselector.yaml文件,内容如下即将pod调度到nodeenv=demo的节点上即node2节点上

apiVersion: v1kind: Namespacemetadata: name: dev---apiVersion: v1kind: Podmetadata: name: pod-nginx namespace: devspec: containers: - name: nginx image: nginx:1.17.1 nodeSelector: nodeenv: demo

使用如下命令创建资源

[root@master resource_manage]# kubectl apply -f pod_nodeselector.yamlnamespace/dev createdpod/pod-nginx created[root@master resource_manage]#

如下,可以看到,pod如愿被调度到node2节点上

[root@master resource_manage]# kubectl get pod -n dev -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod-nginx 1/1 Running 0 105s 10.244.2.44 node2 [root@master resource_manage]#

最后使用如下命令删除资源

[root@master resource_manage]# kubectl delete -f pod_nodeselector.yamlnamespace "dev" deletedpod "pod-nginx" deleted[root@master resource_manage]#

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:公关界的007:城市品牌如何与城市共生长?宁波万科五一“闹”出个好案例!
下一篇:Kubernetes----Pod配置容器重启策略
相关文章

 发表评论

暂时没有评论,来抢沙发吧~