k8s架构

173 阅读2分钟

架构及组件介绍

image.png

Master Node主要包含四个组件

image.png
  • 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主要包含三个组件

image.png

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获取实时的节点状态,监控可能的异常情况,然后使用相应的手段进行恢复