干货!K8S之pod创建流程+调度约束
文章目录一、pod创建过程二、调度方式(指定节点创建pod)一、pod创建过程Kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。用户使用create yaml创建pod,请求给apiseerver,apiserver.将yaml中的属性信息(metadata)写入etcdapiserver触发watch机制准备创建pod,信息转发给调度器,调度器使用调度算法
·
一、pod创建过程
Kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。
- 用户使用create yaml创建pod,请求给apiseerver,apiserver.将yaml中的属性信息(metadata)写入etcd
- apiserver触发watch机制准备创建pod,信息转发给调度器,调度器使用调度算法选择node,调度器将node信息给apiserver,apiserver_将绑定的node信息写入etcd
- apiserver又通过watch机制,调用kubelet,指定pod信息,触发docker run命 令创建容器
- 创建完成之后反馈给kubelet, kubelet又将pod的状态信息给apiserver,
apiserver又将pod的状态信息写入etcd。 - 其中kubectl get pods命令调用的时etcd_的信息
注意:图中有三次write
- 元信息
- pod分配到哪个node
- 记录pod状态
二、调度方式(指定节点创建pod)
两种调度方式:
nodeName:
用于将Pod调度到指定的Node名称上(跳过调度器直接分配)nodeSelector:
用于将Pod调度到匹配Label的Node上
示例1:nodeName
- 创建nginx的pod资源,指定分配到192.168.5.20节点上
###编写yaml文件
[root@k8s_master ~]# vim nginx1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: 192.168.5.20
containers:
- name: nginx
image: nginx:1.15
##执行创建
[root@k8s_master ~]# kubectl apply -f nginx1.yaml
pod/pod-example created
- 查看资源分配情况
##查看资源分配到哪个节点
[root@k8s_master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-example 1/1 Running 0 56s 172.17.50.3 192.168.5.20 <none>
##查看创建日志,发现直接跳过了调度器
[root@k8s_master ~]# kubectl describe pod pod-example
....省略部分
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulling 2m6s kubelet, 192.168.5.20 pulling image "nginx:1.15"
Normal Pulled 102s kubelet, 192.168.5.20 Successfully pulled image "nginx:1.15"
Normal Created 102s kubelet, 192.168.5.20 Created container
Normal Started 102s kubelet, 192.168.5.20 Started container
实例2:nodeSelector
先给node创建标签》》创建资源指定匹配该标签
- 给后端2个node节点设置标签,分别为abc=node1和abc=node2
##创建标签
[root@k8s_master ~]# kubectl label node 192.168.5.20 abc=node1
node/192.168.5.20 labeled
[root@k8s_master ~]# kubectl label node 192.168.5.30 abc=node2
node/192.168.5.30 labeled
##查看已经创建的标签
[root@k8s_master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
192.168.5.20 Ready <none> 23d v1.12.3 abc=node1,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.5.20
192.168.5.30 Ready <none> 23d v1.12.3 abc=node2,abcd=1,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.5.30
- 创建资源,指定分配到abc=node2标签上
##编写yaml文件
[root@k8s_master ~]# vim nginx2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example2
labels:
app: nginx
spec:
nodeSelector:
abc: node2
containers:
- name: nginx
image: nginx:1.15
##创建pod资源
[root@k8s_master ~]# kubectl create -f nginx2.yaml
- 查看资源分配情况
[root@k8s_master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-example2 1/1 Running 0 50s 172.17.32.2 192.168.5.30 <none>
##查看创建日志
[root@k8s_master ~]# kubectl describe pod pod-example2
.....省略部分内容
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 112s default-scheduler Successfully assigned default/pod-example2 to 192.168.5.30
Normal Pulling 110s kubelet, 192.168.5.30 pulling image "nginx:1.15"
Normal Pulled 98s kubelet, 192.168.5.30 Successfully pulled image "nginx:1.15"
Normal Created 98s kubelet, 192.168.5.30 Created container
Normal Started 98s kubelet, 192.168.5.30 Started container
三、pod资源状态解析
查看pod详细信息
kubectl describ <type> <name>
查看pod日志(Failed状态下)
kubectl logs <pod_name>
更多推荐
已为社区贡献10条内容
所有评论(0)