Kubernetes 基本组件

Kubernetes 集群组件分为两类,即两种节点角色。

  • master

master 节点主要用来管理整个集群,通常为 3 或者 5 个。运行的典型组件有 kube-apiserver、kube-controller-manager、kube-scheduler、etcd,虽然也可以用于提供工作负载,但是生产环境并不推荐。

  • node

node 节点主要用来承载业务流量,节点的数量从几个、到几十个、甚至几百个都可以。运行的典型组件有 kubelet,kube-proxy,这几个组件在 master 上也会部署。

在生产环境下,建议不要将集群拆分得太小。过小的查分粒度,会导致集群的运维成本高,资源利用率低,而且不利于充分发挥 Kubernetes 本身的弹性优势。

etcd

etcd 是集群的存储组件,通常采用 3 或者 5 个实例于 master 节点上。

etcd 基于 raft 协议采用二阶段提交,保证分布式场景下强一致性。并不是 Etcd 集群的实例数量越多越好,实例越多提交时需要的时间越多,通常很少超过 7 个实例。

etcd 部署的机器要求尽可能好的磁盘 IO,采用 SSD 能显著降低 etcd 的响应时间。

kube-apiserver

etcd 存储了整个集群的元数据信息,但整个集群的元数据交互,都需要经过 kube-apiserver。

这里元数据指的是对负载、秘钥等对象的定义,各种对象的状态等相关信息。

在多 master 的高可用集群中,kube-apiserver、kube-controller-manager、kube-scheduler 在每一个 master 节点上,都会以静态 Pod 的形式进行部署。

kube-apiserver 提供了整个集群获取、更新、添加、删除元数据的统一入口。

kube-controller-manager

kube-controller-manager 是一组控制器,包括副本控制器、节点控制器、命名空间控制器等。

在集群中声明式定义一个负载,kube-controller-manager 会生成一系列的对象,以便于各个组件协同工作。

kube-controller-manager 的作用实际上就是将对人友好的元数据翻译为对机器友好的元数据。

kube-scheduler

Kubernetes 是一个分布式的操作系统,具有很多个节点。

那么如何选择应用运行在哪个节点上呢?可以人为指定,也可以交给调度器 kube-scheduler。

kube-scheduler 的功能很简单,就是给负载选择一个合适的节点。人为指定会有什么问题?

kubelet

在负载选择完节点之后,kubelet 会获取到当前节点需要运行的负载。

kubelet 会与容器运行时进行交互,创建真正的负载资源。

kubelet 实现了对节点负载完整的生命周期管理,创建、挂载存储、设置环境变量、消耗、驱逐等。

同时,kubelet 还会上报 Node、Pod 的状态。

kube-proxy

当负载运行起来之后,需要对外提供访问入口。

此时,kube-proxy 就可以通过 iptables 或者 ipvs 配置流量转发规则,将外部的流量导入应用负载。

results matching ""

    No results matching ""