Kubernetes容器运行原理

news/2024/5/7 17:50:40/文章来源:https://blog.csdn.net/woshaguayi/article/details/129744186

Kubernetes容器概述

from 网络

容器能够有效地虚拟化主机操作系统(或内核)并将应用程序的依赖项与同一台机器上运行的其他容器隔离开。在容器出现之前,在同一个虚拟机 (VM) 上部署了多个应用程序,共享依赖项的任何更改都可能导致奇怪的事情发生,从而导致排障较为困难。

容器主要通过两个部分解决这个问题:容器引擎和容器镜像,容器镜像是应用程序及其依赖项的包。容器引擎在容器中运行应用程序,将其与主机上运行的其他应用程序隔离开来。这样就无需为每个应用程序运行单独的操作系统,从而提高资源利用率并降低成本。关于 Kubernetes Container 技术的解析,大家可以参考之前的文章,具体:

1. 一文彻底搞懂Container

2. K8S Container解析

当我们开始学习 Kubernetes 时,我们并不完全清楚每个 Pod 是如何分配 IP 地址以及微服务容器化后是如何正常工作。或许,我们可能或多或少了解各个组件的概念以及它们是如何独立工作。但是,在特定的环境下可能不清楚这些组件是如何关联起来。例如,我们知道什么是 CNI 插件,然而,却不理解 Kubernetes 所涉猎的组件之间是如何相互调用。因此,基于对各种核心组件的了解,以及它们如何在 Kubernetes 集群中拼接在一起,以便使得每个 Container 能够基于其所设定的环境变量正确运行,在实际的业务环境中进行有效维护便显得尤为重要。

在当前的 Kubernetes 生态体系中有多种网络解决方案以及容器运行时环境的各种选项。在本文中,笔者将试图从整个 Kubernetes 编排架构角度来阐述 Container 容器运行的基本原理,以使得大家能够更深入理解容器生态体系相关知识。

02

CRI(容器运行时接口) 架构

CRI(Container Runtime Interface)是一个插件接口,允许 Kubelet 使用不同的容器运行时。各种容器运行时实现了 CRI API,这允许用户在他们的 Kubernetes 安装中使用他们选择的容器运行时。

我们先简要了解一下 Containerd 的 CRI 插件架构。

CRI 插件是 Kubernetes 容器运行时接口 (CRI) 的实现。Containerd 与 Kubelet 在同一节点上运行,Containerd 内部的 CRI 插件处理来自 Kubelet 的所有 CRI 服务请求,并使用 Containerd 内部结构来管理容器和容器镜像。

CRI 插件使用 Containerd 来管理整个容器生命周期和所有容器镜像。如下所示,CRI 通过 CNI(容器网络接口)管理 Pod 网络。

基于上述结构图,让我们梳理下 CRI 插件如何基于 Kubelet 创建容器并运行 Pod 过程:

1、Kubelet 通过 CRI 运行时服务 API 调用 CRI 插件来创建 Pod。

2、CRI 使用 Containerd Internal 来创建和启动一个特殊的沙箱容器,并将该容器放在 Pod 的 Cgroups 和 NameSpace 命名空间中。

3、CRI 使用 CNI 配置 Pod 的网络命名空间。

4、Kubelet 随后通过 CRI 镜像服务 API 调用 CRI 插件来拉取应用容器镜像。若镜像不存在于节点上,CRI 便进一步使用 Containerd 来拉取镜像。

5、Kubelet 然后通过 CRI 运行时服务 API 调用 CRI,使用拉取的容器镜像在 Pod 内创建和启动应用程序容器。

6、CRI 使用 Containerd Internal 创建应用容器,将其放入 Pod 的 Cgroups 和 NameSpace 中,然后启动 Pod 的新应用容器。在这些步骤之后,一个 Pod 及其相应的应用程序容器被创建并运行。

03

CNI(容器网络接口)架构

作为另一个 CNCF 项目,CNI(容器网络接口)也是一个云原生计算基金会项目,由用在 Linux 容器中配置网络接口的规范和库以及许多受支持的插件组成。CNI 只关心容器的网络连接和删除容器时删除分配的资源。正因为如此,CNI 的支持范围很广,规范也很容易实现,为 Linux 容器提供基于插件的通用网络解决方案。

通常来讲,CNI 被容器运行时 CR 使用,例如 Kubernetes、Podman、CRI-O 、rkt 、Openshift、Cloud Foundry、Amazon ECS、Singularity、OpenSVC 以及 Mesos 等等。Container 或 Pod 本身最初并不具备网络接口,容器运行时使用 ADD、DEL、CHECK 等操作命令调用 CNI 插件。例如,ADD 为容器创建一个新的网络接口,并将要添加的内容的详细信息通过 JSON 有效地传递给 CNI。

那么,通常如何在 Kubernetes 中使用 CNI ?一般来讲,主要根据 CNI 配置文件以确定选用哪种 CNI 插件,具体如下所示:

1、在每个节点上配置 CNI 文件(/etc/cni/net.d/xxnet.conf),其中 xxnet.conf表示网络配置文件的名称。

2、基于 CNI 配置文件中进行二进制插件的安装部署。

3、在节点上创建 Pod 后,Kubelet 会根据 CNI 配置文件运行前两步安装的 CNI 插件。

4、基于上述进行 Pod 网络配置。

04

CRI 与 CNI 交互模型

每个网络提供者都有一个 CNI 插件,容器运行时会调用其来为 Pod 启动时配置网络。若基于 Containerd 作为容器运行时,Containerd CRI 插件调用 CNI 插件。每个网络提供商也有一个安装在每个 Kubernetes 节点上的代理,用于配置 Pod 网络。安装网络提供程序代理后,它要么随 CNI 配置一起提供,要么在节点上创建一个,然后 CRI 插件使用该代理来确定要调用哪个 CNI 插件。

CNI 配置文件的位置是可配置的,默认值为 /etc/cni/net.d/<config-file>。集群管理员需要在每个节点上提供 CNI 插件。CNI 插件的位置也是可配置的,默认值为 /opt/cni/bin。

如果将 Containerd 作为容器运行时,可以在 Containerd 配置的 [plugins."io.containerd.grpc.v1.cri".cni] 部分下指定 CNI 配置和 CNI 插件二进制文件的路径。我们以 Flannel 网络方案为例,Flanneld 是 Flannel 守护进程,通常作为守护进程安装在 kubernetes 集群上,使用 install-cni 作为初始化容器。install-cni 容器在每个节点上创建 CNI 配置文件 - /etc/cni/net.d/10-flannel.conflist。 Flanneld 创建一个 Vxlan 设备,从 Api Server 获取网络元数据并监视 Pod 上的更新。创建 Pod 时,它会为整个集群中的所有 Pod 分配路由,这些路由允许 Pod 通过其 IP 地址相互连接。

Containerd CRI Plugin 和 CNI Plugin 之间的交互模型,如下图所示:

基于上所述,Kubelet 调用 Containerd CRI 插件以创建 Pod,Containerd CRI 插件调用 CNI 插件为 Pod 配置网络。网络提供者 CNI 插件调用其他基础 CNI 插件来配置网络。

05

容器运行流程图

接下来,我们来看一下 Kubelet、Container Runtime 和 CNI 插件等它们是如何拼接在一起的,如何进行相互协作。当一个 Pod 被调度到一个节点上时,会触发不同的事件操作来启动一个 Pod。 在节点上调度 Pod 后,以下交互将进行网络配置并启动应用程序容器。具体如下所示:

最后,我们来看一个完整的 Container 运行示意图,具体如下所示:

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

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

相关文章

EMQX Enterprise 新版本发布:新增 Apache IoTDB 支持、HStreamDB 最新版以及 MongoDB 6.0 适配

我们很高兴地宣布&#xff1a;EMQX Enterprise 4.4.15 和 4.4.16 版本现已正式发布&#xff01; 本次发布增加了 Apache IoTDB 集成支持以满足工业制造海量数据存储与分析的需求&#xff0c;同时对最新版本的 HStreamDB v0.14.0 和 MongoDB&#xff08;v6.0&#xff09;进行了…

IOC/DI配置管理第三方bean

IOC/DI配置管理第三方bean1&#xff0c;IOC/DI配置管理第三方bean1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序1.2 加载properties文件1.2.1 第三方b…

花青素类荧光染料Sulfo-Cy3.5 NH2,Sulfo-Cyanine3.5 amine,磺酸基-花青素Cyanine3.5 氨基,可以用来标记蛋白

Sulfo-Cyanine3.5 amine&#xff0c;Sulfo-Cy3.5 NH2&#xff0c;Sulfo-Cyanine3.5 NH2&#xff0c;Sulfo-Cy3.5 amine&#xff0c;磺酸基-花青素Cy3.5 氨基一、产品规格&#xff1a; 1.CAS号&#xff1a;N/A 2.分子式&#xff1a;C44H52K2N4O13S4 3.分子量&#xff1a;1051.36…

如何远程连接服务器

在如今的互联网时代&#xff0c;远程连接服务器已经成为了许多人必不可少的技能。通过远程连接服务器&#xff0c;我们可以随时随地访问和管理远程服务器&#xff0c;而无需亲身前往。那么如何远程连接服务器呢?远程连接服务器注意事项是什么&#xff1f;今天小编就来跟大家分…

不用vdom的lit框架学习3:代码结构初步解析

这是lit框架的系列学习文章&#xff0c;跳转查看其他章节 不用vdom的lit框架学习1&#xff1a;安装和编译不用vdom的lit框架学习2&#xff1a;挠头的web component&#xff08;兼容性说明&#xff0c;必看&#xff09;不用vdom的lit框架学习3&#xff1a;代码结构初步解析 在补…

牛客Verilog题目(1)——超前进位加法器

今天起&#xff0c;开始统计一些做的比较难的或者可以扩展知识面的Verilog题目。 第一题来自牛客->verilog快速入门->第12题 4个二进制全加器串联的四位加法器 在此之前需要了解全加器、4个1位二进制全加器串联的四位加法器。再了解为什么要用这种超前进位加法器。’ 全…

APP小程序移动商城系统 助力电商企业拓客引流

近几年电商企业的发展湿透持续旺盛&#xff0c;加上人们线上支付习惯的普及&#xff0c;使网上商城取得了稳健的发展。网上商城系统是在为个人用户和企业用户提供人性化的全方位服务&#xff0c;为用户创造轻松预约的购物环境&#xff0c;满足消费者多样化的购物需求&#xff0…

Microsoft Remote Desktop for Mac(远程桌面连接工具)

Microsoft Remote Desktop for Mac是一款Mac OS平台上的远程桌面控制软件来自微软&#xff0c;你可以通过Microsoft Remote Desktop for mac来控制Windows或者Mac OS设备完成你的工作。microsoft远程桌面为mac译名为微软远程桌面软件&#xff0c;这是一款Mac OS平台上的远程桌面…

OpenAI Translator | 基于ChatGPT API全局翻译润色解析插件

简介 OpenAI Translator&#xff0c;一款基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端应用&#xff0c;使用 ChatGPT API 进行划词翻译和文本润色&#xff0c;借助了 ChatGPT 强大的翻译能力&#xff0c;帮助用户更流畅地阅读外语和编辑外语&#xff0c;允许跨 55 种…

Redis简单介绍-安装基本类型及其操作命令

文章目录1. redis网址2. 安装redis3. redis10大类型及操作命令3.1 key操作命令3.1.1 redis-server重启后数据不会消失3.1.2 keys * 显示所有的key3.1.3 exists 判断key是否存在&#xff0c;存在则计数加13.1.4 type 显示出类型3.1.5 del 删除指定key&#xff0c;返回结果为被删…

人工智能会给普通人带来哪些改变

最近人工智能太火了&#xff0c;很多人都听说了&#xff0c;尤其是大语言模型。可以让我们像和真人聊天一样&#xff0c;与AI对话&#xff0c;根据你所问的问题&#xff0c;AI可能像一个老师&#xff0c;像一个老人&#xff0c;像一个智者回答你的几乎所有问题。这也把有些人吓…

[openwrt]network配置生成和下发

配置脚本调用 network的配置处理入口为:/etc/init.d/boot,函数调用: /bin/config_generate脚本内容如下:

SpringCloud搭建微服务之Gateway+Jwt实现统一鉴权

1. 概述 在微服务项目中&#xff0c;需要对整个微服务系统进行权限校验&#xff0c;通常有两种方案&#xff0c;其一是每个微服务各自鉴权&#xff0c;其二是在网关统一鉴权&#xff0c;第二种方案只需要一次鉴权就行&#xff0c;避免了每个微服务重复鉴权的麻烦&#xff0c;本…

服务端测试知识汇总

目录 服务端测试思想 经济学⻆度 ⾦字塔模型 技术⻆度 HTTP协议 三次握⼿ HTTP完整请求 通信模式 URI信息 请求⽅法 请求状态码 请求/响应头 常⽤请求数据格式 COOKIE请求流程 SESSION请求流程 TOKEN请求流程 API测试维度 单接⼝测试 多个接⼝测试 …

【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具

在用深度学习模型训练完模型后&#xff0c;会有一些events.out.tfevents格式的日志信息文件&#xff0c;如下图&#xff1a; 在这类文件需要用tensorboard进行打开&#xff0c;并且查看训练过程的信息内容。 1. tensorboard安装 pip install tensorboard -i https://pypi.do…

从零开始学Python第06课:循环结构

我们在写程序的时候&#xff0c;极有可能遇到需要重复执行某条指令或某些指令的场景&#xff0c;例如我们需要每隔1秒钟在屏幕上输出一次“hello, world”并持续输出一个小时。如下所示的代码可以完成一次这样的操作&#xff0c;如果要持续输出一个小时&#xff0c;我们就需要把…

shell:简单易明白的变量和引用

目录什么是变量shell的变量类型declare定义变量的类型根据数据类型分类根据作用域分类变量的定义shell 中的引用什么是变量 可以变化的量。本质上讲&#xff0c;变量就是在程序中保存用户数据的一块内存空间&#xff0c;而变量名就是这块内存空间的地址。 shell的变量类型 s…

“先人一步”!从华为P60看手机品牌如何找到新趋势、新玩法、新增量

对大多数人来说&#xff0c;换新手机是一件充满新鲜感的事&#xff0c;新机到手让人兴奋&#xff0c;可更让老蔡这样的科技发烧友们兴奋的是“比别人更快拿上新机”。朋友圈里晒图&#xff0c;一群人向他询问使用体验&#xff0c;总能让他获得一种不错的“尝鲜感”。这种现象&a…

【javaweb】SpringBoot初次体验

工具&#xff1a;idea 创建maven文件 导入依赖&#xff0c;在pom.xml中&#xff08;在spring boot的官方文档找&#xff09; <!-- spring工程中需要继承的父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

F1-F7快恢复二极管 SOD-123 1A 50V~1000V

之前东沃电子&#xff08;DOWOSEMI&#xff09;科普过快恢复二极管ES1A-ES1J&#xff1a;SMA封装、正向平均电流1A、最大反向恢复时间35ns、型号齐全&#xff0c;具体型号有&#xff1a;ES1A、ES1B、ES1C、ES1D、ES1E、ES1G、ES1H、ES1J&#xff0c;所对应的工作峰值反向电压分…