Kubernetes 内部原理:架构

在本文中,我们将深入探讨 Kubernetes 架构,并探讨其关键组件:

一个 Kubernetes 集群由两个主要组件组成:

1.控制平面节点2.工作节点

控制平面

控制平面是 Kubernetes 集群的"大脑",它协调和编排各种组件,以确保系统的期望状态得以实现和维护。控制平面进一步包括以下组件:

1. Kube-API 服务器

API 服务器是控制平面的中央管理点 ,它暴露 Kubernetes API ,客户端可以使用该 API 与集群进行交互。因此,当我们使用 kubectl 管理集群时,实际上是通过 HTTP REST API 与 API 服务器进行通信。kube-api 服务器负责以下任务:

1.API 管理 :公开集群 API 端点并处理所有 API 请求。2.身份验证 (使用客户端证书、令牌和 HTTP 基本身份验证)和授权 (ABAC 和 RBAC 评估)。3.处理 API 对象(如 pod、service 等)的API 请求和数据验证 。4.与 etcd 通信以存储状态和配置。5.API 服务器协调控制平面和工作节点组件之间的所有进程

2. etcd

etcd 是 Kubernetes 使用的分布式键值存储 ,用于存储集群的配置数据和资源的期望状态。Kube-API 服务器使用 etcd 的观察功能 来跟踪对象状态的更改。它是控制平面中的唯一有状态组件,负责以下任务:

1.作为集群的唯一真相来源 ,确保一致性和数据持久性。2.充当后端服务发现和数据库。3.存储 Kubernetes 对象(如 pod、secret、daemon set、deployment、config map、stateful set 等)的所有配置、状态和元数据 。4.在键值对格式的 /registry 目录键下存储所有对象。例如,在默认命名空间下名为 Nginx 的 pod 的信息可以在 /registry/pods/default/nginx 下找到。

3. Kube-scheduler

Kube-scheduler 负责在工作节点上调度 pod。当我们创建一个 pod 并将其提交到 API 服务器时,调度程序会自动获取 pod,根据可用资源和调度规则评估节点,并将 pod 分配给适当的节点。

1.根据约束和可用资源确定每个 pod 在调度队列中的有效放置节点 。2.然后,调度程序对每个有效节点进行排名,并将 pod 绑定到合适的节点。集群中可以使用多个不同的调度程序;kube-scheduler 是参考实现。3.当我们部署一个 pod 时,我们指定了 pod 的要求,如CPU、内存、亲和性、污点或容忍性、优先级、持久卷 等。4.Kubernetes 允许用户使用自定义调度程序配置来开发自己的自定义调度程序

4. Kube Controller 管理器

kube-controller-manager 是一个关键组件,运行着负责维护集群的期望状态和管理系统不同方面的各种控制器。

每个控制器关注于集群管理的特定领域,自动化任务,确保资源的实际状态与期望状态相匹配。

以下是重要的内置 Kubernetes 控制器列表:

1.Node Controller :负责监控集群中的节点状态 。它会检测节点故障并启动操作 以替换失败的节点或将 pod 重新调度到健康的节点。2.Replication Controller :确保 pod 的指定副本数始终运行 。根据需要创建或终止 pod 以维护所需的副本计数。3.Deployment Controller :扩展了 Replication Controller 的功能,允许您以声明性方式定义和管理应用程序部署。它支持滚动更新、回滚和扩展。4.StatefulSet Controller:通过确保稳定和有序的扩展和升级,管理有状态应用程序。它为每个 pod 分配唯一的网络标识,并在重新调度时保持其标识。5.**Daemon

Set Controller**:确保在所有或一部分节点上运行特定 pod 的副本。通常用于任务,如节点监视代理或网络组件。

1.Job Controller管理批处理作业 ,确保特定任务或作业的完成次数达到了指定的要求。2.CronJob Controller :允许您使用类似于 cron 的语法在指定间隔内调度任务 。它根据定义的计划创建作业。3.Namespace Controller :确保集群中的每个命名空间都具有一组相应的资源,并强制资源隔离。4.Service Account 和 Token Controller自动为命名空间中的 pod 创建默认帐户和访问令牌 。5.Service Controller :监视服务和端点,并根据创建、删除或重新调度 pod 的情况更新它们 。6.Endpoint Controller:维护 endpoint 对象,根据标签选择器将服务与 pod 匹配。

5. 云控制器管理器 (CCM)

当 Kubernetes 部署在云环境中时,云控制器管理器充当 Kubernetes 集群和云平台 API 之间的桥梁。它管理 Kubernetes 使用的云特定资源的生命周期。

1.它从主 Kubernetes 控制平面中卸载了云特定的控制循环和功能,减少了其复杂性,使其更易于维护和扩展。2.它托管各种云特定控制器 ,负责管理特定于云提供商的资源。这些控制器包括:•Node Controller :管理 Kubernetes 节点与云实例之间的交互,处理节点的生命周期操作,如创建、删除和调整大小。•Route Controller :处理服务的云特定网络配置,例如创建负载均衡器或管理 IP 地址。•Volume Controller :与云存储服务集成,以云特定方式提供和管理持久卷。•Service Controller :与云提供商的负载均衡器服务互动,以创建、管理和更新 Kubernetes 服务的负载均衡器。3.CCM 管理云资源,确保它们与 Kubernetes 资源定义的期望状态相匹配 。例如,它可能根据缩放要求创建或释放云实例。4.它与云提供商的 API 进行通信 ,执行操作,例如创建实例、配置网络、管理存储资源等。5.它确保适当管理安全设置和凭据,与云服务交互时进行管理。

工作节点

工作节点负责运行容器化应用程序。它包括以下组件。

1.kubelet2.kube-proxy3.容器运行时

1. Kubelet

Kubelet 是 Kubernetes 控制平面和节点上运行的容器之间的关键桥梁,确保集群的期望状态得以实现和维护。

它在集群中的每个节点上运行一个代理组件,以将节点的状态和资源利用率报告给 Kubernetes 控制平面。它不以容器形式运行,而是由 systemd 管理的守护程序。

以下是 kubelet 的主要功能和职责:

1.节点代理 :kubelet 充当每个节点上的代理,将节点的状态和容器的健康状况报告给 Kubernetes 控制平面 。2.健康监控 :kubelet 连续监控 pod 中的容器的健康状况。如果容器崩溃或变得不健康,kubelet 会采取适当的措施,如重新启动容器或整个 pod。3.Pod 管理 :kubelet 管理节点上 pod 的状态。它确保根据从 Kubernetes API 服务器接收的 pod 定义,指定的 pod 正在运行且健康。4.Pod 网络 :kubelet 与网络插件协作,为节点上的 pod 设置网络。它为 pod 分配 IP 地址,并确保容器可以相互通信以及与外部世界通信。5.卷管理 :kubelet 管理 pod 定义中指定的卷,根据需要附加和分离卷。它确保数据持久性并允许容器访问共享存储。6.资源管理 :kubelet 强制执行 pod 定义中指定的资源约束,确保容器不会超出分配的 CPU 和内存限制。它还处理对 CPU 和内存等资源的请求。7.驱逐和清理 :当节点上的资源变得稀缺时,kubelet 可以根据预定义的策略从 pod 中驱逐 pod,以释放资源。它还在 pod 终止时清理任何剩余的资源。8.节点注册:kubelet 向 Kubernetes 控制平面注册节点,使控制平面能够知道可用于调度 pod 的节点。

2. Kube 代理

Kube 代理,即 Kubernetes 代

理,是运行在 Kubernetes 集群中每个节点上的网络代理 。其主要功能是管理 pod 和服务之间的网络通信,为容器化应用程序提供可靠和一致的网络环境。它负责以下任务:

1.服务发现 :Kube 代理负责在集群内启用服务发现。它根据服务规范中定义的标签和选择器,维护网络规则,将请求从服务转发到适当的 pod 。2.负载均衡 :Kube 代理为具有多个副本或实例的服务实施负载均衡。它将传入请求分发给与服务的选择条件相匹配的可用 pod。3.网络地址转换(NAT) :Kube 代理对出站流量执行网络地址转换(NAT)。这确保来自 pod 的流量看起来是从主机的 IP 地址发出的,从而允许外部系统正确响应。4.ClusterIP 服务 :对于 ClusterIP 服务(仅在集群内部可访问),Kube 代理设置 IPTables 规则,将流量转发到根据其标签选择器匹配的正确 pod 。5.NodePort 服务 :Kube 代理配置主机的防火墙,以将传入流量转发到 NodePort 服务的适当 pod。这允许使用每个节点上的静态端口外部访问服务 。6.高可用性 :Kube 代理致力于确保服务的高可用性。如果 pod 不可用或添加/删除了,Kube 代理会自动更新网络配置以正确路由流量。7.健康检查:Kube 代理监视与服务相关的端点和 pod 的健康状况。如果 pod 变得不健康,Kube 代理停止转发流量。

3. 容器运行时

容器运行时环境 负责根据 pod 规范创建、启动、停止和管理容器。

一些常用的 Kubernetes 容器运行时包括 Docker、containerd、CRI-O、rkt(发音为 "rocket")等。

1.容器管理 :容器运行时环境负责根据 pod 定义创建、启动、停止和管理容器。2.镜像管理 :它根据 pod 定义中指定的镜像引用从容器仓库 (如 Docker Hub、Google Container Registry 等)拉取容器镜像。3.资源隔离和管理 :运行时环境确保容器根据其 pod 配置中指定的 CPU、内存和其他资源拥有适当的资源级别。4.网络和通信 :它设置容器的网络,确保它们可以相互通信以及与集群内外的服务通信。这可能涉及配置网络命名空间、IP 地址和端口映射。5.容器安全性 :运行时环境通过强制容器之间的隔离,防止它们访问彼此的文件系统或资源。它还可能实施其他安全措施,如 AppArmor 或 SELinux。6.卷和存储管理 :运行时环境管理附加到容器的卷,确保数据持久性并允许容器访问共享存储。7.生命周期管理 :它处理容器的完整生命周期,包括启动、停止、重启和清理容器。8.健康监控和重启 :运行时环境监视容器的健康状况,并可以自动重启崩溃或变得不健康的容器。9.与硬件和内核的交互:运行时环境与主机操作系统的内核进行交互,管理容器资源使用、网络命名空间、进程隔离和其他低级操作。

Kubernetes 的架构促进了分布式微服务导向的方法,使开发人员可以专注于应用程序逻辑,而平台负责部署、扩展和负载均衡。

无论是在本地、云中还是混合环境中,Kubernetes 的架构使组织能够高效地管理复杂的容器化工作负载,同时秉承模块化、抽象和自动化的原则。

更多精彩~

相关推荐
南猿北者4 小时前
docker容器
docker·容器
YCyjs6 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R6 小时前
K8s小白入门
云原生·容器·kubernetes
€☞扫地僧☜€9 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
58沈剑9 小时前
80后聊架构:架构设计中两个重要指标,延时与吞吐量(Latency vs Throughput) | 架构师之路...
架构
全能全知者10 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子12 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
想进大厂的小王12 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
阿伟*rui13 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
ZHOU西口13 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac