主组件为集群提供控制平面。主组件做出关于集群的全局决策(比如调度),以及检测和相应集群的事件(当副本控制器的副本不满足条件时,创建一个新的pod)
主组件可以在集群上的任何设备中运行,然而,为简单起见,通常会设置脚本启动一台设备上的所有主组件,并且不会在这台设备上运行任何用户容器
kube-apiserver
Kubernetes API是主服务暴露出来的组件。它是一个前端的Kubernetes控制平面。它被设计为水平扩展型——也就是说,它是通过部署更多的实例来进行扩展
etcd
使用一致且高可用的键值存储作为Kubernetes的所有集群数据的备用存储。
kube-scheduler
主服务器上的组件,用于监视未创建节点的新创建pod,并选择一个节点供其运行。调度决策所考虑的因素包括个人和集体的资源需求,硬件、软件、策略约束,亲和性和反亲和性规范,数据位置,工作负载间干扰和截止日期。
kube-controller-manager
主服务器上运行控制器的组件。
逻辑上,每个控制器都是一个单独的进程,但是为了减少复杂性,它们集体被编译成一个二进制流作为一个进程。
这些控制器包括:
cloud-controller-manager
cloud-controller-manager运行与底层云提供商交互的控制器。cloud-controller-manager仅运行特定于云提供程序的控制器循环。你只能在kube-controller-manager关闭这些控制器循环,可以在启动kube-controller-manager时,将 --cloud-provider
标识设置成external
。cloud-controller-manager允许云供应商代码和 Kubernetes核心代码互相独立的运行。
以下控制器具有云供应商程序依赖性:
Node组件运行在每个节点上,维护运行中的节点并提供Kubernetes 的运行环境
kubelet
在集群中每个节点上运行的代理。它确保容器们在一个pod中运行。
kubelet采用多种机制提供的一系列PodSpecs,保证这些PodSpecs中的容器健康运行。kubelet 不能管理非Kubernetes创造的容器。
kube-proxy
kube-proxy通过维护在主机上的网络规则并执行连接转发来启用Kubernetes 的抽象服务
Container Runtime
Container Runtime是负责运行容器的软件。Kubernetes 支持多种Runtime:Docker, rkt, runc等
插件是实现集群特性的pod和服务。这些pod可能被Deployments,复制控制器等管理。命名空间插件对象在kube-system
的命名空间中被创建。
下面是一些常见插件
DNS
其它的插件可能不是被严格需要的,但是所有的Kubernetes集群都应该有DNS集群。DNS集群区别于其它DNS服务,是一个DNS服务器,负责提供Kubernetes服务的DNS记录。Kubernetes 启动的容器自动包括了DNS 服务。
Web UI(仪表盘)
仪表盘是用于Kubernetes 集群的,一般用途的,基于网页的用户界面。它允许用户管理运行在集群中的应用并解决发生的问题,也包括集群自身。
容器资源监控
容器资源监控将关于容器的通用时间序列指标记录在中央数据库中,并提供一个用户界面来浏览这些数据。
集群级日志
集群级日志机制负责将容器日志保存在一个带有搜索和浏览功能的中央日志存储中