跳至主要内容

解读 Kubernetes 架构:深入探索云原生的可扩展性

一份全面的 Kubernetes 架构指南,涵盖控制平面组件、工作节点、可扩展性,以及部署云原生应用的最佳实践。
Josep Ferrer
Josep Ferrer

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

在现代云环境中,Kubernetes 已成为管理容器化应用的默认技术。随着组织转向微服务与云原生架构,Kubernetes 提供了自动化部署、扩展应用以及确保高可用性所需的一切能力。 

Kubernetes 是一种开源的容器编排器,可简化大规模管理容器的复杂过程。它对底层基础设施进行抽象,使开发者能够专注于构建应用,而无需担心底层服务器。

理解 Kubernetes 架构对于希望部署与管理可扩展、具备弹性且可用于生产的应用的任何人都至关重要。 

今天,我想与已经熟悉 Kubernetes 基本概念的中级学习者分享关于Kubernetes 架构的更深入见解。 

什么是 Kubernetes?

Kubernetes 是一个强大的分布式系统,旨在大规模编排和管理容器化应用。它使组织能够在多个物理或虚拟机(称为节点)上部署工作负载,并确保应用保持可用、可扩展且对故障具有弹性。

Kubernetes 的核心优势之一是能够高效处理动态工作负载。通过自动将容器分布到各节点,Kubernetes 确保应用可以水平扩展,并根据可用资源平衡负载。如果某个节点过载,Kubernetes 会将工作负载重新调度到健康的邻近节点,从而最大限度减少停机并维护性能。

如果您仍是该技术的初学者,请查看这门 Kubernetes 入门课程开始学习。

Kubernetes 简史

Google 最初将 Kubernetes 作为其内部容器管理系统 Borg 的开源继任者进行开发。2014 年发布后,Kubernetes 迅速成为容器编排的行业标准,并得到了大量工具与云服务商生态的支持。如今,它由云原生计算基金会(CNCF)维护,已在各行业广泛用于管理云原生应用。

什么是 Kubernetes 架构?

下图直观展示了 Kubernetes 的架构:

The Kubernetes Architecture.

作者制图。Kubernetes 架构。 

  • 控制平面组件负责管理集群并确保维持期望状态。
  • 工作节点执行工作负载,在 Pod 中运行容器。
  • API Server 充当用户交互(通过 UI 或 CLI)与集群之间的桥梁。
  • 网络与存储附加组件扩展了 Kubernetes 在生产环境中的能力。

在此基础上,我们可以进一步探讨 Kubernetes 集群架构中各组件的详细角色。

Kubernetes 架构的核心组件

Kubernetes 由两大层组成:控制平面与节点组件。让我们依次了解:

控制平面

Kubernetes 控制平面是负责维护集群期望状态、调度工作负载和处理自动化的核心管理层。它通过持续监控集群状况并进行必要调整,确保应用按预期运行。

Control Plane components.

作者制图。控制平面组件。 

API Server(kube-apiserver)

API Server 是通往 Kubernetes 集群的网关。它处理来自 CLI(kubectl)、UI 控制台或自动化工具的所有管理请求。即便 API Server 未运行,集群仍可运作,但管理员将失去对部署与配置的直接控制。

控制器管理器(kube-controller-manager)

Kubernetes 基于控制器模式运行,控制器会监控系统状态并采取纠正措施。控制器管理器负责统筹这些控制器,确保以下关键职能:

  • 根据需求扩缩工作负载。
  • 管理失效节点并重新调度工作负载。
  • 强制执行期望状态(例如,确保某个 Deployment 始终运行指定数量的副本)。

调度器(kube-scheduler)

调度器负责将 Pod 分配给工作节点,需考虑以下因素:

  • 资源可用性(CPU、内存)。
  • 节点亲和与反亲和规则。
  • Pod 分布以避免过载。

它通过筛选与打分流程为每个新 Pod 选择最优节点,确保资源利用均衡。

etcd(分布式键值存储)

etcd 是 Kubernetes 的单一事实来源,存储所有集群数据,包括:

  • 配置信息。
  • Secrets 与凭据。
  • 工作负载的当前与历史状态。

由于攻破 etcd 即可获得对集群的完全控制,因此必须对其进行安全加固,并为其提供足够的硬件资源以维持性能与可靠性。

云控制器管理器

在基于云的 Kubernetes 部署中,云控制器管理器将集群与云服务商的服务集成,负责:

  • 创建负载均衡器。
  • 分配持久化存储卷。
  • 动态扩缩基础设施(例如增加虚拟机作为节点)

节点组件

工作节点是 Kubernetes 集群的计算中枢,负责运行应用工作负载。每个节点独立运行,同时与控制平面保持持续通信以确保编排顺畅。

Kubernetes 会根据资源可用性与工作负载需求动态将 Pod 调度到工作节点。节点可以是物理机或虚拟机,而生产就绪的集群通常由多个节点组成,以实现水平扩展与高可用。每个工作节点包含以下关键组件:

Kubelet:节点代理

Kubelet 是主要的节点级代理,负责管理容器的执行。它:

  • 持续与 API Server 通信以接收指令。
  • 确保 Pod 按其规格定义运行。
  • 拉取容器镜像并启动所需容器。
  • 监控容器健康状况并在必要时重启。

没有 Kubelet,节点将与集群失联,已调度的工作负载也无法得到正确管理。

Kube-Proxy:网络与负载均衡

Kube-Proxy 负责管理不同节点上运行的服务之间的网络通信。它:

  • 配置网络规则,以实现 Pod 间的无缝通信。
  • 促进服务发现,并为 Pod 间网络提供负载均衡。
  • 确保节点间及与外部客户端之间的流量正确路由。

如果 Kube-Proxy 发生故障,受影响节点上的 Pod 可能无法访问,从而干扰集群内的网络流量。

容器运行时:运行容器

容器运行时是在 Pod 内执行容器化应用的软件。Kubernetes 支持多种运行时选项,包括:

  • containerd(最常用)
  • CRI-O(轻量且原生支持 Kubernetes)
  • Docker Engine(通过 dockershim 提供遗留支持)

运行时通过 cgroups 和 namespaces 等技术与操作系统交互,对工作负载进行隔离,确保高效利用资源。

工作节点如何与控制平面交互

  • 节点通过控制平面签发的令牌加入集群。
  • 节点注册后,调度器会根据其可用资源分配工作负载。
  • 控制平面持续监控节点健康状况,如节点不健康或过载,可能会重新调度工作负载。

通过结合 Kubelet、Kube-Proxy 与容器运行时,工作节点构成了支撑 Kubernetes 应用的可扩展且具备弹性的执行层。

通过附加组件扩展 Kubernetes

Kubernetes 具备高度可扩展性,允许您通过附加组件定制并增强其功能。尽管控制平面与工作节点构成了核心基础设施,附加组件则为其提供网络、存储、监控与自动化等能力,使 Kubernetes 更加强大且适用于生产环境。

网络解决方案

Kubernetes 网络遵循基于插件的方式,需要符合 CNI(容器网络接口)的插件来实现 Pod 之间的无缝通信。常用的网络解决方案包括:

  • Calico:安全的网络策略与高性能路由。
  • Cilium:基于 eBPF 的网络与安全。
  • Flannel:轻量、易配置的覆盖网络。

多数托管版 Kubernetes 发行版已预配置网络方案,但自管集群需要手动安装 CNI 插件。

存储解决方案

Kubernetes 通过 StorageClass 提供动态存储供应,使工作负载可对接多种存储后端:

  • 本地存储:使用节点文件系统。
  • 云块存储:与云服务商集成(如 AWS EBS、Azure Disk、GCP Persistent Disks)。
  • 分布式存储:如 Ceph、Longhorn 与 Rook,可在节点间提供持久且副本化的存储。

由于 Kubernetes 不包含内置的容器镜像仓库,您必须使用外部镜像仓库(例如 Docker Hub、Harbor 或 Amazon ECR)来存储与分发容器镜像。

监控与可观测性

有效的监控与日志对管理 Kubernetes 工作负载至关重要。常见方案包括:

  • Prometheus:指标采集与告警。
  • Grafana:可视化看板。
  • ELK 堆栈(Elasticsearch、Logstash、Kibana):日志聚合与分析。

这些工具有助于跟踪集群健康状况、诊断问题并优化性能。

Ingress 控制器

Ingress 控制器管理对集群内应用的外部访问,处理 HTTP/HTTPS 流量与负载均衡。常见选项包括:

  • NGINX Ingress Controller —— 广泛用于管理 Web 流量。
  • Traefik —— 支持动态路由并内置 Let’s Encrypt。
  • HAProxy Ingress —— 高性能负载均衡。

使用 CRD 自定义功能

Kubernetes 允许用户通过自定义资源定义(CRD)扩展其 API,从而创建自定义对象与自动化工作流。

Operators 与控制器可以自动化复杂任务,例如:

  • 当添加自定义的 PostgresDatabaseConnection 对象时自动配置数据库。
  • 动态管理安全策略。
  • 基于自定义指标扩缩应用。

借助 CRD,Kubernetes 可被打造成一套完全可定制的平台,以适配特定业务需求。

Kubernetes 集群架构

Kubernetes 引入了多层抽象,以帮助高效地定义与管理应用。这些抽象简化了在分布式环境中的部署、扩展与管理。

主节点与工作节点

一个 Kubernetes 集群由两类主要节点组成:

  • 主节点(控制平面):负责编排与管理集群。这些节点运行 API Server、调度器、控制器管理器与 etcd,以确保工作负载按预期部署与维护。
  • 工作节点(数据平面):通过运行包含容器的 Pod 来执行应用工作负载。每个工作节点由 Kubelet 管理,借助 Kube-Proxy 进行网络交互,并运行如 Docker 或 containerd 等容器运行时。

主节点与工作节点共同构成自愈、可扩展的基础设施,使应用能够无缝运行。若您想进一步理解容器化与虚拟化,请学习这条由专家引导的 容器化与虚拟化学习路径。

Pod 架构

Kubernetes 的核心是 Pod,它是系统中最小的可部署单元。Pod 封装了一个或多个容器,这些容器共享存储、网络和配置。

  • 单容器 Pod:最常见的形式,每个 Pod 包含一个运行微服务的容器。
  • 多容器 Pod:当紧密耦合的容器需要共享资源并高效通信时使用。

Pod 是短暂的,意味着它们可根据需要被重新调度或重启。Kubernetes 通过 Deployment、StatefulSet 与 DaemonSet 来管理 Pod,从而确保可扩展性与可用性。

Pod’s Architecture.

作者制图。Pod 架构。 

命名空间与分隔

命名空间允许在 Kubernetes 集群内部进行逻辑分隔。它们有助于:

  • 为不同团队、项目或环境(如 dev、 staging、 production)隔离工作负载。
  • 应用基于角色的访问控制(RBAC)来限制权限。
  • 管理资源配额,防止资源过度消耗。

通过将工作负载组织到命名空间中,Kubernetes 能在单一集群内实现更好的安全性、资源管理与可扩展性。

打好这些基础后,我们将在下一节探讨 Kubernetes 架构如何支撑微服务部署。 

Kubernetes 微服务架构

Kubernetes 非常适合微服务,为分布式应用提供可扩展性、弹性与自动化。它能够:

  • 自动扩缩:根据需求调整资源。
  • 自愈:检测并替换失效容器。
  • 服务发现与负载均衡:实现微服务间的高效通信。
  • 可移植性:可在云端与本地环境运行。
  • 声明式配置:使用 YAML 实现可预测的部署。

专业人士常见的疑问之一是微服务应使用 Kubernetes 还是 Docker Compose。如果您也在考虑这一点,建议阅读这篇指南Docker Compose 与 Kubernetes 对比以进一步了解。 

最佳实践

以下是一些值得遵循的最佳实践:

  • 使用命名空间进行工作负载隔离:组织与隔离工作负载,以获得更好的安全性和资源管理。
  • 使用 Kubernetes Service 与 Ingress 进行流量管理:实现微服务与外部客户端之间的高效通信。
  • 自动扩缩与滚动更新以实现平滑性能:使用水平 Pod 自动伸缩(HPA)与滚动部署以保持可用性。
  • 使用 ConfigMap 与 Secret 进行安全配置:安全地管理敏感数据与环境配置。
  • 使用 Prometheus 与 Grafana 进行监控与日志记录:借助强大的可观测性工具获取洞察并高效排障。

遵循这些实践,Kubernetes 可简化微服务的部署,确保灵活性与高可用性。

Kubernetes 架构的应用场景

Kubernetes 因其扩展应用、确保高可用以及支持多云环境的能力而在各行业被广泛采用。其架构实现了无缝的工作负载管理,成为现代云原生应用的首选方案。

应用可扩展性 

Kubernetes 实现水平扩展,使应用能够高效应对不同的工作负载:

  • 水平 Pod 自动伸缩(HPA)可基于 CPU、内存或自定义指标调整 Pod 数量。
  • 集群自动伸缩器可根据需求动态增加或移除工作节点。
  • 负载均衡确保流量在副本间均匀分配。

这使 Kubernetes 非常适用于流量波动的应用,如电商平台、流媒体服务和 SaaS 应用。

高可用与容错能力 

Kubernetes 通过以下方式确保持续运行:

  • 在多个节点上复制工作负载,以防服务中断。
  • 自愈机制可自动重启失效容器。
  • 控制平面中的主从选举以在故障时维持稳定性。

这些特性使 Kubernetes 适用于要求接近零停机的关键任务应用。

混合与多云部署

Kubernetes 对基础设施复杂性进行抽象,便于在本地、混合云与多云环境中部署工作负载:

  • 在 AWS、Google Cloud、Azure 与本地集群间实现一致的应用管理。
  • 在不同云服务商之间进行流量路由,以获得最佳时延与成本效率。
  • 采用跨云故障切换的灾难恢复策略。

结语

Kubernetes 彻底改变了容器编排,成为在现代云环境中部署、管理与扩展应用的行业标准。其架构实现了自动扩展、高可用与跨云兼容,使其成为采用微服务与云原生策略的组织的强大工具。

通过理解 Kubernetes 架构,开发者与 IT 团队可以:

  • 通过高效的调度与扩展来优化应用性能。
  • 借助自愈与高可用性增强系统韧性。
  • 确保多云与混合部署的无缝性,避免厂商锁定。

从控制平面管理到工作节点执行,再到可自定义的附加组件,Kubernetes 为大规模运行关键任务应用提供了所需的灵活性。随着云生态的演进,Kubernetes 依旧走在前沿——助力企业自信创新。

Kubernetes 是管理现代应用的强大工具,但掌握它需要实践经验。继续学习:

Josep Ferrer

作者

Josep Ferrer

Josep 是一名专注于欧洲项目的自由职业数据科学家,擅长数据存储、处理、高级分析,以及具有影响力的数据叙事。 

作为一名教育者,他在纳瓦拉大学硕士项目教授大数据课程,并在 Medium、KDNuggets 和 DataCamp 等平台发表文章分享见解。Josep 还在其通讯 Databites(databites.tech)撰写有关数据与技术的内容。 

他拥有加泰罗尼亚理工大学工程物理学学士学位,以及庞培法布拉大学智能交互系统硕士学位。

主题