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资源时的详细信息