Kubernetes 架构

k8s 整体架构的组成部分,有些可选的,有些是整个系统运行所必需的。

下面是 k8s 的全局架构图:

Kubernetes 有两个不同的部分构成,一个是 Master,一个是 Node。Master 负责调度资源和为客户端提供 API,客户端可以是 UI 界面或者 CLI 工具,在 Kubernetes 中 CLI 工具通常为 kubectl。 Kubernetes Master 接受使用 YAML 定义的配置文件,根据配置文件中相关信息将容器分配到其中一个 Node 上。另外,镜像库在 Kubernetes 中也起到一个很重要的角色,Kubernetes 需要从镜像库中拉取镜像基于这个镜像的容器才能成功启动。常用的镜像库有 dockerhub、阿里云镜像库等。下面图片为 Master 的架构图:

Master 有三个组件:API Server、Scheduler、Controller。API Server 提供了友好易用的 API 供外部调用,同时有很多强大的工具使得 API 调用更加简单,如 kubectl 封装了大量 API 调用,使得部署、配置更加简单。Kubernetes-dashboard 可以让用户在界面上操作 Kubernetes,而无需手动输入各个 API 的调用地址参数等信息。

当 API Server 收到部署请求后,Scheduler 会根据所需的资源,判断各节点的资源占用情况分配合适的 Node 给新的容器。判断依据包括内存、CPU、磁盘等。

Controller 负责整个集群的整体协调和健康,保证每个组件以正确的方式运行。

在图的最下边是 ETCD 数据库。如前文所述 ETCD 是分布式存储数据库,其作为 Kubernetes 的中央数据库,存储了集群的状态,组件可以通过查询 ETCD 了解集群的状态。

Kubernetes Master 分配容器到 Node 执行,Node 将会承受压力,通常情况下新容器不会运行在 Master 上。或者说 Master 是不可调度的,但是你也可以选择把 Master 同时也作为 Node,但是这并不是地道的用法。下面的为 Node 的架构图:

Kube-proxy 在 Node 中管理网络,其左右至关重要。Kube-proxy 通过管理 iptables 等方式使得 pod 到 pod 之间,和 pod 到 node 之间网络能够互通。实质上在跨主机的 pod 之间网络也能够互通。

Kubelet 负责向 api server 报告信息,并把健康状态、指标和节点状态信息存入 ETCD 中。

Docker 上文已详细介绍这里就不多做阐述。

Supervisord 保证 Docker 和 kubelet 一直在运行中,supervisord 并不是必须组件,可以使用其他类似组件替换。

Pod 是可以在 Kubernetes 中创建和管理的最小可部署计算单元。一个 POD 中可以包含多个容器,但 Kubernetes 仅管理 pod。如果多个容器运行在一个 POD 中,就相当于这些容器运行在同一台主机中,需要注意端口占用问题。

Kubernetes 可以使用 Kubeadm + Ansible 的方式搭建,本文介绍 Kubeadm 概念和作用。 1. Kubeadm 是什么Kubeadm 是一个提供 Kub ...