0
点赞
收藏
分享

微信扫一扫

《Kubernetes从入门到进阶》之二:集群架构

其生 2023-08-18 阅读 40

Kubernetes是一个跨多主机的容器编排平台,它使用共享网络将多个主机节点组成统一的集群,并通过调度算法对容器和资源进行管理。

在Kubernetes集群中的节点分为两种角色,主节点 (Master)和工作节点(Node)。Master是集群的管理节点,也被称为控制平面(Control Plane),负责管理整个集群。其他的节点则是做为工作节点存在,负责运行业务程序的Pod(Kubernetes 中最小的部署单元,可以包含一个或多个容器),并接受来自Master的指令执行相关的工作。

本文将介绍集群中所包含的工作组件,以便让你对集群架构有初步的了解。

《Kubernetes从入门到进阶》之二:集群架构_Pod



01

Master组件

Master负责对集群的全局管控,包括资源调度、检测和事件响应等。一个集群至少要有一台Master节点,但出于冗余考虑,在企业的生产环境中通常会由几台主机来负责,并通过负载均衡器方式提供服务。

在Master节点上,运行着以下几个组件:

1. API Server 

api server做为整个集群的网关接口,提供管理集群的kubernetes api。该服务提供了包含认证授权、数据校验及资源管理等功能,并且会将相关的变更保存到etcd中。另外,API Server也作为集群的核心 ,负责集群各功能模块之间的通信。 

该服务由名为kube-apiserver的进程来提供,该进程运行在Master节点上。考虑到安全性,目前kube-apiserver默认只提供基于https(6443端口)的REST API。用户在管理集群时,通常会由kubectl客户端来与API Server进行交互。

2. Controller Manager

控制器用于实现用户通过API Server提交的请求,并驱动目标对象去实现。Kubernetes提供了node、Job、Server、Endpoints、Token等多种控制器,并将它们统一编译进单个二进制程序kube-controller-manager,以单个进程的方式运行。

3. Scheduler

调度器会根据集群资源使用情况,为新创建的Pod分配一个合适的节点。调度的策略因素包括:硬件、软件、策略约束、亲和性与反亲和性等。该服务功能由kube-scheduler进程进行提供。

4. Etcd

etcd是一个开源的分布式键值存储系统,可提供服务发现和共享配置的功能。当前,Kubernetes使用etcd来存储集群所有的状态信息,因此etcd的重要性不言而喻。在生产环境中需要以集群的方式来部署,并需要定时备份数据。

在Kubernetes集群中,对于etcd的数据存储主要通过API Server进行。API封装了与 etcd的交互机制,并实现与其他组件的协同,这有助于保证数据的完整性。

02

Node组件

Node是集群中负责执行具体工作的节点。因此,一个集群中绝大部分节点都会是Node。在Node被创建时,它会向Master节点注册自己,并写入到etcd中。这些节点会定期向Master报告自身的状态情况,并接受来自Master节点的指令。

在Node节点上,运行着以下几个组件:

1. Kubelet

kubelet是运行在每个node上的代理服务,它负责接收来自Master的指令,并对当前节点上的Pod对象执行对应的操作。kubelet还会监控节点上Pod的健康状态,并在Pod出现问题时将其重建。

2. Kube-proxy

kube-proxy是运行在每个节点上的网络代理,它负责维护节点上面的网络规则,并将流量转发到对应的Pod。如果服务存在多个Pod实例,那么kube-proxy会进行负载均衡。

3. 容器运行时(container runtime)

虽然Kubernetes的最小管理单位是Pod,但底层依然是通过容器在跑程序,所以在每台Node节点上都需要安装容器运行时。例如:Containerd、Docker、Podman等。kuberenetes通过CRI(容器运行时接口)标准来支持多种类型的容器运行时。


03

插件

插件不是Kubernetes的原生组件,而是由开源社区提供的第三方组件。但它们的作用非常重要,部分插件对于集群而言是必不可少的存在。插件主要用于扩展集群的基础功能,通常是以Pod形式在集群中运行。

按照插件的重要性可分为必要和可选两类。其中网络插件和DNS是属于必要的插件,网络插件目前有Flannel、Calico、Canal等多种方案可供选择,而DNS目前使用coreDNS来进行解析。DNS插件会在安装kubernetes的过程中自动安装,而网络插件则需要用户手动部署。

此外,还有ingress controller、Dashboard、监控、日志等可选插件,它们提供了路由、可视化和监控日志这类重要功能,可有效地提升对于集群的使用和管理体验,相关内容我会在后面的文章中介绍。

举报

相关推荐

0 条评论