【架构理解】
k8s可以编排容器,也可以对服务器进行监管。在k8s,不会区分dev(开发人员)和ops(运维人员),而是devops(提倡开发时就要考虑运维,运维也要尽早开始考虑如何对应用进行运维监控)。
k8s采用了“控制面/数据面”架构,集群里的计算机称为“节点(node)”,可以是实体机,也可以是虚拟机,少量的节点作为控制面板执行几群的管理维护工作,即master node,简称为master。其他的大部分节点都被划在数据面,用来跑业务应用,叫做worker node,简称为worker或者node。node的数量非常多,构成了一个资源池,k8s就在池子里分配资源,调度应用。节点在集群中,可以根据需要随时做增加删除。通过使用命令kubectl get node:查看当前节点。如下可以看到只有master node,没有worker node,这是因为worker并不是必须的,集群规模小,工作负载少的时候,master可以承担worker的工作,就只有一个节点,它既作为master,也是worker;
下图中,可以看到平时我们都是通过kubectl执行命令,它就类似k8s的客户端工具,用来操作k8s,但它位于集群之外。
【节点内部的结构】
k8s内部有很多的模块,这些模块可以分为组件(component)和插件(addon)两类。组件是必不可少的,插件是锦上添花的附属功能,没有也不影响K8S的正常运行。
master节点:有4个组件,apiserver、etcd、scheduler、controller-manager。
apiserver:是k8s系统的唯一入口,对外公开了一些列的restful api,并且加上了验证、授权等功能,所有组件都只能和它通信,就是k8s的联络员;
etcd:是一个高可用的分布式key-value数据库,用来持久化存储系统里各种资源对象和状态,是k8s的配置管理员。它至于apiserver有直接联系,也就是任何组件想读取它数据都要通过apiserver;
scheduler:负责容器的编排工作,检查节点的资源状态,把POD调度到最合适的节点去运行,相当于部署人员。因为节点和pod信息都存储在etcd里,所以scheduler必须通过apiserver才能获得;
controller-manager:负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等,相当于运维监控人员。同样是通过apiserver才能或许etcd的信息。
这4个组件,已经被容器化了,运行在几群的pod里,可以用kubectl查看,注意要带上对应的namespace,这样可以清晰看到这个ns下有哪些pod。
worker节点:的组件有3个,kubelet、kube-proxy、container-runtime。这些组件搜集到信息后,就会发送给master节点的组件,这样master节点的组件才能做好管理调度。
kubelet:是worker node的代理,负责管理worker相关的绝大部分操作,只有它能与apiserver通信,实现状态报告、命令下发、启停容器等功能,相当于worker的小管家;
kube-proxy:是node的网络代理,只负责管理容器的网络通信,就是为pod转发TCP/UDP包;
container-runtime:是容器和镜像的实际使用者,在kubelet的指挥下创建容器,管理pod的生命周期,是干活的苦力。这里注意,由于k8s的定位是容器编排平台,所以她没有先定container-runtime必须是docker,完全可以替换成任何符合标准的其他容器运行时,比如containerd、CRI-O等,只不过实验中我们用的是docker。
这3个组件只有kube-proxy被容器化了,这是因为kubelet因为必须要管理整个节点,容器化会限制他的能力,所以它必须在container-runtime之外运行。
整体流程:
1、每个节点(node)上的kubelet会定期想apiserver上报节点状态,apiserver再存到etcd;
2、每个节点(node)上的kube-proxy实现了TCP/UDP反向台历,让容器对外提供稳定的服务;
3、scheduler通过apiserver得到当前的节点状态,调度POD,然后apiserver下发命令,给某个node的kubelet,kubelet调用container-runtime启动容器;
4、controller-manager也通过apiserver得到实时的节点状态,监控可能的异常情况,再使用相应的手段去调节恢复;
插件:有了以上组件,已经是一个可以正常运行的k8s集群了,但是要想达到好用易用的目的,还需要使用插件。使用minikube addons list,可以查看插件列表。常用的有DNS(集群里实现了域名解析,通过使用域名,而不使用ip来互相通信)和dashboard(输入命令minikube dashboard打开,就是界面化展示仪表盘)。
【本节整理】
标签:node,容器,kubernetes,chrono,worker,apiserver,k8s,节点 From: https://www.cnblogs.com/1234roro/p/16877111.html