此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。相比之下,Kubernetes 包含一组独立的、可组合的控制过程,这些过程连续地将当前状态驱动到所提供的所需状态。从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用且功能更强大、健壮、弹性和可扩展性。
小结:K8S 提供了基础的容器编排平台,但并不是大而全地将所有可能的功能都直接集成进来,而是做成可插拔的形式,可以做到因地适宜地组织与管理集群,拥有很高的灵活性。
Kubernetes 架构与组件K8s的架构如上图,左边虚线框的部分称为 控制平面(Control Plane),右侧为 集群节点(Nodes)
控制平面所在的主机称为 Master 节点,其余称为 Nodes 执行节点
简单按这两种角色来讲,Master节点负责发号施令(下发命令、监控节点与容器状态),而 Nodes 节点负责干活
控制平面(Control Plane)组件控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件
控制平面组件可以在集群中的任何节点上运行。简单起见,通常会将控制平台配置在一台主机上,也可以配置高可用形式。
下边我们介绍下 控制平面中的几大组件:
kube-apiserver:Master节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端,由它来接收来自 CLI 与 UI 的指令
etcd:是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
kube-scheduler:Master节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
kube-controller-manager:控制器通过 apiserver 监控集群的公共状态,并致力于将当前状态转变为期望的状态。从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。包含以下几种控制器:
节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
cloud-controller-manager:云控制器管理器负责与基础云提供商交互,以下控制器具有云提供商依赖性:
节点控制器(Node Controller): 用于检查云提供商以确定节点是否在云中停止响应后被删除
路由控制器(Route Controller): 用于在底层云基础架构中设置路由
服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器
数据卷控制器(Volume Controller): 用于创建、附加和装载卷、并与云提供商进行交互以编排卷
节点(Node) 组件节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境
节点组件包含两大组件:
kubelet:一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。
kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。
kube-proxy:是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。
kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了数据包过滤层并可用的话,kube-proxy会通过它来实现网络规则。否则,kube-proxy 仅转发流量本身
容器运行环境(Container Runtime):容器运行环境是负责运行容器的软件。K8s支持多种容器运行环境:Docker、containerd、cri-o、rklet 以及任何实现K8s容器运行环境接口的技术。
插件(Addons)
DNS:所有 Kubernetes 集群都应具有 DNS。集群 DNS 还是一个 DNS 服务器,它为 Kubernetes 服务提供 DNS 记录。
用户界面(Dashboard):Kubernetes 集群基于 Web 的 UI。它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。
Dashboard 是 Kubernetes 集群的通用基于 Web 的 UI。它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。
容器资源监控:将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
集群层面日志:负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。
小结:K8s架构分为控制平台位于的Master节点与执行节点Node
控制平台包含:
kube-apiserver(访问入口,接收命令)
etcd(KV数据库,保存集群状态与数据)
kube-scheduler(监控节点状态,调度容器部署)
kube-controller-manager(监控集群状态,控制节点、副本、端点、账户与令牌)
cloud-controller-manager(控制与云交互的节点、路由、服务、数据卷)