1.1 Kubernetes的特点
强大的容器编排能力
作为容器编排管理平台,拥有强大的容器编排能力。Kubernetes 与 Docker 共同发展并且深度集成了 Docker,因此适应容器的特点,比如容器组合、标签选择和服务发现等,可以满足企业级的需求,具体表现如下:
- 以 Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secret 等)。
- 资源配额与分配管理。
- 健康检查、自愈、伸缩与滚动升级。
轻量级
轻量级,对微服务架构有很好的支撑。微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务可能由多个实例副本支撑,副本的数量可以随着系统的负荷变化进行调整。整个系统划分出各个功能独立的组件,组件之间边界清晰、部署简单,以及很多功能实现了插件化,可以非常方便地进行扩展和替换:
- 服务发现、服务编排与内部路由支持。
- 服务快速部署和自动负载均衡。
- 提供对“有状态”服务的支持。
便携性
无论公有云、私有云、混合云还是多云架构都全面支持,可以随时随地地将系统整体进行“搬迁”。Kubernetes 架构方案中屏蔽了底层网络的细节,基于服务的虚拟 IP 地址的设计方式让架构和底层硬件无关,无需改变配置文件就可以将系统从物理机迁移到公有云上,并且谷歌云(GCE)、华为云(CCE)、阿里云(ACK)和腾讯云(TKE)都支持 Kubernetes 集群。
1.2 Kubernetes 架构
Kubernetes 采用微服务架构设计,整个系统被划分为各个功能独立的组件,这些组件之间边界清晰,部署简单,可以运行在多种系统和环境中。
Kubernetes 采用主从分布式架构,节点在角色上分为 Master 和 Node,下图为 Kubernetes 的架构图:

下面这张图表示的也是 Kubernetes 的架构设计以及组件之间的通信协议:

如果大家依然觉得上面的图示看上去比较抽象复杂的话,下面还有一个最简化的架构版本可以供大家目前作为参考理解:

最后,Kubernetes 的设计理念和功能类似于 Linux 分层架构,示意图如下:

1.3 Master 节点中的组件
Kubernetes Master 是控制节点,用于调度管理整个系统。它的架构图示如下:

有如下组件:
- Kubernetes API Server: 这是 Kubernetes 系统资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制,其中封装了核心对象的增删改查操作,外部的客户端和内部的组件可以通过调用 REST API 接口的方式获取数据信息,这些数据信息都存储到了 Etcd 中。
- Kubernetes Scheduler: 负责集群中的资源调度,比如:为新建的 Pod 分配机器。后续也可以根据需要替换为其它的调度器。
- Kubernetes Controller Manager: 负责执行各种控制器,用于保证 Kubernetes 的正常运行和维护集群的状态。
- Etcd: 存储中间件,用于保存集群所有的网络配置和对象的状态信息。Etcd 是高可用的键值存储系统,通过 Raft 一致性算法处理日志复制来保证强一致性。Kubernetes 中的重要数据都持久化到 Etcd 中,所有架构中的各个组件都是无状态的。
Kubernetes 中的控制器列表如下所示:
| 控制器 | 作用 |
|---|---|
| Replication Controller | 保证 Replication Controller 定义的副本数量与实际运行 Pod 的数量一致 |
| Node Controller | 定期检查 Node 的健康状态,标识出失效的 Node |
| Namespace Controller | 定期清理无效的 Namespace,以及 Namespace 下的 API 对象,比如:Pod、Service、Secrte 等 |
| Endpoints Controller | 创建 Endpoints 作为 Service 的后端,当 Pod 发生变化时,定期刷新 Endpoints |
| Service Account Controller | 为每个 Namespace 创建默认的 Service Account,并为 Service Account 创建 Service Account Secret |
| Persistent Volume Controller | 使用 Persistent Volume 绑定新的 Persistent Volume Claim,清理回收已经释放的 Volume Claim |
| Daemon Set Controller | 创建 Daemon Pod,保证指定的 Node 上正常运行 Daemon Pod |
| Deployment Controller | 保证运行指定数目的 Pod,当 Deployment 更新时,控制实现 Replication Controller 和 Pod 的更新 |
| Job Controller | 为 Job 创建一次性任务 Pod,确保完成 Job 指定完成的任务数目 |
| Pod Autoscaler Controller | 实现 Pod 的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行 Pod 的伸缩动作 |
1.4 Node 节点中的组件
Kubernetes Node 是运行节点,主要用于运行管理业务的容器。它的架构图示如下:

有如下组件:
- Kubelet:主要负责维护容器的生命周期,Kubelet 可以从 Master 节点中的 Kubernetes REST API Server 中接收创建 Pod 的请求,启动和停止容器,监控容器运行状态并汇报给 Kubernetes API Server,也负责 Volume(CSI) 和网络(CNI)的管理。
- Kubernetes Proxy:负责为 Pod 创建代理服务,Kubernetes Proxy 会从 Master 节点中的 Kubernetes REST API Server 中获取所有的 Service,根据 Service 信息创建代理服务,实现 Service 到 Pod 的请求路由转发,实现 Kubernetes 层级的虚拟转发网络,换句话说也就是集群内部的服务发现和负载均衡。
- Kubernetes Container Runtime:容器运行时,Node 是使用容器运行的节点,可以使用多种容器,其中最常使用的就是 Docker 服务(CRI)。
评论区