一、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