Linux----K8s的pod资源中的调度约束与控制器详解

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

创建pod资源的原理图详解

原理图详解:

Write1:创建pod资源的元信息写入etcd数据库中,(pod名称,创建的时间,镜像名称...),

etcd具有自动发现功能,通过watch机制把创建pod资源的信息给scheduler(调度器)。

Write2:调度器绑定pod,通过评分机制分配给对应的node节点,并把pod的网络信息通过apiserver写入etcd数据库中。

Write3:apiserver通过watch机制将etcd存储要创建pod资源的基础信息给kubectl,该node节点的kubectl具有了该pod的基础信息,通过命令ducker run创建该容器,创建成功后反馈一条状态信息给apiserver,apiserver会把创建pod资源的状态信息写入etcd。

两种调度方式

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

nodeSelector:用于将Pod调度到匹配Label的Node上

操作演示,nodeName调度方式

编辑yaml文件
[root@localhost demo]# vim pod5.yaml

apiVersion: v1
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: 192.168.179.151
  containers:
  - name: nginx  
    image: nginx:1.15

创建pod资源
[root@localhost demo]# kubectl create -f pod5.yaml 
pod/pod-example created
[root@localhost demo]# kubectl get pods 
NAME          READY   STATUS              RESTARTS   AGE
pod-example   0/1     ContainerCreating   0          8s

查看该pod资源分配的节点
[root@localhost demo]# kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP       NODE              NOMINATED NODE
pod-example   0/1     ContainerCreating   0          37s   <none>   192.168.179.151   <none>

查看创建过程的详细信息

[root@localhost demo]# kubectl describe pod pod-example

操作演示,nodeSelector调度方式

删除原有的资源
[root@localhost demo]# kubectl delete -f pod5.yaml 
pod "pod-example" deleted
[root@localhost demo]# kubectl get pods
No resources found.

需要获取node上的NAME名称
[root@localhost demo]# kubectl get nodes
NAME              STATUS   ROLES    AGE   VERSION
192.168.179.151   Ready    <none>   16d   v1.12.3
192.168.179.152   Ready    <none>   16d   v1.12.3

给对应的node设置标签分别为kgc=a和kgc=b
[root@localhost demo]# kubectl label nodes 192.168.179.151 kgc=a
node/192.168.179.151 labeled
[root@localhost demo]# kubectl label nodes 192.168.179.152 kgc=b
node/192.168.179.152 labeled

查看标签
[root@localhost demo]# kubectl get nodes --show-labels
NAME              STATUS   ROLES    AGE   VERSION   LABELS
192.168.179.151   Ready    <none>   16d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kgc=a,kubernetes.io/hostname=192.168.179.151
192.168.179.152   Ready    <none>   16d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kgc=b,kubernetes.io/hostname=192.168.179.152

创建pod资源的yaml文件
[root@localhost demo]# vim pod6.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector: 
    kgc: b                #创建到该node节点上,192.168.179.152
  containers:
  - name: nginx
    image: nginx:1.15

创建pod
[root@localhost demo]# kubectl apply -f pod6.yaml
pod/pod-example created
[root@localhost demo]# kubectl get pods
NAME          READY   STATUS              RESTARTS   AGE
pod-example   0/1     ContainerCreating   0          4s
[root@localhost demo]# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
pod-example   1/1     Running   0          48s

验证是否创建到192.168.179.152节点中 

查看创建pod资源时的详细信息

 控制器:又称之为工

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值