文章目录
- 1、概述
- 2、控制平面组件(`Control Plane Components`)
- 2.1 `kube-apiserver`
- 2.2 `etcd`
- 2.3 `kube-scheduler`
- 2.4 `kube-controller-manager`
- 2.5 `cloud-controller-manager`
- 3、Node组件
- 3.1 `kubelet`
- 3.2 `kube-proxy`
- 3.3 容器运行时(`Container Runtime`)
- 4、插件(`Addons`)
- 4.1 `DNS`
- 4.2 Web界面(仪表盘)
- 4.3 容器资源监控
- 4.4 集群层面日志
- 4.5 网络插件
1、概述
当我们部署完kubernetes,就拥有了一个完整的集群。
一组工作机器,称为节点,会运行容器化应用程序。每个集群至少有一个工作节点
工作节点会托管Pod,而Pod就是作为应用负载的组件。控制平面 管理 集群中的工作节点和Pod。
在生产环境中,控制平面通常跨多台计算机运行,一个集群通常运行多个节点,提供容错性和高可用性。
下面介绍一个正常运行的kubernetes集群所需要的各种组件:
2、控制平面组件(Control Plane Components
)
控制平面组件会为集群做出全局决策(如资源调度),以及检测和响应集群事件(如不满足部署的replicas
字段时,要启动新的Pod)
控制平面组件可以在集群中的任何节点上运行。然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有的控制平面组件,并且不会在此计算机上运行用户容器。
2.1 kube-apiserver
API服务器是kubernetes控制平面的组件,该组件负责公开了kubernetes API ,负责处理接受请求的工作。API服务器是kubernetes控制平面的前端。
Kubernetes API
服务器的主要实现是:kube-apiserver
。kube-apiserver在设计上考虑了水平扩缩,也就是说,他可以通过部署多个实例来进行扩缩。可以运行kube-apiserver
的多个实例,并在这些实例之间平衡流量。
2.2 etcd
一致且高可用的键值存储,用作kubernetes
所有集群数据的后台数据库。
如果Kubernetes 集群使用 etcd 作为其后台数据库, 请确保针对这些数据有一份 备份计划
2.3 kube-scheduler
kube-scheduler
是控制平面的组件,负责监视新创建的、未指定运行节点的Pods,并选择节点来让Pod在上面运行
调度决策考虑的因素包括单个Pod以及Pods集合的资源需求、软硬件及策略约束、亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限
2.4 kube-controller-manager
kube-controller-manager
是控制平面的组件,负责运行控制器进程。
从逻辑上讲,每个控制器都是一个单独的进程。但是为了降低复杂性,他们都被编译到一个可执行文件里,并在同一个进程中运行。
2.5 cloud-controller-manager
一个kubernetes控制平面组件,嵌入了特定于云平台的控制逻辑。
云控制管理器允许我们将自己的集群连接到云提供商的API之上,并将 与该云平台交互的组件 同 与自己集群交互的组件 分离开来。
与kube-controller-manager
类似,cloud-controller-manager
将若干逻辑上独立的控制回路 组合到 同一个可执行文件中,然后使用同一进程的方式运行。可以对其执行水平扩容(运行不止一个副本)以提升性能或者增强容错能力。
下面的控制器都包含对云平台驱动的依赖:
- 节点控制器(
Node Controller
):用于在节点终止响应后检查云提供商以确定节点是否被删除。 - 路由控制器(
Route Controller
):用于在底层云基础架构中设置路由 - 服务控制器(Service Controller):用于创建、更新和删除云提供商负载均衡器
3、Node组件
节点组件会在每个节点上运行,负责维护 运行的Pod并提供kubernetes运行环境
3.1 kubelet
kubelet
会在集群中每个节点上运行。他保证容器都运行在Pod中
kubelet接收一组通过各类机制提供给他的PodSpec
,确保这些PodSpec
中描述的容器处于运行状态且健康,kubelet不会管理不是kubernetes创建的容器。
3.2 kube-proxy
kube-proxy
是集群中每个节点上所运行的网络代理,实现kubernetes服务概念的一部分
kube-proxy
维护节点上的一些网络规则,这些网络规则会允许从集群内部或外部的网络会话与Pod进行网络通信。
如果操作系统提供了可用的数据包过滤层,则kube-proxy
会通过他来实现网络规则。否则,kube-proxy
仅做流量转发。
3.3 容器运行时(Container Runtime
)
这个基础组件使kubernetes能够有效运行容器。他负责管理 kubernetes环境中容器的执行和生命周期
Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现
4、插件(Addons
)
插件使用kubernetes资源(DaemonSet, Deployment
等)实现集群功能。
因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system
命名空间。
4.1 DNS
尽管其他插件都并非严格意义上的必须组件,但几乎所有的kubernetes集群都应该有 集群DNS,因为很多示例都需要DNS服务。
集群DNS 是一个DNS服务器,和环境中的其他DNS服务器一起工作,他为kubernetes服务提供DNS记录。
kubernetes启动的容器自动将 此DNS服务器包含在其DNS搜索列表中。
4.2 Web界面(仪表盘)
Dashboard
是kubernetes集群通用的、基于web的用户界面。他使用户可以管理集群中运行的应用程序以及集群本身,并进行故障排除。
4.3 容器资源监控
容器资源监控间关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供浏览这些数据的界面。
4.4 集群层面日志
集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中,这种集中日志存储提供搜索和浏览接口。
4.5 网络插件
网络插件是实现容器网络接口(CNI)规范的软件组件,他们负责为Pod分配IP地址,并使这些Pod能在集群内部互相通信。