01.Kubernetes组件

Master组件

Master组件是集群的控制平台:

  1. Master组件负责集群中得全局决策(例如调度)
  2. Master组件探测并响应集群事件(例如,当Deployment的实际Pod副本数未达到replicas字段的规定时,启动一个新的Pod)

Master组件可以运行于集群中的任何机器上,但是为了简洁性,通常在同一台机器上运行所有的Master组件,且不在此机器上运行用户容器。

kube-apiserver

etcd

kube-scheduler

此Master组件监听所有新创建尚未分配到节点上的Pod,并且自动为Pod选择一个合适的节点去运行。影响调度的因素有:

  1. 单个或多个Pod的资源需求
  2. 硬件、软件、策略的限制
  3. 亲和与反亲和的约定
  4. 数据本地化要求(不是很熟悉)
  5. 工作负载键的相互作用

kube-controller-manager

此Master组件运行了所有的控制器。逻辑上来说,每一个控制器都是一个独立的进程,但是为了降低复杂度,这些控制器被合并运行在一个进程里。kube-controller-manager中包含的控制器有:

  1. 节点控制器:负责监听节点停机的事件并作出对应响应
  2. 副本控制器:负责为集群中每一个副本控制器对象维护期望的Pod副本数
  3. 端点控制器:负责为端点对象赋值(不是很熟悉)
  4. Service Account & Token控制器:负责为新的名称空间创建Default Service Account以及API Access Token。

cloud-controller-manager

此Master组件运行了与具体云基础设施供应商互动的控制器,默认是不安装该组件的。(暂时不研究该组件)


Node组件

kubelet

此组件是运行在每一个集群节点上的代理程序,它确保Pod中得容器处于运行状态。Kubelet通过多种途径获得PodSpec定义,并确保PodSpec定义中所描述的容器处于运行和健康的状态。Kubectl只管理通过Kubernetes创建的容器。

kube-proxy

此组件是一个网络代理程序,运行在集群中的每一个节点上,是实现Kubernetes Service概念的重要部分。kube-proxy在节点上维护网络规则,这些规则确保能正确的与各个Pod进行通信,目前最新版的Kubernetes是通过LVS实现的。

容器引擎

容器引擎负责运行容器。Kubernetes支持多种容器引擎:Docker、containerd、cri-o、rktlet以及任何实现了Kubernetes容器引擎接口的容器引擎(这方面不是很熟悉)。


Addons(非常不熟悉)

Addons使用Kubernetes资源(DaemonSet、Deployment等)实现集群的功能特性。由于它们提供集群级别的功能特性,Addons使用到的Kubernetes资源都放置在kube-system命名空间下。

DNS

除了DNS Addon以外,其他的Addon都不是必须的,所有Kubernetes集群都应该有Cluster DNS。Cluster DNS是一个DNS服务器,是对您已有环境中其他DNS服务器的一个补充,存放了Kubernetes Service的DNS记录。Kubernetes启动容器时,自动将该DNS服务器假如到容器的DNS搜索列表中。

WebUI

Kuboard

ContainerResource Monitoring

此组件将容器的度量指标记录在时间序列数据库中,并提供了UI界面查看这些数据。

Cluster-Level Logging

此组件负责将容器的日志存储到一个统一存储中,并提供搜索浏览的界面。