什么是Kubernetes?K8s基础与工作原理

什么是 Kubernetes(K8s)?

Kubernetes,通常简称为 K8s,是一个用于自动化部署、扩展和管理容器化应用程序的开源容器编排平台。它由 Google 于 2014 年开源,后来交由 CNCF(Cloud Native Computing Foundation)管理。Kubernetes 的名字来自希腊语,意思是“舵手”或“飞行员”,表明它的作用是为容器化应用提供控制与调度。

Kubernetes 解决了容器管理的复杂性,通过集群化的方式将一组物理或虚拟机器组织起来,形成一个统一的计算资源池,并在这个资源池上自动化地部署、扩展、负载均衡和恢复应用程序。


Kubernetes 的基础组件

Kubernetes 的架构分为两个主要部分:控制平面(Control Plane)和工作节点(Worker Nodes)。这两者共同管理和调度容器化应用的生命周期。

1. 控制平面(Control Plane)

控制平面是 Kubernetes 的“大脑”,负责集群的管理和调度工作。其核心组件包括:

  • API Server:API Server 是 Kubernetes 集群的入口,负责处理所有的 API 请求。开发者、运维人员、以及 Kubernetes 内部组件都通过 API Server 来与 Kubernetes 交互。它是整个集群管理的核心组件。

  • Etcd:Kubernetes 使用 etcd 作为分布式键值存储,用于存储集群的所有状态数据。Etcd 是集群的一致性数据存储,保存着集群的配置、Pod 的状态信息等。

  • Controller Manager:它负责管理 Kubernetes 的各种控制器,包括节点控制器、复制控制器等。控制器负责监控集群的状态,确保实际状态与期望状态一致。例如,如果某个 Pod 异常退出,控制器将启动新的 Pod 进行替换。

  • Scheduler:调度器负责为未分配的 Pod 选择合适的节点(Node)来运行。它根据资源利用率、节点健康状况等多种因素来做出决策,确保应用的高可用性和性能。

2. 工作节点(Worker Nodes)

工作节点是实际运行容器化应用程序的地方。每个节点上都有几个关键组件:

  • Kubelet:这是在每个节点上运行的主要代理进程,负责与控制平面通信,并执行调度器分配的任务。它会监控 Pod 的状态,并向控制平面报告。

  • Kube-proxy:这是 Kubernetes 内部的网络代理,负责为每个 Pod 提供网络通信,并实现服务的负载均衡。

  • Container Runtime:这是在节点上负责运行容器的实际工具,常见的有 Docker、containerd 等。Kubernetes 支持多种容器运行时接口(CRI)。


Kubernetes 的核心概念

Kubernetes 提供了一系列抽象层,用来管理容器化应用的运行、扩展、和故障恢复。以下是 Kubernetes 中几个关键的抽象和概念:

1. Pod

Pod 是 Kubernetes 的最小部署单元,代表着运行在集群上的一个或多个容器。通常,容器会共享同一个 Pod 的网络和存储资源。尽管每个 Pod 通常只包含一个容器,但也可以将多个紧密耦合的容器放在同一个 Pod 中共同工作。

2. Service

Service 是 Kubernetes 提供的持久服务抽象,用于定义一组运行在 Pod 上的容器服务。它为这些容器分配一个静态 IP 地址和 DNS 名称,并负责负载均衡。通过 Service,可以实现在 Pod 动态创建和销毁的情况下保持外部的访问稳定。

3. Deployment

Deployment 是一种声明式的资源对象,负责管理 Pod 的副本数、滚动更新等。它可以保证某个应用的指定数量的副本始终在集群中运行,并且提供了自动滚动更新、回滚等功能。

4. Namespace

Namespace 是 Kubernetes 中用来进行资源隔离的逻辑分组机制。不同的 Namespace 中可以有相同名称的资源对象,它们之间互不影响。常用来对大型集群进行资源管理和权限隔离。

5. Ingress

Ingress 是 Kubernetes 提供的入口资源,用来控制从外部流量如何进入集群内部的服务。通过 Ingress,可以定义 HTTP 和 HTTPS 路由规则,将外部请求转发给相应的服务。


Kubernetes 的工作原理

Kubernetes 的核心工作原理是基于 声明式管理(Declarative Management)和 控制循环(Control Loop)来实现的。用户通过配置文件定义期望的集群状态,Kubernetes 通过控制器不断对比实际状态和期望状态,并自动进行调整,使两者保持一致。

1. 声明式管理

在 Kubernetes 中,用户通过声明式配置文件(通常为 YAML 或 JSON 格式)来定义期望的状态。这个期望状态可以包括应用运行的 Pod 数量、容器镜像版本、服务的暴露方式等。

当用户提交这些配置文件后,Kubernetes 的控制平面会将这些声明保存到 etcd 中,并开始调度和管理相应的资源,直到集群的实际状态与声明的期望状态一致。

2. 控制循环

控制循环是 Kubernetes 的核心原理之一。它不断监控集群的实际状态(如 Pod 的数量、健康状况等),并与期望状态进行比较。如果检测到差异,控制器会采取行动修复这些差异。例如,如果某个 Pod 异常退出,控制器会自动创建新的 Pod,以恢复到期望的副本数。

这个循环持续不断地运行,确保 Kubernetes 集群始终处于一致的状态,无需手动干预。

3. 调度与扩展

当用户定义了 Pod 或 Deployment,Kubernetes 的调度器会根据当前集群的资源情况选择合适的节点运行这些 Pod。Kubernetes 支持横向自动扩展(Horizontal Pod Autoscaler),可以根据 Pod 的 CPU 或内存使用情况动态增加或减少 Pod 的数量。

4. 自愈能力

Kubernetes 具备强大的自愈能力,能够在应用或节点出现故障时,自动进行修复。例如,当某个节点失效时,Kubernetes 会自动将该节点上运行的容器重新调度到其他健康的节点上运行,确保应用的高可用性。


Kubernetes 的优势

  1. 自动化管理:Kubernetes 能够自动调度、扩展和恢复应用,减少了人工干预的需要,提高了系统的可管理性。

  2. 弹性与扩展性:Kubernetes 支持自动扩展容器集群,可以根据流量动态调整资源,确保系统的性能和稳定性。

  3. 自愈能力:Kubernetes 能够自动检测应用故障并进行修复,保证系统的高可用性。

  4. 跨平台支持:Kubernetes 支持多种云平台和本地部署环境,使得应用能够轻松迁移和扩展,避免厂商锁定。


总结

Kubernetes 是一个强大的容器编排平台,通过抽象复杂的基础设施细节,提供了一种声明式的管理方式。其核心组件包括控制平面和工作节点,利用声明式配置和控制循环来管理容器化应用的生命周期。借助 Kubernetes,开发和运维人员能够更高效地管理、扩展和维护容器化的应用程序,从而大幅提升系统的可扩展性、可靠性和自动化管理水平。

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

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

相关文章

C++ | Leetcode C++题解之第516题最长回文子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int n s.length();vector<vector<int>> dp(n, vector<int>(n));for (int i n - 1; i > 0; i--) {dp[i][i] 1;char c1 s[i];for (int j i 1; j…

2-135 基于matlab的有限差分法计算电位分布

基于matlab的有限差分法计算电位分布&#xff0c;设置目标尺寸的矩形区域&#xff0c;设置矩形区域内的网格数量&#xff0c;根据网格位置在区域内设置电位&#xff0c;实现电位分布计算。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-135 基于matlab…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

【Redis】内存淘汰策略

文章目录 什么是内存淘汰策略设置Redis最大内存执行内存淘汰策略的流程Redis的八大内存淘汰策略深入源码进行理解内存淘汰策略流程 什么是内存淘汰策略 Redis内存淘汰策略是指当Redis的内存使用达到其配置的最大内存限制&#xff08;maxmemory&#xff09;时&#xff0c;Redis…

论文笔记(五十)Segmentation-driven 6D Object Pose Estimation

Segmentation-driven 6D Object Pose Estimation 文章概括摘要1. 引言2. 相关工作3. 方法3.1 网络架构3.2 分割流3.3 回归流3.4 推理策略 4. 实验4.1 评估 Occluded-LINEMOD4.1.1 与最先进技术的比较4.1.2 不同融合策略的比较4.1.3 与人体姿态方法的比较 4.2 在YCB-Video上的评…

uniapp使用easyinput文本框显示输入的字数和限制的字数

uniapp使用easyinput文本框显示输入的字数和限制的字数 先上效果图&#xff1a; 整体代码如下&#xff1a; <template><view class"nameInfoContent"><uni-easyinput class"uni-mt-5" suffixIcon"checkmarkempty" v-model&quo…

【MyBatis源码】SqlSessionFactoryBuilder源码分析

文章目录 概述类结构从 InputStream 创建 SqlSessionFactoryXMLConfigBuilder构建ConfigurationXMLConfigBuilder初始化方法parse()方法parseConfiguration属性&#xff08;properties&#xff09; 概述 SqlSessionFactory 是 MyBatis 的核心接口之一&#xff0c;提供创建 Sql…

vue通过JSON文件生成WPML文件源码

可以使用封装的json解析器进行JSON数据获取&#xff0c;读取点的经度、维度、高程等数据&#xff0c;再使用对应的WPML文件生成函数使用该源码下载WPML文件&#xff08;固定WPML生成&#xff1a;js模板式生成大疆上云wpml文件&#xff08;含详细注释&#xff0c;已封装成函数&a…

(7) cuda异常处理

文章目录 上节概要异常处理代码 上节概要 上一节 block_width 64的时候&#xff0c;64644096 > 1024&#xff08;一个block里面最多只能有1024个线程&#xff0c;所以这里计算会有问题&#xff09; 异常处理 __FILE__: 编译器内部定义的一个宏。表示的是当前文件的文件…

【C++单调栈 贡献法】907. 子数组的最小值之和|1975

本文涉及的基础知识点 C单调栈 LeetCode907. 子数组的最小值之和 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 109 7 。 示例 1&#x…

项目:Boost 搜索引擎

项目&#xff1a;Boost 搜索引擎 1、项目背景 公司&#xff1a;百度、360、搜狗、谷歌 …站内搜索&#xff1a;搜索的数据更垂直&#xff08;相关&#xff09;&#xff0c;数据量小 2、整体框架 3、技术栈和项目环境 技术栈&#xff1a;C/C C11&#xff0c;STL&#xff0c;jso…

error Unexpected mutation of “xxxxx“ prop

错误是在进行 eslint 检查的时候触发的&#xff0c;这个错误的原因是我们在子组件中改变了父组件传递过来的 props 解决方法一&#xff1a; 不改变父组件传递过来的 props&#xff0c;如果需要改变父组件传递过来的值&#xff0c;可以使用 defineModel() 进行接收值&#xff…

【零售和消费品&软件包】快递包装类型检测系统源码&数据集全套:改进yolo11-HSPAN

改进yolo11-EfficientHead等200全套创新点大全&#xff1a;快递包装类型检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统…

STM32第15章 RCC-使用HSE/HSI配置时钟

时间:2024.10.21-10.23 参考资料: 《零死角玩转STM32》“RCC-使用HSE/HIS配置时钟”章节 TIPS: 从前面的历程中我们知道,程序在启动的时候会执行汇编文件,汇编文件里会调用System_Init(固件库编程的函数),它里面会把时钟初始化成72M,因此前面我们在用固件库写程序的…

MSR寄存器独有的还是共享的

英特尔白皮书Volume 4: Model-Specific Registers 这一章列出了不同英特尔处理器系列的 MSR&#xff08;模型特定寄存器&#xff09;。所有列出的 MSR 都可以使用 RDMSR 和 WRMSR 指令进行读取和写入。MSR 的作用域定义了访问相同 MSR 的处理器集合&#xff0c;具体如下&#x…

栈和队列(上)-栈

1. 栈的概念 引入: 我们平时拿羽毛球,是从盒子顶部的羽毛球开始拿的,而顶部的元素是我们最后放进去的. 栈: 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后…

温泉押金原路退回系统, 押金+手牌+电子押金单——未来之窗行业应用跨平台架构

一、温泉手牌收押金必要性 1. 防止手牌丢失&#xff1a;手牌是顾客在温泉内存储个人物品和进出更衣室的重要凭证。收押金可以让顾客更加重视手牌&#xff0c;降低丢失的概率。比如说&#xff0c;有的顾客可能会因为粗心大意随手放置手牌&#xff0c;如果没有押金的约束&…

STM32之外部中断(实验对射式传感器计次实验)

外部中断配置 #include "stm32f10x.h" // Device headeruint16_t CountSensor_Count;void CountSensor_Init(void) {//RCC--> GPIO--> AFIO--> EXTI--> NVIC五步RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB时…

图---java---黑马

图 概念 图是由顶点(vertex)和边(edge)组成的数据结构&#xff0c;例如 该图有四个顶点&#xff1a;A&#xff0c;B&#xff0c;C&#xff0c;D以及四条有向边&#xff0c;有向图中&#xff0c;边是单向的。 有向 vs 无向 如果是无向图&#xff0c;那么边是双向的&#x…