架构及组件介绍
Master Node主要包含四个组件
- Api Server
是 master 也是整个 kubernetes 系统的唯一入口,对外提供了一系列的 Restful 接口,并且加上了认证、授权等功能,所有组件都只能直接和apiserver通信,可以说是kubernetes里的 联络员
- controller-manager
负责维护容器和节点等资源的状态,实现故障检测、应用迁移、服务伸缩等功能,可以说是 监控运维人员,同样的 controller-manager只能通过apiserver获取存储在etcd中的信息。
- schduler
负责容器的编排工作,检查节点的资源状态,把pod调度到最合适的节点上运行,可以说是 部署人员,因为节点状态和pod信息都存储在etcd中,schduler想要获取这些信息必须通过apiserver。
- etcd
是一个高可用的分布式 Key-Value数据库,用于持久化存储系统里的各种资源对象和状态,注意它也只能和apiserver直接通信,也就是说其他组件如果想要读写etcd的数据,只能通过apiserver;相当于 kubernetes 里的配置管理员
# 这四个组件都被容器化了, 可通过命令查看状态
kubectl get pod -n kube-system
Master里的apiserver、schduler等组件需要获取各个节点的信息才能做出管理决策,这个时候就需要和 Node 通信
Worker Node主要包含三个组件
kubelet
是Node的代理,负责管理Node相关的绝大部份操作,Node上只有它能够与apiserver通信,负责状态报告、命令下发、启停容器等功能,相当于Node上的一个 小管家
kube-proxy
kube-proxy是Node的网络代理,只负责网络通信,为pod转发 TCP/UDP 数据包,可以说是Node上的 小邮差
container-runtime
container-runtime是容器和镜像的实际使用者,在kubelet的指挥下创建容器、管理pod的生命周期,是真正干活的 苦力
kubernetes的工作流程
- 每个Node上的kubelet会定期向 apiserver上报节点状态,然后存储到etcd中
- 每个Node上的kube-proxy 实现了 TCP/DUP 的反向代理,对外提供稳定的服务
- schduler通过apiserver获取各个节点的状态,调度pod,通过apiserver下发给某个节点上的kubelet,然后kubelet调用container-runtime启动容器
- controller-manager通过apiserver获取实时的节点状态,监控可能的异常情况,然后使用相应的手段进行恢复