在本文中,我们将深入探讨 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 的架构使组织能够高效地管理复杂的容器化工作负载,同时秉承模块化、抽象和自动化的原则。
原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/33986.html