⑨. 程序员:调用CLI(命令行)告诉master,我们现在要部署一个tomcat应用步骤如下: 掌握
程序员的所有调用都先去master节点的网关api-server。这是matser的唯一入口(mvc模式中的c层)
收到的请求先交给master的api-server。由api-server交给controller-mannager进行控制
controller-mannager进行应用部署
controller-mannager会生成一次部署信息。 tomcat --image:tomcat6 --port 8080,真正不部署应用
部署信息被记录在etcd中
scheduler调度器从etcd数据库中,拿到要部署的应用,开始调度。看哪个节点合适
scheduler把算出来的调度信息再放到etcd中
每一个node节点的监控kubelet,随时和master保持联系的(给api-server发送请求不断获取最新数据),所有节点的kubelet就会从master
假设node2的kubelet最终收到了命令,要部署。其他的node节点也会收到命令,但是node2最终部署,所以其他node节点丢弃这次部署的操作
kubelet就自己run一个应用在当前机器上,随时给master汇报当前应用的状态信息,分配ip
node和master是通过master的api-server联系的
每一个机器上的kube-proxy能知道集群的所有网络。只要node访问别人或者别人访问node,node上的kube-proxy网络代理自动计算进行流量转发
⑤. 部署组件交互原理
想让k8s部署一个tomcat?
0开机默认所有节点的kubelet、master节点的scheduler(调度器)、controller-manager(控制管理器)一直监听master的api-server发来的事件变化(while)
1.程序员使用命令行工具:kubectl
kubectl create deploy tomcat --image=tomcat8(告诉master让集群使用tomcat8镜像,部署一个tomcat应用)
2.kubectl命令行内容发给api-server,api-server保存此次创建信息到etcd
3etcd给api-server上报事件,说刚才有人给我里面保存一个信息。(部署Tomcat[deploy])
4controller-manager监听到api-server的事件,是 (部署Tomcat[deploy])
5controller-manager 处理这个 (部署Tomcat[deploy])的事件。controller-manager会生成Pod的部署信息pod信息
6controller-manager 把Pod的信息交给api-server,再保存到etcd
7etcd上报事件pod信息给api-server。
8scheduler专门监听 pod信息 ,拿到 pod信息的内容,计算,看哪个节点合适部署这个Podpod调度过后的信息(node: node-02)
9scheduler把 pod调度过后的信息(node: node-02)交给api-server保存给etcd
10etcd上报事件pod调度过后的信息(node: node-02),给api-server
11其他节点的kubelet专门监听 pod调度过后的信息(node: node-02) 事件,集群所有节点kubelet从api-server就拿到了 pod调度过后的信息(node: node-02) 事件
12每个节点的kubelet判断是否属于自己的事情;node-02的kubelet发现是他的事情
13node-02的kubelet启动这个pod。汇报给master当前启动好的所有信息