Kubernetes组件
Kubernetes集群由代表控制平面的组件和一组称为节点的机器组成。

Kubernetes集群由一组计算节点组成,称为node(节点 ), node上运行容器化的应用程序。每个群集至少有一个工作节点。

worker节点承载作为应用程序工作负载组件的pod。控制平面管理集群中的工作节点和pod。在生产环境中,控制平面通常跨多台计算机运行,而群集通常运行多个节点,从而提供容错和高可用性。

本文档概述了拥有完整且有效的Kubernetes集群所需的各种组件。


这是Kubernetes集群的示意图,其中所有组件都捆绑在一起

Kubernetes的组成:

控制平面组件

控制平面的组件对群集进行全局决策(例如,调度),并检测和响应群集事件(例如,当部署的副本字段不满足要求时启动新的pod)。

控制平面组件可以在群集中的任何计算机上运行。但是,为简单起见,通常设置脚本在同一台计算机上启动所有控制平面组件,并且不在该计算机上运行用户容器,这一般说master节点。

kube-apiserver
kube-apiserver是Kubernetes的组件 控制平面公开了Kubernetes API。API服务器是Kubernetes控制平面的前端。

Kubernetes API服务器的主要实现是kube-apiserver。kube-apiserver旨在水平扩展-即,它通过部署更多实例进行扩展。您可以运行kube-apiserver的多个实例,并平衡这些实例之间的流量。
API服务器是Kubernetes控制平面的一个组件,它公开kubernetes 的api。API服务器是Kubernetes控制平面的前端。

kubernetes api服务器是通过 kube-apiserver实现。kube-apiserver设计为水平扩展,即通过部署更多实例来扩展。您可以运行多个kube-apiserver的实例并平衡这些实例之间的流量。

etcd
一致且高度可用的键值存储用作Kubernetes所有集群数据的后备存储。

如果您的Kubernetes集群使用etcd作为其后备存储,请确保您有针对这些数据的备份计划。

您可以在官方文档中找到有关etcd的详细信息。

kube-scheduler
控制平面组件,用于监视新创建的没有指定节点的pod,并选择要在其上运行的节点。
调度决策要考虑的因素包括:个人和集体资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载间干扰和截止日期。

kube-controller-manager
运行的控制平面组件控制者流程。

逻辑上,每个控制者是一个单独的进程,但是为了降低复杂性,它们都被编译成一个二进制文件并在单个进程中运行。
这些控制器包括:
节点控制器:负责在节点出现故障时进行通知和响应。
Replication控制器:负责为系统中的每个复制控制器对象维护正确数量的Pod。
端点控制器:填充“端点”对象(即,关联 Services & Pods)。
服务帐户和令牌控制器:为新名称空间创建默认帐户和API访问令牌。

cloud-controller-manager

嵌入特定于云的控制逻辑的Kubernetes控制平面组件。云控制器管理器允许您将集群链接到云提供商的API中,并将与该云平台交互的组件与集群交互的组件分离。

云控制器管理器只运行特定于云提供商的控制器。如果您在自己的环境中运行Kubernetes,或者在您自己的PC内的学习环境中运行Kubernetes,那么集群没有云控制器管理器。
与kube-controller-manager一样,云控制器管理器将几个逻辑上独立的控制循环组合成一个二进制文件,您可以将其作为单个进程运行。您可以横向扩展(运行多个副本)以提高性能或帮助容忍故障。
以下控制器可以具有云提供程序依赖项:
节点控制器:用于检查云提供程序,以确定节点在停止响应后是否已在云中删除
路由控制器:用于在底层云基础设施中设置路由
服务控制器:用于创建、更新和删除云提供商负载平衡器

节点组件

kubelet
kubelet是在群集中每个节点上运行的代理。它确保容器在一个Pod里运行。
kubelet获取一组通过各种机制提供的podspec,并确保这些podspec中描述的容器运行正常。kubelet不管理非Kubernetes创建的容器。

kube-proxy
kube-proxy是在每个服务器上运行的网络代理 节点 在您的集群中,实现Kubernetes的一部分 服务 概念。

kube-proxy 维护节点上的网络规则。这些网络规则允许从群集内部或外部的网络会话与Pod进行网络通信。

如果有kube-proxy可用,它将使用操作系统数据包过滤层。否则,kube-proxy会转发流量本身。
kube proxy是一个网络代理,运行在集群中的每个节点上,实现了Kubernetes服务概念的一部分。

kube proxy维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与Pods进行网络通信。

kube proxy使用操作系统包过滤层(如果有的话)。否则,kube代理转发流量本身。

Container runtime 容器运行时

容器运行时是负责运行容器的软件。

Kubernetes支持几种容器运行时: Docker 、containerd 、CRI-O 以及Kubernetes CRI(容器运行时接口)的任何实现。

Addons(插件)

Addons (插件)使用Kubernetes资源(守护程序集 , 部署方式 等)来实现集群功能。因为它们提供了群集级功能,所以插件的命名空间资源属于kube-system命名空间。

DNS 域名解析

虽然并非严格要求其他附加组件,但所有Kubernetes群集都应具有群集DNS,因为许多示例都依赖它

除了您环境中的其他DNS服务器之外,Cluster DNS是一个DNS服务器,它为Kubernetes服务提供DNS记录。

由Kubernetes启动的容器会在其DNS搜索包括此DNS服务器。

Web UI(仪表板)
仪表板是Kubernetes集群的基于Web的通用UI。它允许用户管理集群中运行的应用程序以及集群本身并进行故障排除。

容器资源监控

容器资源监视在中央数据库中记录有关容器的一般时间序列指标,并提供用于浏览该数据的UI。

集群级日志
一个集群级别的日志记录机制是负责保存容器日志到中央日志存储与搜索/浏览界面。