在学习Kubernetes之前,有必要了解一下它的体系架构及其组件。这对于后续部署Kubernetes集群及使用它都非常的重要。下图展示了Kubernetes的体系架构。
Kubernetes属于主从分布式架构的体系架构,主要包括master的主节点和node的工作节点。实际的生产环境中,node的工作节点至少两个。
视频讲解如下:
下面对master和node做一个简单的介绍。
- master
master作为集群的主节点,它控制着整个集群并对集群进行管理和调度。master节点上运行着API Server、scheduler、controll-manager各个具体的服务组件,并master还管理着集群的持久化存储etcd。
- node
node节点是Kubernetes集群真正的工作节点,它是实际运行业务应用容器的节点。node节点上运行着kubelet、kube-proxy和Docker容器的守护进程。node节点通过kubelet与master节点上的API Server进行交互,从而实现在集群中进行各种资源的增删改查等操作。
除了master的主节点和node的工作节点外,Kubernetes体系架构中还包括客户端命令行工具kubectl和其它一些附加组件。
下面讨论一下Kubernetes集群中的组件。
一、Kubernetes的核心组件
在了解了Kubernetes的体系架构后,下面对其中涉及到的核心组件及其它们的作用进行了详细说明。
- API Server
API Server提供了操作Kubernetes集群的唯一入口,通过它可以访问到集群中的所有资源。API Server提供了用户的认证及授权功能;支持访问控制的管理和服务的注册发现等机制。API Server同时也与etcd的存储进行交互,从而将集群的信息进行持久化保存。
- scheduler
负责管理和调度集群的资源。Kubernetes允许用户预先定义资源的调度策略,通过scheduler的调度器将Pod调度到相应的node节点上。
- controll-manager
负责维护集群的状态,例如:故障检测、自动扩展、滚动更新等。
- kubelet
负责管理node节点上运行的pod,包括:pod的创建、修改、删除、重启以及健康状态的监控等操作。kubelet同时还负责与master节点上的API Server进行交互通信,定时将本node节点的状态发送给API Server;并接收API Server 下发的指令信息。
- kube-proxy
kube-proxy会根据etcd中存储的应用配置信息在node节点上启动一个监听进程,从而实现将外部请求路由转发到后端正确的容器中。同时kube-proxy还解决了同一服务端口冲突的问题,并为部署在Kubernetes集群中的应用提供访问外部网络的能力。kube-porxy支持随机和轮询这两种负载均衡的路由算法。
- Docker容器的守护进程
负责Docker的镜像管理以及pod和容器的真正运行,是Kubernetes真正的执行引擎。
Docker是Kubernetes的执行引擎,但Kubernetes也可以使用其他的容器技术作为执行引擎,如:Containerd。
二、Kubernetes的附加组件
下表列举了在Kubernetes中一些常用的附加组件以及它们的作用,这些附加组件不是必须的。只是利用这些组件可以增强Kubernetes的功能。