# 集群架构

在硬件级别，一个Kubernetes集群由很多节点组成，这些节点被分为以下两种类型：

* Master节点：即控制节点，负责控制和管理整个集群系统；
* Worker节点：运行用户实际部署的应用；

下图展示了整个集群的架构，包括每个节点中的组件：

![集群架构图](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2Fdaa03c695c6e9444c3c733452eca8104fd2566f9.png?generation=1588594611917366\&alt=media)

## Master节点

Master节点顾名思义，用于控制集群并使它工作。Master节点也可以有多个，保证高可用。

Master节点中的组件有：

* [**API服务器**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/api-fu-wu-qi)：**用户**和**集群内其他组件**都需要和它通信（多实例可并行工作）；
* [**Scheduler**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/scheduler-tiao-du-qi)：用于调度应用中的容器（需使用同步锁控制多实例工作）；
* [**Controller Manager**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/controllermanager-kong-zhi-qi-guan-li-qi)：执行集群级别的功能，如复制容器、持续跟踪工作容器、处理容器失败等（需使用同步锁控制多实例工作）；
* [**etcd**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/etcd-fen-bu-shi-cun-chu)：一个可靠的分布式数据存储，它能持久化存储集群配置（多实例可并行工作）；

## Worker节点

这个节点是用来运行容器化应用的机器。运行、监控和管理应用服务（容器）的任务是由以下组件完成的：

* Docker、rkt或其他的容器类型（容器运行时）；
* [**Kubelet**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/kubelet)：与API服务器通信，并管理它所在节点的容&#x5668;**（作为常规系统组件，运行在宿主机上，而不是Pod中）**；
* [**Kubernetes Service Proxy (kube-proxy)**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-jia-gou/kube-proxy)：负责容器之间的负载均衡网络流量；

## 附加组件

除了上述节点类型中的组件，还有一些附加组件，用来提供更多的功能。包含：

* Kubernetes DNS 服务器
* 仪表盘（dashboard）
* Ingress控制器
* Heapster（容器集群监控）
* [**容器网络接口（CNI）插件**](https://yangsijie151104.gitbook.io/k8s-note/kubernetes-jie-shao/2.kubernetes-jie-shao/ji-qun-di-ceng-wang-luo)

这些组件通常可以通过提交YAML清单给API服务器的方式来完成插件的部署。
