首页 > 其他分享 >【云原生篇】深入理解K8S CNI、CRI 和 CSI

【云原生篇】深入理解K8S CNI、CRI 和 CSI

时间:2024-04-09 19:58:18浏览次数:924  
标签:容器 插件 CRI CSI Kubernetes K8S CNI

在 Kubernetes (K8s) 生态系统中,CNI、CRI 和 CSI 是三个关键的接口,它们分别代表 Container Network Interface、Container Runtime Interface 和 Container Storage Interface。这些接口定义了 Kubernetes 如何与网络、容器运行时和存储系统进行交互,使得 Kubernetes 能够与各种技术栈兼容,增加了其灵活性和可扩展性。

Container Network Interface (CNI)

  • 概念:CNI 是一个标准,用于定义容器应如何在网络层面进行交互和通信。它指定了一系列网络配置和接口,容器运行时可以通过这些接口为容器配置网络。
  • 作用:CNI 使得 Kubernetes 可以无缝集成各种网络解决方案,包括但不限于 Weave, Calico, Flannel, Cilium 等。这些网络解决方案可以提供 Pod 网络、服务发现、负载均衡等功能。
  • 原理:当 Pod 被创建或删除时,Kubernetes 调用配置的 CNI 插件来分配或回收网络资源,如 IP 地址。CNI 插件负责设置 Pod 的网络命名空间、创建网络接口和设置路由规则等。

Container Runtime Interface (CRI)

  • 概念:CRI 是 Kubernetes 用来与容器运行时进行交互的标准接口。它定义了一套 RPC(远程过程调用)API,这些 API 被用来管理容器的生命周期。
  • 作用:CRI 使得 Kubernetes 能够支持多种容器运行时,如 Docker, containerd, CRI-O 等。这提高了系统的灵活性,允许用户根据自己的需要选择合适的容器运行时。
  • 原理:Kubelet 通过 CRI 与容器运行时进行通信,包括容器的启动、停止、状态查询等操作。CRI 将这些操作转换成容器运行时能够理解的命令和调用。

Container Storage Interface (CSI)

  • 概念:CSI 是一个标准接口,用于将外部存储系统(如云提供商的存储服务或本地存储系统)连接到 Kubernetes 中。它定义了一套标准的 API,用于容器和存储系统之间的交互。
  • 作用:通过 CSI,Kubernetes 用户可以使用各种存储解决方案,而无需等待 Kubernetes 本身去集成这些解决方案。这大大加快了新存储技术的采用速度,并使得存储解决方案的提供者能够更快地向市场推出他们的产品。
  • 原理:当 Kubernetes 需要挂载存储卷到 Pod 上时,它会调用 CSI 插件来创建、配置和挂载卷。同样地,当卷不再需要时,CSI 插件会负责卸载卷并执行必要的清理工作。

总的来说,CNI、CRI 和 CSI 是 Kubernetes 插件化架构的重要组成部分,它们通过定义标准接口,使得 Kubernetes 能够与多种网络、容器运行时和存储解决方案无缝集成。这种插件化和标准化的方法极大地提高了 Kubernetes 的灵活性和可扩展性,促进了云原生生态系统的健康发展。

标签:容器,插件,CRI,CSI,Kubernetes,K8S,CNI
From: https://blog.csdn.net/lin819747263/article/details/137288717

相关文章

  • vue3 + typescript 检测高德地图类型
    在ts项目中使用高德地图,为了方便使用类型检测及类型提示,需引入高德地图的类型文件,操作如下:1、引入@amap/amap-jsapi-types插件npmi-S@amap/amap-jsapi-types2、新建类型文件types/index.d.tsimport'@amap/amap-jsapi-types';3、在tsconfig.json中配置:"include":[......
  • k8s和docker的关系
    Docker和Kubernetes(通常简称为K8s)是两个独立的技术,但它们之间存在密切的关系。Docker是一种容器化平台,可以将应用程序和它们的依赖项打包到一个独立的、可移植的容器中。Docker容器封装了应用程序代码、运行时环境、系统工具和依赖项,使应用程序能够在不同的环境中以一致......
  • 13. TypeScript中的联合类型和交叉类型
    在TypeScript中,类型系统提供了多种方式来组合类型,其中最常见的就是联合类型和交叉类型。这两种类型都允许你以灵活的方式处理可能有多种类型的值。一、联合类型1.1定义在TypeScript中,联合类型是一种复合类型,表示一个值可以是几种类型之一。我们使用|符号来定义联合类型......
  • 14. TypeScript类型保护(类型缩小、类型守卫)
    类型保护是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。类型守卫是返回布尔值的常规函数,接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。TypeScript类型保护的方式类型断言类型断言是一种告诉编译器“相信我,我知道我在做什么”的方式。......
  • crictl images报错runtime connect using default endpoints: [unix:///var/run/docke
    想试试containerd运行k8s,结果报错还在找dockershim,网上找了解决方法crictl依次查找容器运行时,当查找第一个unix:///var/run/dockershim.sock没有找到,所以报错了,需要你手动指定当前kubernetes的容器运行时,使用什么,例如:kubernetes1.24+之后,dockershim已经变成了cri-docker,所以......
  • 冒泡排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列特性复杂度分析时间复杂度:最好情况:O(n)最坏情况:O(n^2)平均情况:O(n^2)空间复杂度:O(1),原地排序使用场景因为时间复杂度为O(n^2)适......
  • 优先队列的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程特性效率比普通队列高每个出队元素拥有最高优先级可以用数组、链表等数据结构实现,但是堆结构是最常用的实现方式设计实现方式:基于堆结构实现,堆结构底层基于数组实现属性:heap:存放队列元素方法:enq......
  • 插入排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置特性复杂度分析时间复杂度:最好情况:O(n),有序序列最坏情况:O(n^2),倒序序列平均情况:O(n^2),随机数列空间复杂度:O(n),原地排序使......
  • 选择排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾特性选择排序是冒泡排序的优化版本,主要优化了交换的过程在所有完全依靠交换去移动元素的排序方法中,选择排......
  • Javascript Promise用法详解
    1、约定本文的demo代码有些是伪代码,不可以直接执行。没有特殊说明,本文所有demo都是基于ES6规范。Object.method代表是静态方法,Object#method代表的是实例方法。如Promise#then代表的是Promise的实例方法,Promise.resolve代表的是Promise的静态方法.2、什么......