Kubernetes的“厨房”:架构是菜谱,组件是厨具,资源对象是食材(上)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文深入探讨了Kubernetes(K8s)的架构、核心组件以及资源对象。Kubernetes作为一个开源的容器编排系统,通过其独特的架构设计和丰富的组件,实现了对容器化应用程序的高效管理和扩展。通过本文的介绍,读者可以深入了解Kubernetes的架构、核心组件以及资源对象,从而更好地应用和管理容器化应用程序。Kubernetes的灵活性和可扩展性使得它成为容器编排领域的领先者,为企业提供了强大的容器运行环境。

 

image.gif 编辑

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

一、引言

1、Kubernetes概述

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

image.gif 编辑

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、Kubernetes的发展与应用场景

  • 容器编排和管理:Kubernetes 最初是作为一个容器编排平台而开发的,用于简化容器化应用程序的部署和管理。它提供了自动化的容器调度、水平扩展、滚动更新等功能,使得开发人员和运维人员可以更轻松地管理大规模的容器化应用。
  • 混合云和多云部署:Kubernetes 的可移植性使得它成为在多个云平台和数据中心中部署应用程序的理想选择。它能够在私有云、公有云和混合云环境中无缝运行,从而为企业提供了灵活的部署选项。

image.gif 编辑

  • 微服务架构:Kubernetes 提供了强大的服务发现、负载均衡和自动扩展功能,使得它成为构建和管理微服务架构的首选平台。通过将应用程序拆分为多个小型服务,开发团队可以更快地迭代和部署新功能,并且更容易实现水平扩展和故障恢复。
  • 大数据和机器学习:Kubernetes 不仅适用于传统的 Web 应用程序,还可以用于部署和管理大数据和机器学习工作负载。通过与其他开源项目(如Apache Spark、TensorFlow等)集成,Kubernetes 可以简化大数据分析和机器学习模型的部署和管理过程。
  • 持续集成和持续部署(CI/CD):Kubernetes 可以与各种 CI/CD 工具(如Jenkins、GitLab CI等)集成,从而实现自动化的构建、测试和部署流程。开发团队可以通过使用 Kubernetes 提供的自动化功能来加速软件交付过程,并提高部署的一致性和可靠性。
  • 边缘计算:随着边缘计算的兴起,Kubernetes 也在逐渐成为边缘环境中部署和管理应用程序的标准平台。通过在边缘节点上运行轻量级的 Kubernetes 集群,企业可以将应用程序和服务部署到距离用户更近的位置,从而提高性能和响应速度。

二、Kubernetes核心架构概述

1、总体架构

Master节点:

  • kube-apiserver:作为 Kubernetes 的 API 服务器,负责提供 RESTful API 以及接收和处理来自用户和其他组件的请求。
  • etcd:一个分布式键值存储系统,用于保存集群的状态和元数据信息。
  • kube-scheduler:负责监视新创建的 Pod,并将它们调度到集群中的合适节点上,考虑节点资源和调度策略。
  • kube-controller-manager:包含多个控制器,用于监视集群状态并确保集群的期望状态与实际状态保持一致,例如节点控制器、副本控制器等。

Node节点:

  • kubelet:运行在每个节点上的代理服务,负责与主节点通信,管理节点上的容器和 Pod。
  • kube-proxygongzuo负责实现 Kubernetes 服务的负载均衡和网络代理,为服务提供统一的访问入口。

image.gif 编辑

2、工作原理

  1. 用户操作:用户通过 Kubernetes API 或命令行工具(kubectl)与 Kubernetes 集群进行交互,创建、更新或删除应用程序和资源对象(如 Pod、Service、Deployment 等)。
  2. API Server处理:API 请求首先发送到 kube-apiserver,kube-apiserver 对请求进行身份验证和授权,然后将其存储到 etcd 中。
  3. Scheduler调度:kube-scheduler 监视新创建的 Pod,根据调度策略选择合适的节点,并将 Pod 分配给该节点。
  4. Node执行:kubelet 接收到来自 API Server 的 Pod 创建请求,根据 Pod 规范在节点上启动相应的容器,并定期向 API Server 汇报节点和容器的状态。
  5. 网络代理:kube-proxy 在每个节点上负责实现 Kubernetes 服务的负载均衡和网络代理,为服务提供统一的访问入口。
  6. 控制器管理:kube-controller-manager 负责监视集群状态,并通过调整 Pod 的副本数和状态来保持集群的期望状态与实际状态一致。

image.gif 编辑

3、集群通信

在K8s集群中,组件之间的通信是确保集群正常运行的关键。主要的通信方式包括API Server、Etcd以及各个组件之间的通信。API Server作为K8s集群的入口,负责处理来自客户端的请求,并将这些请求转发给相应的组件进行处理。Etcd则作为K8s集群的键值存储系统,用于保存集群的状态和配置信息。各个组件之间通过API和Etcd进行通信,确保集群状态的同步和一致性。

image.gif 编辑

4、数据持久化

K8s支持多种类型的卷,如emptyDir、hostPath、nfs、glusterfs、cephfs等。每种卷都有其特定的用途和适用场景。例如,emptyDir类型的卷主要用于临时存储,其生命周期与Pod相同;而hostPath类型的卷则可以将宿主节点上的文件或目录挂载到容器中,适用于需要访问宿主机文件系统的场景。

除了卷之外,K8s还提供了持久卷(PersistentVolume,简称PV)和持久卷声明(PersistentVolumeClaim,简称PVC)的概念来实现更高级的数据持久化。PV是由管理员预先配置好的存储空间,而PVC则是用户申请存储空间的请求。通过PVC与PV的绑定,用户可以动态地获取所需的存储空间,并确保数据的持久性。

K8s还支持通过分布式存储系统(如Ceph、GlusterFS等)来实现数据持久化。

image.gif 编辑

三、Kubernetes核心组件介绍

1、Master节点组件

API Server 集群管理中枢

API Server是Kubernetes集群的管理中枢。它作为Kubernetes集群的前端接口,提供了丰富的RESTful API,使得各种客户端工具以及Kubernetes的其他组件能够与之交互,从而实现对集群的各种资源的管理。

  1. 资源操作的唯一入口:无论是创建、更新还是删除Pod、Service等Kubernetes资源,都需要通过API Server进行。这使得API Server成为了资源操作的唯一入口,确保了操作的统一性和安全性。
  2. 认证与授权:API Server内置了认证与授权机制,可以确保只有经过授权的用户或组件才能对集群资源进行操作。这大大提高了集群的安全性。
  3. 集群状态存储与同步:API Server与Etcd(一个分布式键值存储系统)紧密集成,用于存储整个集群的状态。Etcd作为集群的后端存储,确保了状态的一致性和可靠性。同时,API Server还负责将集群状态的变化同步到其他组件,确保它们能够实时感知到集群的最新状态。
  4. 扩展性:API Server的设计使得Kubernetes能够轻松地扩展新的资源类型。通过注册自定义的API和相应的资源处理器,用户可以为Kubernetes添加新的功能或资源类型。

image.gif 编辑

etcd 分布式键值存储系统

  • etcd是一个分布式键值存储系统,专为共享配置和服务发现而设计。它由CoreOS开发,并使用Raft一致性算法来管理高可用复制日志。etcd以一致和容错的方式存储元数据,并提供了一个简单、安全且快速的接口来访问这些数据。
  • etcd的名字来源于两个想法:unix的“/etc”文件夹和分布式系统"d"istibuted。在unix系统中,“/etc”文件夹用于存储单个系统的配置数据,而etcd则扩展了这个概念,用于存储大规模分布式系统的配置信息。因此,"d"istibuted的“/etc”就是“etcd”。
  • etcd的主要应用场景包括配置管理、服务发现和分布式协调工作。它使得分布式系统中的各个组件能够共享和同步配置信息,从而确保系统的一致性和可靠性。同时,etcd还提供了分布式锁和领导选举等机制,以实现可靠的分布式协作。

image.gif 编辑

  • 在架构上,etcd是一个高可用的键值存储系统,专为集群化而设计。etcd使用Raft算法作为其一致性算法,这是一个工程上广泛使用的强一致性、去中心化、高可用的分布式协议。Raft算法确保了即使在部分节点故障、网络延迟或网络分割的情况下,多个节点也能对某个事情达成一致看法,从而提高了系统的容错性。
  • etcd的分布式架构使得其能够支持负载均衡,每个etcd节点都可以处理用户的请求。这使得etcd在处理数据量小但访问频繁的消息时表现出色。
  • etcd是一个强大而灵活的分布式键值存储系统,它为分布式系统提供了可靠、一致和高效的配置管理、服务发现和分布式协调功能。

Scheduler 资源调度器

Scheduler是Kubernetes集群中的资源调度器,它的核心任务是将待调度的Pod按照预定的调度策略分配到合适的Node节点上,以确保集群的资源得到高效、公平和合理的利用。

在Kubernetes中,一旦API Server接收到新建Pod的请求并识别其合法后,这个请求会被存入Etcd中。随后,Scheduler会通过watch机制从API Server获知这一需求,并开始其调度流程。Scheduler会根据一系列预定的调度策略,如资源的可用性、Pod的亲和性和反亲和性规则、Node的标签和污点设置等,来评估集群中各个Node节点的适用性,最终选择一个最合适的Node来运行这个Pod。

调度策略的设计考虑了多种因素。首先,为了保证公平性,Scheduler会尝试确保每个Node都能被分配到适量的资源,避免某些Node过载而另一些Node空闲。其次,资源的高效利用是另一个重要目标,Scheduler会尽量将Pod调度到那些资源充足且利用率较低的Node上,以最大化集群的整体资源利用率。同时,为了提高调度性能,Scheduler会采用一些优化算法和机制,以便尽快完成大批量的Pod调度工作。

image.gif 编辑

除了基本的调度功能外,Scheduler还提供了灵活的调度策略配置选项。管理员可以根据实际需求,通过配置不同的调度策略来影响Pod的调度结果。例如,可以设置优先级规则,让某些重要或紧急的Pod优先获得调度;也可以定义自定义的调度策略,以满足特定的业务需求。

Scheduler还与其他Kubernetes组件紧密协作,共同维护集群的稳定性和可用性。例如,当集群中的某个Node节点出现故障或资源不足时,Scheduler会及时感知到这一变化,并尝试将运行在该Node上的Pod重新调度到其他合适的Node上,以确保业务的连续性。

Controller Manager 集群状态控制器

Controller Manager是Kubernetes集群状态的重要控制器。它作为Kubernetes中各种“操作系统”的管理者,是集群内部的管理控制中心,也是Kubernetes自动化功能的核心。Controller Manager负责监控Kubernetes对象的状态,并采取相应的措施以使其达到期望状态。

在Kubernetes中,Controller Manager是通过kube-controller-manager二进制程序运行的,它可以在Master节点上运行,也可以在独立的节点上运行。Kube Controller Manager是一个守护进程,内嵌随Kubernetes一起发布的核心控制回路。它通过API服务器监控集群的状态,确保集群处于预期的工作状态。

Kube Controller Manager由负责不同资源的多个控制器构成,包括副本控制器、节点控制器、命名空间控制器和服务账号控制器等。每种Controller都负责一种特定的资源控制器,而Controller Manager则是这些Controller的核心管理者。例如,ServiceAccount Contoller、Token Controller与安全相关的控制器就与Service Account、Token密切相关。

Controller Manager的作用在于管理和控制集群中的多个控制器,以确保它们按照预期运行。它采用主从架构,确保了集群的高可用性和可扩展性。

image.gif 编辑

2、Node节点组件

Kubelet    Node节点代理

在 Kubernetes 中,Kubelet 是运行在每个节点上的代理服务,负责管理节点上的容器和与 Master 节点的通信。Kubelet 是 Kubernetes 中最核心的组件之一,它负责监视 Pod 的生命周期,并根据集群的配置将 Pod 启动、停止和管理。

  1. 容器生命周期管理:Kubelet 负责监视节点上的 Pod,确保 Pod 的容器处于运行状态。当发现新的 Pod 被调度到节点上时,Kubelet 会根据 Pod 的规格创建相应的容器,并在需要时重新启动或停止容器。
  2. 与容器运行时的交互:Kubelet 通过容器运行时接口(如 Docker 或 Containerd)与节点上的容器运行时进行通信,与容器运行时交互以执行容器的启动、停止、重启等操作。
  3. 资源管理:Kubelet 负责监视节点的资源使用情况,包括 CPU、内存、磁盘等资源。它会定期报告节点的资源情况给 Master 节点,以便 Master 节点进行资源调度和分配。
  4. 与 Master 节点的通信:Kubelet 通过与 Master 节点的 kube-apiserver 进行通信,接收来自 Master 节点的指令,并向 Master 节点报告节点和容器的状态。这样可以确保集群中的状态一致性,并及时响应集群中的变化。
  5. 日志和监控:Kubelet 负责收集节点和容器的日志信息,并将日志发送到集中式日志系统(如 Elasticsearch、Fluentd、Kibana 等)。它还负责监控节点和容器的健康状态,并在发现异常情况时触发相应的报警和处理流程。

image.gif 编辑

Container Runtime 容器运行时环境

容器运行时(Container Runtime)是 Kubernetes 中用于运行容器的核心组件之一,它负责管理和执行容器的生命周期,包括容器的创建、启动、停止和销毁等操作。在 Kubernetes 中,容器运行时通常是一个独立的进程或守护程序,负责与容器引擎交互并执行容器的操作。

image.gif 编辑

下面是一些常见的容器运行时

1. Docker:

  • Docker 是目前最流行的容器运行时,提供了完整的容器生态系统,包括容器镜像、容器网络和容器存储等功能。Docker 使用的容器格式为 Docker 格式(Docker Image),并通过 Docker Engine 运行容器。

2. Containerd:

  • Containerd 是一个面向容器的核心运行时,最初是由 Docker 开发并捐赠给 CNCF 的一个项目。它提供了容器生命周期管理、镜像管理、网络和存储等核心功能,并与各种容器引擎(如 Docker、CRI-O 等)进行集成。

3. CRI-O:

  • CRI-O 是一个专门为 Kubernetes 设计的轻量级容器运行时,实现了 Kubernetes 的容器运行时接口(CRI)规范。CRI-O 使用容器和 OCI 标准来运行容器,与 Kubernetes 紧密集成,并且专注于为 Kubernetes 提供最佳性能和安全性。

4. containerd-shim:

  • containerd-shim 是 containerd 的一个子项目,负责与 Kubernetes CRI 进行交互,并在容器启动时创建容器的主进程。它充当了容器运行时和容器进程之间的中介,并提供了容器进程的生命周期管理和监控功能。

5. 其他容器运行时:

  • 除了上述常见的容器运行时之外,还有一些其他的容器运行时,如 rkt、cri-o、runc 等。

image.gif 编辑

Kube-proxy 服务代理与负载均衡

Kube-proxy是Kubernetes集群中的一个关键组件,负责为Service提供集群内部的服务发现和负载均衡。它运行在每个Node计算节点上,充当Pod网络代理的角色,确保Service的稳定性和可访问性。

Kube-proxy的主要功能包括:

  1. 服务发现:Kube-proxy通过监听API Server来获取Service和Endpoint的变化信息。一旦Service或Endpoint的状态发生改变,Kube-proxy会及时更新其本地缓存,并根据这些变化来调整网络规则和负载均衡策略。
  2. 负载均衡:Kube-proxy负责将到达Service的流量分发到后端的Pod上。它支持多种负载均衡策略,如随机选择、轮询等,以确保流量能够均匀地分布到各个Pod上。这种负载均衡机制有助于提高系统的吞吐量和可靠性。
  3. 网络规则维护:Kube-proxy根据Service的定义创建相应的iptables或IPVS规则,以确保流量能够正确地路由到目标Pod。这些规则包括将到达Service Cluster IP的流量转发到后端Pod的IP,以及处理跨Node的流量转发等。

Kube-proxy的负载均衡策略可以根据实际需求进行配置和调整。在默认情况下,Kube-proxy使用iptables模式进行负载均衡。在这种模式下,Kube-proxy会为每个Service创建一个监听端口,并将发向Cluster IP的请求重定向到该端口。然后,根据负载均衡算法选择一个后端Pod进行处理。

除了iptables模式外,Kube-proxy还支持其他负载均衡模式,如userspace模式和IPVS模式。Userspace模式下,Kube-proxy会作为一个四层的代理服务器来处理请求和转发流量。而IPVS模式则利用Linux内核中的IPVS模块来实现更高效的负载均衡。

image.gif 编辑

由于篇幅的原因, 关于k8s资源对象和管理运维的分解,我们会在下一章节进行介绍

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
21天前
|
Kubernetes API 调度
k8s 到底是什么,架构是怎么样的?
Kubernetes(k8s)是Google开源的容器集群管理系统,它通过YAML文件自动化应用部署、扩展和管理。k8s架构包含控制平面(API Server、Scheduler、Controller Manager和etcd)和工作节点(Node,含kubelet、Container runtime、Kube Proxy等)。控制平面负责调度和管理,Node执行任务。kubectl是命令行工具,用于与k8s交互。k8s通过Ingress暴露服务,并通过Pod作为最小调度单位管理容器。Docker通常与k8s结合使用,提供容器化应用,但二者并非同一概念。
48 4
k8s 到底是什么,架构是怎么样的?
|
25天前
|
运维 Kubernetes 监控
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
34 0
|
1月前
|
XML 运维 前端开发
LAMP架构调优(四)——资源压缩传输
LAMP架构调优(四)——资源压缩传输
15 2
|
1月前
|
存储 Kubernetes 负载均衡
Kubernetes的“厨房”:架构是菜谱,组件是厨具,资源对象是食材(下)
本文深入探讨了Kubernetes(K8s)的架构、核心组件以及资源对象。Kubernetes作为一个开源的容器编排系统,通过其独特的架构设计和丰富的组件,实现了对容器化应用程序的高效管理和扩展。通过本文的介绍,读者可以深入了解Kubernetes的架构、核心组件以及资源对象,从而更好地应用和管理容器化应用程序。Kubernetes的灵活性和可扩展性使得它成为容器编排领域的领先者,为企业提供了强大的容器运行环境。
|
28天前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
33 0
|
28天前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
14天前
|
JSON Kubernetes 网络架构
Kubernetes CNI 网络模型及常见开源组件
【4月更文挑战第13天】目前主流的容器网络模型是CoreOS 公司推出的 Container Network Interface(CNI)模型
|
15天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
25天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
18 0
|
1月前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【2月更文挑战第29天】在当今快速发展的软件开发领域,微服务架构已成为提高系统可维护性、扩展性和敏捷性的关键解决方案。本文将深入探讨如何利用Docker容器化技术和Kubernetes集群管理工具,共同构建一个既高效又可靠的微服务环境。我们将分析Docker和Kubernetes的核心功能,并展示它们如何协同工作以简化部署流程、增强服务发现机制以及实现无缝的服务伸缩。通过实际案例分析,本文旨在为开发者提供一套实用的微服务架构设计和实施指南。

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版