初识Kubernetes 架构 必看!

简介: 初识Kubernetes 架构 必看!
  • 控制平面组件
  • ETCD
  • API Server
  • Controller Manager
  • Scheduler
  • 工作节点组件
  • Kubelet
  • kube-proxy
  • 容器运行时

控制平面组件

ETCD

etcd 是一个快速、分布式、一致的键值存储,用作持久存储 Kubernetes 对象数据(如 pod、replication controllers, secrets, services 等)的后备存储。实际上,etcd 是 Kubernetes 存储集群状态和元数据的唯一地方。唯一直接与 etcd 对话的组件是 Kubernetes API Server。所有其他组件通过 API Server 间接读取和写入数据到 etcd。

Etcd 还实现了一个监视功能,它提供了一个基于事件的接口,用于异步监控键的更改。一旦密钥被更改,它的观察者就会收到通知。API Server 组件在很大程度上依赖于此来获得通知并将 etcd 的当前状态移动到所需状态。

etcd 实例的数量应该是奇数吗?

在 HA 环境中,您通常会运行 3、5 或 7 个 etcd 实例,但为什么呢?由于 etcd 是分布式数据存储,因此可以水平扩展它,但您还需要确保每个实例中的数据是一致的,为此,您的系统需要就状态达成共识。Etcd 为此使用了RAFT 共识算法 [1]。

该算法需要多数(或仲裁)集群才能进入下一个状态。如果您只有 2 个 ectd 实例,如果其中任何一个失败,则 etcd 集群无法转换到新状态,因为不存在多数,并且在 3 个实例的情况下,一个实例可能会失败并且可以达到多数的实例仍然可用。

API Server

API Server 是 Kubernetes 中唯一与 etcd 直接交互的组件。Kubernetes 以及客户端(kubectl)中的所有其他组件都必须通过 API Server 来处理集群状态。API Server 提供以下功能:

  • 提供在 etcd 中存储对象的一致方式。
  • 执行这些对象的验证,以便客户端无法存储配置不正确的对象,如果它们直接写入 etcd 数据存储区可能会发生这种情况。
  • 提供 RESTful API 来创建、更新、修改或删除资源。
  • 提供乐观并发锁定,因此在并发更新的情况下,对对象的更改永远不会被其他客户端覆盖。
  • 对客户端发送的请求执行身份验证和授权。它使用插件提取客户端的用户名、用户 ID 和用户所属的组,并确定经过身份验证的用户是否可以对请求的资源执行请求的操作。
  • 如果请求试图创建、修改或删除资源,则执行准入控制 [2]。示例:AlwaysPullImages、DefaultStorageClass、ResourceQuota 等。
  • 为客户端实现监视机制(类似于 etcd)以监视更改。这允许调度程序和 Controller Manager 等组件以松散耦合的方式与 API Server 交互。

Controller Manager

在 Kubernetes 中,控制器是监控集群状态的控制循环,然后根据需要进行更改或请求更改。每个控制器都尝试将当前集群状态移动到更接近所需状态。控制器跟踪至少一种 Kubernetes 资源类型,并且这些对象有一个表示所需状态的规范字段。

控制器示例:

  • Replication Manager(ReplicationController 资源的控制器)
  • ReplicaSet、DaemonSet 和 Job 控制器
  • Deployment 控制器
  • StatefulSet 控制器
  • node 控制器
  • service 控制器
  • endpoints 控制器
  • namespace 控制器
  • PersistentVolume 控制器

控制器使用监视机制来获得更改通知。他们监视 API Server 对资源的更改并针对每个更改执行操作,无论是创建新对象还是更新或删除现有对象。大多数时候,这些操作包括创建其他资源或自己更新被监视的资源,但是由于使用监视并不能保证控制器不会错过任何事件,它们还会定期执行重新列出操作以确保没有错过了任何东西。

Controller Manager 还执行生命周期功能,例如命名空间创建和生命周期、事件垃圾回收、终止 pod 垃圾回收、级联删除垃圾回收 [3]、节点垃圾回收等。

Scheduler

调度程序是一个控制平面进程,它将 pod 分配给节点。它监视没有分配节点的新创建的 pod,并且对于调度程序发现的每个 pod,调度程序负责为该 pod 找到运行的最佳节点。

满足 Pod 调度要求的节点称为可行节点。如果没有合适的节点,则 pod 将保持未调度状态,直到调度程序能够放置它。一旦找到可行节点,它就会运行一组函数来对节点进行评分,并选择得分最高的节点。然后它会通知 API Server 有关所选节点的信息,此过程称为绑定。

节点的选择分为两步:

  1. 过滤 所有节点的列表以获取 pod 可以调度到的可接受节点列表。(例如,PodFitsResources 过滤器检查候选节点是否有足够的可用资源来满足 Pod 的特定资源请求)
  2. 对从第 1 步获得的节点列表进行评分 并对它们进行排名以选择最佳节点。如果多个节点得分最高,则使用循环法确保 pod 均匀地部署在所有节点上。

调度决策需要考虑的因素包括:

  • Pod 对硬件/软件资源的请求?节点是否报告内存或磁盘压力情况?
  • 该节点是否具有与 pod 规范中的节点选择器匹配的标签?
  • 如果 pod 请求绑定到特定的主机端口,该端口是否已在该节点上占用?
  • pod 是否容忍节点的污点?
  • pod 是否指定节点亲和性或反亲和性规则?等。

调度程序不会指示所选节点运行 pod。Scheduler 所做的只是通过 API Server 更新 pod 定义。API server 通过 watch 机制通知 Kubelet pod 已经被调度。然后目标节点上的 kubelet 服务看到 pod 已被调度到它的节点,它创建并运行 pod 的容器。

工作节点组件

Kubelet

Kubelet 是在集群中的每个节点上运行的代理,是负责在工作节点上运行的所有内容的组件。它确保容器在 Pod 中运行。

kubelet 服务的主要功能有:

  1. 通过在 API Server 中创建节点资源来注册它正在运行的节点。
  2. 持续监控 API Server 上已调度到节点的 Pod。
  3. 使用配置的容器运行时启动 pod 的容器。
  4. 持续监控正在运行的容器并将其状态、事件和资源消耗报告给 API Server。
  5. 运行容器活性探测,在探测失败时重新启动容器,在容器的 Pod 从 API Server 中删除时终止容器,并通知服务器 Pod 已终止。

kube-proxy

它在每个节点上运行,并确保一个 pod 可以与另一个 pod 对话,一个节点可以与另一个节点对话,一个容器可以与另一个容器通信等。它负责监视 API Server 以了解Service和 pod 定义的更改,以保持整个网络配置的最新状态。当一个Service由多个 pod 时,proxy会在这些 pod 之间负载平衡。

kube-proxy 之所以得名,是因为它是一个实际的代理服务器,用于接受连接并将它们代理到 Pod,当前的实现使用 iptables 或 ipvs 规则将数据包重定向到随机选择的后端 Pod,而不通过实际的代理服务器传递它们。

  1. 创建服务时,会立即分配一个虚拟 IP 地址。
  2. API Server 通知在工作节点上运行的 kube-proxy 代理已经创建了新服务。
  3. 每个 kube-proxy 通过设置 iptables 规则使服务可寻址,确保拦截每个服务 IP/端口对,并将目标地址修改为支持服务的 pod 之一。
  4. 监视 API Server 对服务或其端点对象的更改。

容器运行时

专注于运行容器、设置命名空间和容器的 cgroup 的容器运行时称为低级容器运行时,专注于格式、解包、管理和共享images并提供 API 以满足开发人员需求的容器运行时称为高级容器运行时(容器引擎)。

容器运行时负责:

  1. 如果本地不可用,则从镜像注册表中拉取容器所需的容器镜像。
  2. 将镜像提取到写入时复制文件系统,所有容器层相互重叠以创建合并文件系统。
  3. 准备容器挂载点
  4. 从容器镜像设置元数据,例如覆盖 CMD、来自用户输入的 ENTRYPOINT、设置 SECCOMP 规则等,以确保容器按预期运行。
  5. 更改内核以向该容器分配某种隔离,例如进程、网络和文件系统。
  6. 提醒内核分配一些资源限制,如 CPU 或内存限制。
  7. 将系统调用(syscall)传递给内核以启动容器。
  8. 确保 SElinux/AppArmor 设置正确。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
3月前
|
运维 Kubernetes Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
|
19天前
|
Kubernetes Devops API
从零到面试高手:每个 DevOps 专业人士都必须知道的 20 个 Kubernetes 架构问答
Kubernetes 是当前 DevOps、云原生和 SRE 领域的关键技能。本文总结了 20 个高频面试问题,涵盖架构组件、工作原理及核心概念,助你轻松掌握 Kubernetes 基础,提升面试与实战能力。
139 2
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
69 0
|
10月前
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
346 82
|
7月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
7月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
10月前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
510 60
|
7月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
10月前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?