Kubernetes 核心组件
本文介绍了Kubernetes集群所需的各种二进制组件。
Master 组件
Master组件提供集群的管理控制中心。Master 组件提供全局决策(比如调度),以及检测(比如健康检查)和响应集群时间(比如副本不够时,的调用replication controller
启动新的pod
Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。请参考 构建高可用群集以来构建multi-master-VM。
kube-apiserver
kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。请参阅构建高可用群集。
kube-apiserver 是 Kubernetes 最重要的核心组件之一,主要提供以下的功能
- 提供集群管理的 REST API 接口,包括认证授权、数据校验以及集群状态变更等
-
提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据,只有 API Server 才直接操作 etcd)
kube-apiserver.png
kube-scheduler
kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node。
调度器需要充分考虑诸多的因素:
- 公平调度
- 资源高效利用
- QoS
- affinity 和 anti-affinity
- 数据本地化(data locality)
- 内部负载干扰(inter-workload interference)
- deadlines
kube-controller-manager
kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
kube-controller-manager 由一系列的控制器组成:
- Replication Controller
- Node Controller
- CronJob Controller
- Daemon Controller
- Deployment Controller
- Endpoint Controller
- Garbage Collector
- Namespace Controller
- Job Controller
- Pod AutoScaler
- RelicaSet
- Service Controller
- ServiceAccount Controller
- StatefulSet Controller
- Volume Controller
- Resource quota Controller
cloud-controller-manager
云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是Kubernetes版本1.6中引入的.我们大部分情况都是在自己公司的内网部署kubernetes集群.所以不做过多的描述.
云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将--cloud-provider flag设置为external启动kube-controller-manager ,来禁用控制器循环。
cloud-controller-manager 具体功能:
- 节点(Node)控制器
- 路由(Route)控制器
- Service控制器
- 卷(Volume)控制器
etcd
etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。需要进一步深入了解, 参考 etcd documentation.
Node组件
节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。
kubelet
在集群中的每个Node上运行的代理。 它确保容器在pod中运行。
kubelet提供的一系列PodSpecs集合规范,并确保这些PodSpecs中描述的容器运行正常。 kubelet不管理非由Kubernetes创建的容器.
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:
- 安装Pod所需的volume。
- 下载Pod的Secrets。
- Pod中运行的 docker(或experimentally,rkt)容器。
- 定期执行容器健康检查。
- Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
-
Reports the status of the node back to the rest of the system.
kubelet.png
kube-proxy
kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。
容器运行时
容器运行时是负责运行容器的软件。Kubernetes 支持多种容器运行时: Docker, containerd, cri-o, rktlet 以及任何实现了Kubernetes CRI (Container Runtime Interface)的容器运行时.
插件 Addons
插件(Addon)是实现集群pod和Services功能的 。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system
Namespace中创建。
下面有一些常用的插件描述, 有关可用插件的扩展列表,请参阅Addons.
DNS
虽然不严格要求使用插件,但Kubernetes集群都应该具有 cluster DNS。
群集 DNS是一个DNS服务器,能够为 Kubernetes services提供 DNS记录。
由Kubernetes启动的容器自动将这个DNS服务器包含在他们的DNS searches中。
Web UI (Dashboard)
Dashboard 是Kubernetes集群的基于Web的通用UI。 它允许用户管理和解决群集中运行的应用程序以及群集本身。
容器资源监测
Container Resource Monitoring记录基于时间序列的有关资源监控,数据会存储于一个时间序列数据库,并提供浏览该数据的UI。
Cluster-level Logging
Cluster-level logging 负责保存容器日志,搜索/查看日志。
logging-with-node-agent.png