kubernetes中master中比较重要的组件
1)apiserver
k8s的重要组件之一,作为整个k8s集群的大脑,负责对外提供kubernetes的API服务,Master组件都通过调用APIserver提供的接口来实现各自的功能,生产环境一般也会对apiserver做高可用,多master架构。比如,deplotment Controller就通过apiserver来监控其管理的各个pod节点。
2)scheduler
监听apiserver的新建pod副本信息,并通过调度算法计算一个合适node节点进行,然后将pod信息绑定到目标Node节点上,并把信息写入到etcd键值数据库中。绑定以后,Node上的kubelet就会接管pod接下来的声明周期管理。
3)contronller-manager
维护整个集群的状态,故障检测,自动扩展,滚动更新等等。每个集群都有对应的controller,这些controller通过apiserve监控节点资源状态,而这些控制器就是通过controller-manager进行管理。
4)etcd
k8s的重要组件,为kubernetes提供一个高可用键值数据库,保存kubernetes集群资源中的所有的配置和集群资源对象的状态。所有的变更通过apiserver处理完以后存储在etcd键值库中,生产上一般使用多台组集群,一般为3,5等奇数台,偶数台会产生集群脑裂的问题。
比如我新建一个Nginx的pod,首先通过kubectl命令或者web界面或者一些其他的api接口,调用APIserver新建pod,然后scheduler接受到APIserver想新建pod的需求后,就在通过算法计算我后端的那个Node节点比较合适,一旦绑定,把相关信息写入etcd键值库后,通知Node的kubelet组件,然后kubelet按照要求新建好pod,controller-manager通过pod的控制器进行维护nginx的pod状态等等
kubernetes中node中比较重要的组件
1)kubelet
负责pod的生命周期管理,监视分配给当前节点的pod,同时还与Master节点维护和管理Node上的所有容器,实现集群管理的基本功能。简单来说kublet就是集群中的agent端,负责让pod的运行资源与期望的状态一致
2)kube-proxy
实现service通信和负载均衡的重要组件,将service的请求转发的后端节点的pod上。
3)docker
pod的运行环境,也可以是rkt容器,一个pod可以是一个或者一组容器。
kubernetes中其他比较重要的组件
1)CNI
一个标准的容器网络接口,支持k8s,docker等,由于其实一种标准库,所以,CNI的规范实现相对来说较为简单,支持k8s的各种网络模型。
2)coreDNS
实现了集群内部通过服务器名进行访问的解析。用于服务发现