Kubernetes集群架构

Kubernetes集群架构

  • Kubernetes 集群架构
    • 控制平面组件
      • kube-apiserver
      • etcd
      • kube-scheduler
      • kube-controller-manager
      • cloud-controller-manager
    • 节点组件
      • kubelet
      • kebe-proxy(可选)
      • 容器运行时
    • 插件
      • DNS
      • Web UI(Dashboard)
      • 容器资源监控
      • 集群级日志输出
      • 网络插件
    • 架构变体
      • 控制平面部署选项
      • 工作负载调度说明
      • 集群管理工具
      • 定制和可扩展性
  • 链接

Kubernetes 集群架构

Kubernetes 集群由一个控制平面和一系列称为节点(Node)的工作机器组成,在这些节点上运行容器化的应用。一个集群至少需要一个 worker 节点来运行 Pod。

worker 节点负责托管应用的工作负载 Pod,控制平面负责管理集群中的所有 worker 节点和 pod。在生产环境中,控制平面通常跨多台计算机运行,且一个集群中通常运行多个节点,从而保障系统的容错性和可用性。

文章概述了 Kubernetes 的整体架构,并对架构中的组件进行扼要介绍。

在这里插入图片描述

  • 上图展示了 Kubernetes 集群的参考示例架构。架构中的具体组件会因具体需求有不同的设置。
  • 上图中的节点中默认运行 kube-proxy 组件,需要在每个节点上对该组件进行网络配置,以确保服务应用程序接口(Service API)及其相关功能在集群网络中可用。不过,有些网络插件提供了它们自己的第三方代理实现方式。在使用这类网络插件时,节点就无需运行 kube-proxy 组件了。

控制平面组件

控制平面中的组件负责对集群做出全局决策(例如,资源调度),以及检测和响应集群事件(例如,当 Deployment 的 replicas 字段不满足时启动新的 pod )。

控制平面组件可以在集群中的任何计算机上运行。但是,为简单起见,安装脚本通常在同一台机器上启动所有控制平面组件,并且不会在此机器上运行用户容器。有关跨多台计算机运行的控制平面的示例,请参阅使用 kubeadm 创建高可用性集群。

kube-apiserver

API 服务是 kubernetes 控制平面的一个组件,作为 Kubernetes 控制平面的前端,用来公布 Kubernetes API,并处理服务请求。

kube-apiserver 是 Kubernetes API 服务的一个主要实现。kube-apiserver 被设计为可水平伸缩的,也就是说,可以通过部署多个实例,来平衡实例之间的访问流量。

etcd

高一致性和高可用性的键值对存储,用作 Kubernetes 所有集群数据的后台数据库。

在使用 etcd 作为 Kubernetes 集群的后台存储时,应该制定相应的数据备份计划。

kube-scheduler

kube-scheduler 组件监听没有分配节点的新创建 Pod,为其选择一个节点来运行。

调度决策的因素有:单个 Pod 和 Pod 集合的资源要求、硬件/软件/策略约束、亲和性1和反亲和性2规范、数据位置、工作负载间干扰和最后时限。

kube-controller-manager

一个运行 controller3 进程的控制平面组件。

从逻辑上讲,每个控制器都是一个独立的进程。为了降低复杂性,它们都被编译成一个独立的二进制文件,并在单个进程中运行。

控制器有许多不同类型,包括但不限于以下类型:

  • 节点控制器:负责在节点宕机时进行通知和响应。
  • Job 控制器:监视代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务直到完成。
  • EndpointSlice 控制器:填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接)。
  • ServiceAccount 控制器:为新命名空间创建默认 ServiceAccount。

cloud-controller-manager

Kubernetes 的控制平面组件,嵌入了特定于云平台的控制逻辑。云控制器管理器允许用户将集群链接到云供应商的 API,并将与该云平台交互的组件与集群交互组件解耦。

cloud-controller-manager 运行的控制器特定于云供应商提供的云平台。如果在本地 PC 内的学习环境中运行 Kubernetes,则集群不需要启动云控制器管理器组件。

与 kube-controller-manager 一样,cloud-controller-manager 将几个逻辑上独立的控制循环打包成一个二进制文件,作为单个进程运行。可以水平扩展(运行多个副本)以提高性能和提升故障容忍度4

下列控制器中可能会包含对云供应商的依赖:

  • 节点控制器:用于检查确定节点在停止响应后,云供应商以是否从云中删除节点
  • 路由控制器:用于在底层云基础设施中设置路由
  • 服务控制器:用于创建、更新和删除云供应商负载均衡器

节点组件

Node 组件在每个节点上运行,维护正在运行的 Pod 并提供 Kubernetes 运行时环境。

kubelet

在集群中的每个节点上运行的代理。它确保容器在 Pod 中运行。

kubelet 采用一组通过各种机制提供的 PodSpec,并确保这些 PodSpec 中描述的容器正在运行且健康。kubelet 不管理不是由 Kubernetes 创建的容器。

kebe-proxy(可选)

kube-proxy 是一个网络代理,运行在集群中的每个节点上,实现了 Kubernetes Service5 的一部分。

kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络连接 Pod 进行网络通信。

在操作系统数据包过滤层有效的情况下,kube-proxy 使用操作系统的数据包过滤层5,否则,kube-proxy 会对流量本身进行转发。

如果在集群中已经使用了网络插件,且插件本身实现了 Services 的数据转发,提供与 kube-proxy 等效的行为,那么就无须在集群节点上运行 kube-proxy 组件。

容器运行时

保障 Kubernetes 能够有效运行容器的基本组件。它负责管理 Kubernetes 环境中容器的执行和生命周期。

Kubernetes 支持容器运行时,例如containerd、CRI-O 以及 Kubernetes CRI (Container RuntimeInterface)6 的任何其他实现。

插件

插件使用 Kubernetes 资源(DaemonSet、Deployment 等)来实现集群功能。由于这些插件提供的是集群级别的功能,所以插件的命名空间资源属于 kube-system 命名空间。

下文列举常用插件,有关可用插件的扩展列表,请参阅 Addons。

DNS

DNS 插件不是必须使用,但是建议每个 Kubernetes 集群都应该有集群 DNS,大多数实例都依赖于它。

集群 DNS 是一个 DNS 服务器,除了环境中的其他 DNS 服务器之外,它还为 Kubernetes 服务提供 DNS 记录。

Kubernetes 启动的容器会自动将此 DNS 服务器包含在其 DNS 搜索中。

Web UI(Dashboard)

Dashboard 是适用于 Kubernetes 集群的基于 Web 的通用 UI。它允许用户管理集群中运行的应用程序以及集群本身,并对其进行故障排除。

容器资源监控

容器资源监控(Container Resource Monitoring) 在中央数据库中记录有关容器的通用时间序列指标,并提供用于浏览这些数据的 UI。

集群级日志输出

集群级日志记录机制负责将容器日志保存到具有搜索/浏览界面的中央日志存储中。

网络插件

网络插件是实现容器网络接口 (CNI) 规范的软件组件。它们负责为 Pod 分配 IP 地址,并使它们能够在集群内相互通信。

架构变体

虽然 Kubernetes 的核心组件保持一致,但它们的部署和管理方式可能会有所不同。了解这些变化对于设计和维护满足特定运营需求的 Kubernetes 集群至关重要。

控制平面部署选项

控制平面组件可以通过多种方式进行部署:

传统部署
控制平面组件直接在专用机器或 VM 上运行,通常作为 systemd 服务进行管理。
静态 Pod
控制平面组件部署为静态 Pod,由特定节点上的 kubelet 管理。这是 kubeadm 等工具常用的方法。
自托管
控制平面在 Kubernetes 集群本身中作为 Pod 运行,由 Deployments 和 StatefulSets 或其他 Kubernetes 原语管理。
托管 Kubernetes 服务
云供应商通常会抽象出控制平面,将其组件作为其服务产品的一部分进行管理。

工作负载调度说明

工作负载(包括控制平面组件)的调度可能因集群大小、性能要求和操作策略而异:

  • 在较小的集群或开发集群中,控制平面组件和用户工作负载可能在同一节点上运行。
  • 较大的生产集群通常将特定节点专用于控制平面组件,将它们与用户工作负载分开。
  • 一些组织在控制平面节点上运行关键的附加组件或监控工具。

集群管理工具

kubeadm、kops 和 Kubespray 等工具提供了不同的方法来部署和管理集群,每种方法都有自己的组件布局和管理方法。

Kubernetes 架构的灵活性使组织能够根据特定需求定制其集群,平衡运营复杂性、性能和管理开销等因素。

定制和可扩展性

Kubernetes 架构允许进行重大定制:

  • 可以部署自定义调度程序以与默认 Kubernetes 调度程序一起使用,也可以完全替换它
  • API 服务器可以通过 CustomResourceDefinitions 和 API 聚合进行扩展
  • 云供应商可以使用 cloud-controller-manager 与 Kubernetes 深度集成

Kubernetes 架构的灵活性使组织能够根据特定需求定制其集群,平衡运营复杂性、性能和管理开销等因素。

链接

  • Kubernetes Cluster Architecture
  • 使用 kubeadm 创建高可用性集群
  • kube-apiserver
  • Kubernetes etcd 集群运维
  • etcd 官方文档
  • controller
  • kubelet
  • Service
  • kube-proxy
  • Kubernetes Addons
  • 集群 DNS
  • Dashboard
  • 容器资源监控(Container Resource Monitoring)
  • 集群级日志记录
  • 网络插件

  1. 在 Kubernetes(k8s)中,亲和性是一种调度策略,用于定义 Pod 更倾向于被调度到哪些节点或者与其他 Pod 部署在相近的位置。它允许基于节点的标签(Label)和 Pod 的标签来指定调度规则,使 Pod 能够根据特定的条件被放置在合适的节点上。 ↩︎

  2. 与亲和性相反,反亲和性是一种调度策略,用于确保 Pod 不会被调度到某些节点或者不会与某些 Pod 部署在相近的位置。它主要用于高可用(HA)和故障隔离等场景,避免单点故障或者资源竞争等问题。 ↩︎

  3. 在K8S中,controller 是一种控制循环机制,它会持续监控集群的状态,将实际状态与期望状态进行对比,并自动采取措施(如创建、更新或删除资源)来使实际状态向期望状态收敛。 ↩︎

  4. 在 Kubernetes(K8S)中,故障容忍度(Fault Tolerance)是指系统(主要是指由 Kubernetes 管理的容器化应用集群)能够在部分组件(如节点、Pod 等)出现故障的情况下,依然可以提供服务,维持应用程序的正常运行,并且尽可能减少对用户的影响。它是衡量系统可靠性和可用性的一个重要指标。 ↩︎

  5. 操作系统数据包过滤层是网络安全防护体系中的一个关键部分,位于操作系统的网络协议栈中,主要功能是对进出计算机系统的网络数据包进行检查和过滤。它是一种基于规则的防火墙技术,通过设定一系列规则来允许或禁止数据包的通过。 ↩︎ ↩︎

  6. Kubernetes CRI(Container Runtime Interface)是Kubernetes与容器运行时之间的接口标准,它解耦了Kubernetes和容器运行时(如Docker、containerd等),使得Kubernetes可以通过统一的接口来管理不同的容器运行时,方便更换容器运行时并确保容器生命周期管理等操作的一致性。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu

最近想用esp32做一个物联网项目,踩坑N个终于有点心得,写下来避免和我一样的小白踩无谓的坑。 写在前面: 第一,大家一定要用linux系统作为编译工具,速度上是windows无法比的,不要因为不熟悉linux而选择win…

探索大型语言模型新架构:从 MoE 到 MoA

探索大型语言模型新架构:从 MoE 到 MoA 当前,商业科技公司纷纷投身于一场激烈的竞赛,不断扩大语言模型的规模,并为其注入海量的高质量数据,试图逐步提升模型的准确性。然而,这种看似顺理成章的发展路径逐渐…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述:给你一个链表的头节点 head 和一个整数 val &#xff…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…

LAMP搭建

LAMP搭建 引子:本篇文章为LAMP的搭建流程,其中L(Ubuntu)、A(Apache)、M(Mysql)、P(PHP)。 一、L → Ubuntu Step 1:在Vmware Workstation中使…

基于高斯混合模型的数据分析及其延伸应用(具体代码分析)

一、代码分析 (一)清除工作区和命令行窗口 clear; clc;clear;:该命令用于清除 MATLAB 工作区中的所有变量,确保代码运行环境的清洁,避免之前遗留的变量对当前代码运行产生干扰。例如,如果之前运行的代码中…

成为LabVIEW自由开发者

成为LabVIEW自由开发者的体验可以非常丰富且具有挑战性,同时也充满了自我成长和多样化项目的机会。 ​ 1. 高度的灵活性与自由度 工作时间与地点:作为自由开发者,你可以自由选择工作时间和地点。你可以在家工作,也可以选择在咖啡…

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…

maven之插件调试

当使用maven进行项目管理的时候,可能会碰到一些疑难问题。网上资料很少,可能会想着直接调试定位问题。这里以maven-compiler-plugin为例: (1)准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

如何配置Cursor的显示主题模式

cursor打开代码后,默认主题显示的主要代码颜色是白色,注解是黑色的,很不习惯,摸索一下,如何配置成与VSOCDE一样的主题,方案如下。 选择菜单 "File"--"Preferences 选择“ Theme" ---&…

Windows 系统中的任务管理器是什么,打开快捷键是什么?

任务管理器是 Windows 操作系统中一个强大的工具,它允许用户监控系统的性能、启动和停止进程、管理服务、以及查看网络活动等。掌握任务管理器的快捷键可以帮助你更高效地进行这些操作。本文中简鹿办公将教你如何利用任务管理器中的快捷键来提升你的工作效率。 一、…

论文导读 | 数据库中的连接操作

1. 连接操作的背景与问题定义 在关系型数据库中,我们通常面对以下问题: 给定一个数据库实例 I \mathcal{I} I,包含若干关系(表) R { R 1 , R 2 , ⋯ , R n } \mathcal{R}\{R_1, R_2, \cdots, R_n\} R{R1​,R2​,⋯…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的…

【搜索】【推荐】大 PK

引言 在当今信息爆炸的时代,如何从海量数据中精准地为用户推荐最相关的内容成为了科技领域的关键挑战。搜推技术作为推荐系统的核心组件,扮演着至关重要的角色。本文将深入探讨这两种技术背后的方法论,剖析它们各自面临的难点,并…

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天,聊到多模态大模型,感觉可以作为2025年的一个新的探索方向。希望和大家一起学习,一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式,那便是使用ollama。…

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

流媒体内网穿透/组网/网络映射EasyNTS上云网关启动失败如何解决?

在当今的网络视频监控和远程通信领域,设备的远程访问和数据共享需求日益增长。通过EasyNTS平台,用户无需开放内网端口,即可实现内网应用的外网访问,极大地简化了网络配置和维护工作。 EasyNTS上云网关的主要作用是解决异地视频共…

力扣刷题:数组OJ篇(下)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.轮转数组(1)题目描述…

flink cdc oceanbase(binlog模式)

接上文:一文说清flink从编码到部署上线 环境:①操作系统:阿里龙蜥 7.9(平替CentOS7.9);②CPU:x86;③用户:root。 预研初衷:现在很多项目有国产化的要求&#…

【Web】0基础学Web—事件对象、事件委托(事件代理)——星级评论案例

0基础学Web—事件对象、事件委托(事件代理)——星级评论案例 事件对象关闭鼠标右键的点击事件关闭鼠标滚轮的事件点击的目标对象点击鼠标的左键0 滚轮1 右键2获得被点击的节点的名称或取相对于浏览器左上角的距离(会受页面滚动条的影响&#…