【k8s系列】三、k8s基本架构

1,285 阅读3分钟

kubernetes的基本架构

kubernetes 采用 “控制面/数据面”(Control Plane / Data Plane)架构,集群中计算机被称为“节点”(node),可以是实体机器,也可以是虚拟机器,少量的节点用作控制面来执行集群的维护工作,其他的大部分节点都被规划为数据面,用来跑业务应用。

控制面的节点在kubernetes里叫做 Master Node, 一般简称为Master,它是整个集群的重要部分,相当于kubernetes的大脑和心脏。

数据面的节点在kubernetes里叫做 Woker Node, 一般简称为Worker或者Node,相当于kubernetes的手和脚,在Master的指挥下干活。

image.png

Node的数量非常多,构成了一个资源池,kubernetes就在这个池里分配资源,调度应用。
可以使用命令 kubectl get node 来查看 Kubernetes 的节点状态

kubectl get node

节点内部结构

分为组件(Component)和插件(Addon)
组件实现了Kubernetes的核心功能特性,没有这些组件Kubernetes就无法启动
插件则是Kubernetes的一些附加功能,属于“锦上添花”,不安装也不会影响Kubernetes的正常运行

Master 里的组件有哪些

Master 里有 4 个组件,分别是apiserver、etcd、scheduler、controller-manager

image.png

apiserver

  • 是Master 节点,同时也是整个 Kubernetes 系统的唯一入口
  • 对外公开了一系列的 RESTful API,并且加上了验证、授权等功能,所有其他组件都只能和它直接通信
  • 是 Kubernetes 里的联络员

etcd

  • 是一个高可用的分布式 Key-Value 数据库,用来持久化存储系统里的各种资源对象和状态
  • Kubernetes里的配置管理员
  • 只与apiserver有直接联系,任何其他组件想要读写etcd里的数据都必须经过apiserver

scheduler

  • 负责容器的编排工作
  • 检查节点的资源状态,把Pod调度到最适合的节点上运行
  • Kubernetes里的部署人员
  • 因为节点状态和Pod信息都存储在etcd里,所以scheduler必须通过apiserver才能获得

controller-manager

  • 负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等功能
  • Kubernetes里的监控运维人员
  • 必须通过apiserver获得存储在etcd里的信息,才能够实现对资源的各种操作

这4个组件都被容器化了,运行在集群的Pod里,使用kubectl get pod -n kube-system查看它们的状态

kubectl get pod -n kube-system

Node 里的组件有哪些

Node 里有 3 个组件,分别是 kubelet、kube-proxy、container-runtime

image.png

kubelet

  • Node的代理,管理Node相关的绝大部分操作
  • Node上只有它能够与apiserver通信,实现状态报告、命令下发、启停容器等功能
  • Node上的一个“小管家”

kube-proxy

  • 是Node的网络代理
  • 只负责管理容器的网络通信,简单来说就是为Pod转发TCP/UDP数据包
  • Node上专职的“小邮差”

container-runtime

  • 容器和镜像的实际使用者,在kubelet的指挥下创建容器,管理Pod的生命周期
  • Node上真正干活的“苦力”

这3个组件中只有kube-proxy被容器化了
kubelet因为必须要管理整个节点,容器化会限制它的能力 ,因此必须在container-runtime之外运行

可以通过ps -ef|grep kubelet找到它

ps -ef|grep kubelet

工作流

  • 每个Node上的kubelet会定期向apiserver上报节点状态,apiserver再存到etcd里
  • 每个Node上的kube-proxy实现了TCP/UDP反向代理,让容器对外提供稳定的服务
  • scheduler通过apiserver得到当前的节点状态,调度Pod,然后apiserver下发命令给某个Node的 kubelet,kubelet调用container-runtime启动容器
  • controller-manager也通过apiserver得到实时的节点状态,监控可能的异常情况,再使用相应的手段去调节恢复。

希望本篇文章对你有所帮助,谢谢。