Member-only story
- [1] 架构说明
Kubernetes
遵循非常传统的客户端/服务端的架构模式,客户端可以通过 RESTful
接口或者直接使用 kubectl
与 Kubernetes
集群进行通信,这两者在实际上并没有太多的区别,后者也只是对 Kubernetes
提供的 RESTful API
进行封装并提供出来。每一个 Kubernetes
集群都是由一组 Master
节点和一系列的 Worker
节点组成,其中 Master
节点主要负责存储集群的状态并为 Kubernetes
对象分配和调度资源。
- [2] 主节点服务 — Master 架构
作为管理集群状态的 Master
节点,它主要负责接收客户端的请求,安排容器的执行并且运行控制循环,将集群的状态向目标状态进行迁移。Master
节点内部由下面三个组件构成:
API Server:
负责处理来自用户的请求,其主要作用就是对外提供 RESTful
的接口,包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯一一个与 etcd
集群通信的组件。
etcd
: 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes
所有集群数据的后台数据库。
Scheduler:
主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod
,并选择节点让 Pod
在上面运行。调度决策考虑的因素包括单个 Pod
和 Pod
集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
controller-manager:
在主节点上运行控制器的组件,从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。这些控制器包括:节点控制器(负责在节点出现故障时进行通知和响应)、副本控制器(负责为系统中的每个副本控制器对象维护正确数量的 Pod)、端点控制器(填充端点 Endpoints 对象,即加入 Service 与 Pod))、服务帐户和令牌控制器(为新的命名空间创建默认帐户和 API 访问令牌)。
- [3] 工作节点 — Node 架构
其他的 Worker
节点实现就相对比较简单了,它主要由 kubelet
和 kube-proxy
两部分组成。
kubelet:
是工作节点执行操作的 agent
,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod
运行状态等。
kube-proxy:
是一个简单的网络访问代理,同时也是一个 Load Balancer
。它负责将访问到某个服务的请求具体分配给工作节点上同一类标签的 Pod
。kube-proxy
实质就是通过操作防火墙规则(iptables
或者ipvs
)来实现 Pod
的映射。
Container Runtime:
容器运行环境是负责运行容器的软件,Kubernetes
支持多个容器运行环境: Docker
、 containerd
、cri-o
、 rktlet
以及任何实现 Kubernetes CRI
(容器运行环境接口)。