k8s---调度约束
文章目录调度约束过程调度方式示例1:以nodeName调度方式创建示例2:以nodeSelector调度方式创建调度约束过程从创建资源开始:●客户发起创建资源请求给api server;api server将请求过程写入到etcd数据库中,etcd会检查语法,语法正确就会记录在etcd中,并且会返回给api server,告诉用户刚刚创建资源的语法是否存在问题,要是存在问题就不会记录在etcd中,
调度约束过程
从创建资源开始:
●客户发起创建资源请求给api server;api server将请求过程写入到etcd数据库中,etcd会检查语法,语法正确就会记录在etcd中,并且会返回给api server,告诉用户刚刚创建资源的语法是否存在问题,要是存在问题就不会记录在etcd中,如果创建成功会继续下面的流程;
●因为各个组件之间是独立的所以想让各组件之间配合起来就依赖于watch机制;
●watch机制代替api server去连接调度器,调度器这时会计算应该将资源分配给哪台node节点,当计算出资源应该分配到哪个节点时,创建资源的node信息会绑定pod,形成一个地址信息给api server,api server会记录在etcd当中,etcd记录完成后,返回给api server,api server通过watch机制通知调度器去分配,同时watch机制会去看控制器,查看创建的是什么资源类型;之后wtach会带着创建的资源类型和分配的地址去找kubelet,kubelet会直接找docker加载资源引擎,当dokcer容器创建成功后会将状态信息返回给kubelet;kubelet将容器的状态信息返回给api server;api server会把状态信息写入到etcd中,etcd记录成功后会告诉api server信息记录成功,api server再次告诉kubelet所有的状态信息都记录成功,可以运行
调度方式
- nodeName用于将Pod调度到指定的Node名称上不经过调度器(跳过调度器直接分配)
- nodeSelector用于将Pod调度到匹配Label的Node上(需要给服务器后端的Node)
示例1:以nodeName调度方式创建
[root@master demo]# vim nodename.yaml ##编写nodename的资源
apiVersion: v1
kind: Pod
metadata:
name: pod-example ##名称
labels:
app: nginx
spec:
nodeName: 192.168.148.139 ##nodename指向node01地址
containers:
- name: nginx ##容器名
image: nginx:1.15
[root@master demo]# kubectl create -f nodename.yaml ##创建nodename资源
pod/pod-example created
[root@master demo]# kubectl get pods -o wide ##查看容器创建的节点
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-example 1/1 Running 0 118s 172.17.57.2 192.168.148.139 <none> ##创建在139的节点上
[root@master demo]# kubectl describe pod pod-example ##进入pod容器查看创建过程
[root@master demo]# kubectl delete -f . ##删除当前文件夹下创建的资源
pod "pod-example" deleted
示例2:以nodeSelector调度方式创建
[root@master demo]# kubectl label --help ##查看获取标签的帮助
Usage:
kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
[options]
[root@master demo]# kubectl get nodes ##查看节点信息
NAME STATUS ROLES AGE VERSION
192.168.148.139 Ready <none> 6d9h v1.12.3
192.168.148.140 Ready <none> 6d8h v1.12.3
给对应的node设置标签分别为kgc=a和kgc=b
[root@master demo]# kubectl label nodes 192.168.148.139 kgc=a ##给node1节点打上kgc=a的标签
node/192.168.148.139 labeled
[root@master demo]# kubectl label nodes 192.168.148.140 kgc=b ##给node2节点打上kgc=b的标签
node/192.168.148.140 labeled
[root@master demo]# kubectl get nodes --show-labels ##查看标签
[root@master demo]# vim pod6.yaml ##编写nodeSelector文件
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeSelector: ##node类型
kgc: b ##资源创建在标签为b的节点上
containers:
- name: nginx
image: nginx:1.15
[root@master demo]# kubectl create -f pod6.yaml ##创建资源
pod/pod-example created
[root@master demo]# kubectl get pods -o wide ##查看资源创建对应的节点
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-example 1/1 Running 0 17s 172.17.64.2 192.168.148.140 <none> ##创建在b标签对应的140,node02的节点上
[root@master demo]# kubectl describe pod pod-example ##查看详细信息
更多推荐
所有评论(0)