k8s--Pod的调度约束

一、k8s创建pod工作流程

Kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。

在这里插入图片描述
1、用户创建pod的信息通过API Server存储到etcd中,etcd记录pod的元信息并将结果返回API Server

2、API Server告知调度器请求资源调度分配,调度器给后端打分,将优先级高的node与pod绑定并告知API Server

3、API Server将此信息写入etcd,得到etcd回复后调用kubelet创建pod

4、kubelet使用docker run创建pod内的容器,得到反馈信息后将容器信息告知API Server

5、API Server将收到的信息写入etcd并得到回馈

6、此时使用kubectl get pod就可以查看到信息了

二、调度方式

1、nodeName:

用于将Pod调度到指定的node名称上(跳过调度器直接分配)

2、nodeSelector:
用于将pod调度到匹配label的node上

两种方式都是通过yaml文件来实现

2.1 nodeName

编写yaml文件

[root@master test]# vim demo06.yaml

apiVersion: v1
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: 192.168.179.122
  containers:
  - name: nginx  
    image: nginx:1.15
[root@master test]# kubectl create -f demo06.yaml 
pod/pod-example created
[root@master test]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE              NOMINATED NODE
pod-example   1/1     Running   0          38s   172.17.27.4   192.168.179.122   <none>
[root@master test]# kubectl describe pod pod-example
Events:
  Type    Reason   Age   From                      Message
  ----    ------   ----  ----                      -------
  Normal  Pulling  111s  kubelet, 192.168.179.122  pulling image "nginx:1.15"
  Normal  Pulled   82s   kubelet, 192.168.179.122  Successfully pulled image "nginx:1.15"
  Normal  Created  82s   kubelet, 192.168.179.122  Created container
  Normal  Started  82s   kubelet, 192.168.179.122  Started container

清空所有pod

[root@master test]# kubectl delete -f .
[root@master test]# kubectl get pods
No resources found.

2.2 nodeSelector

[root@master test]# kubectl label nodes 192.168.179.123 cllt=a
node/192.168.179.123 labeled
[root@master test]# kubectl get nodes --show-labels
NAME              STATUS   ROLES    AGE   VERSION   LABELS
192.168.179.122   Ready    <none>   15d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.179.122
192.168.179.123   Ready    <none>   15d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,cllt=a,kubernetes.io/hostname=192.168.179.123
[root@master test]# vim demo07.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector: 
    kgc: b
  containers:
  - name: nginx
    image: nginx:1.15
[root@master test]# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
pod-example   1/1     Running   0          53s
[root@master test]# kubectl describe pod pod-example
Events:
  Type    Reason     Age   From                      Message
  ----    ------     ----  ----                      -------
  Normal  Scheduled  85s   default-scheduler         Successfully assigned default/pod-example to 192.168.179.123
  Normal  Pulling    84s   kubelet, 192.168.179.123  pulling image "nginx:1.15"
  Normal  Pulled     47s   kubelet, 192.168.179.123  Successfully pulled image "nginx:1.15"
  Normal  Created    47s   kubelet, 192.168.179.123  Created container
  Normal  Started    47s   kubelet, 192.168.179.123  Started container
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值