理解Kubernetes架构

让我们详细了解Kubernetes架构。

我假设您对Kubernetes有基本的了解。如果没有,请查看以下介绍和安装文章。

https://yaoweibin.cn/kubernetes-introduction/

如何在Ubuntu 18上安装Kubernetes?

Kubernetes遵循主从架构。Kubernetes架构中有一个主节点和多个工作节点。主节点有四个组件。

  • Kube API服务器
  • 控制器
  • 调度器
  • etcd

而工作节点有三个组件。

  • kubelet
  • kube-proxy
  • 容器运行时

Kubernetes架构如下所示:

让我详细介绍一下主节点和工作节点的组件。

主节点

主节点管理Kubernetes集群,是所有管理任务的入口点。您可以通过CLI、GUI或API与主节点通信。为了实现容错性,在集群中可以有多个主节点。当我们有多个主节点时,会有高可用模式,并有一个领导者执行所有操作。所有其他主节点将成为该领导主节点的追随者。

此外,Kubernetes使用etcd来管理集群状态。所有主节点都连接到etcd,它是一个分布式键值存储。

让我逐个解释这些组件。

API服务器

API服务器在主节点上执行所有管理任务。用户将REST命令发送到API服务器,然后API服务器验证请求,然后处理和执行它们。etcd将集群的结果状态保存为分布式键值存储。

调度器

接下来是调度器。如其名称所示,调度器将工作安排给不同的工作节点。调度器具有每个工作节点的资源使用信息。调度器还考虑服务质量要求、数据局部性和许多其他参数。然后调度器以Pod和服务的形式安排工作。

控制器管理器

控制器管理器负责管理控制Kubernetes集群状态的非终止控制循环。现在,每个控制循环都知道它管理的对象的期望状态,然后它们通过API服务器查看它们的当前状态。

在控制循环中,如果期望状态与对象的当前状态不符,则控制循环会采取纠正措施,将当前状态与期望状态保持一致。因此,控制器管理器确保您的当前状态与期望状态相同。

etcd

etcd是用于存储集群状态的分布式键值存储。因此,它要么是Kubernetes主节点的一部分,要么可以进行外部配置。etcd是用goLang编写的,基于raft算法。

raft允许机器集合作为一个协调一致的组运行,可以适应一些成员的故障。即使某些成员无法工作,该算法仍然可以在任何给定时间工作。该组中的一个节点将成为主节点,其余节点将成为追随者。

只能有一个主节点,其他所有主节点都必须跟随该主节点。除了存储集群状态,etcd还用于存储配置详细信息,例如子网和配置映射。

工作节点

工作节点是运行应用程序并由主节点控制的虚拟或物理服务器。Pod被调度到具有运行和连接所需工具的工作节点上。Pod实际上就是一组容器。

要从外部世界访问应用程序,您必须连接到工作节点而不是主节点。

让我们来探索工作节点组件。

容器运行时

容器运行时基本上用于在工作节点上运行和管理持续生命周期。我可以给您一些容器运行时的例子,如rkt、lxc等容器。通常观察到docker也被称为容器运行时,但是让我告诉您,docker是一个使用容器作为容器运行时的平台。

Kubelet

Kubelet基本上是在每个工作节点上运行并与主节点通信的代理。因此,如果您有十个工作节点,那么kubelet将在每个工作节点上运行。它通过各种方式接收pod定义,并运行与该端口相关联的容器。它还确保作为pod一部分的容器始终保持健康。

kubelet使用gRPC框架连接到容器运行时。kubelet通过容器运行时接口(CRI)连接到容器运行时,执行容器和镜像操作。图像服务负责所有与图像相关的操作,而运行时服务负责所有与pod和容器相关的操作。这两个服务有两个不同的操作要执行。

让我告诉您一些有趣的事情,容器运行时以前是在Kubernetes中硬编码的,但是随着CRI的发展,Kubernetes现在可以使用不同的容器运行时而无需重新编译。因此,任何实现CRI的容器运行时都可以由Kubernetes使用来管理pod、容器和容器镜像。Docker shim和CRI容器是CRI shim的两个例子。使用docker shim,使用安装在工作节点上的docker创建容器,然后在内部使用容器来创建和管理容器

Kube-proxy

Kube-proxy作为网络代理在每个工作节点上运行。它侦听API服务器以创建或删除每个服务点。对于每个服务点,kube-proxy设置路由以便可以到达它。

结论

我希望这能帮助您更好地理解Kubernetes架构。Kubernetes技能始终是需求量很大的,如果您想学习建立职业生涯,请查看此链接。

类似文章