首页 > 其他分享 >k8s之容器运行时

k8s之容器运行时

时间:2024-04-16 09:55:43浏览次数:29  
标签:容器 k8s Container kubelet CRI 运行 cri Runtime

Kubernetes 中的容器运行时

容器运行时(Container Runtime)是 Kubernetes 最重要的组件之一,负责真正管理镜像和容器的生命周期。Kubelet 通过 Container Runtime Interface (CRI) 与容器运行时交互,以管理镜像和容器。

​ 容器运行时接口(Container Runtime Interface (CRI)) 是 Kubelet 1.5 和 kubelet 1.6 中主要负责的一块项目,它重新定义了 Kubelet Container Runtime API,将原来完全面向 Pod 级别的 API 拆分成面向 SandboxContainer 的 API,并分离镜像管理和容器引擎到不同的服务。

img

CRI 最早从从 1.4 版就开始设计讨论和开发,在 v1.5 中发布第一个测试版。在 v1.6 时已经有了很多外部容器运行时,如 frakti、cri-o 的 alpha 支持。v1.7 版本新增了 cri-containerd 的 alpha 支持,而 frakticri-o 则升级到 beta 支持。

1. CRI 接口


CRI 基于 gRPC 定义了 RuntimeServiceImageService,分别用于容器运行时和镜像的管理。其定义在

Kubelet 作为 CRI 的客户端,而 Runtime 维护者则需要实现 CRI 服务端,并在启动 kubelet 时将其传入:

kubelet --container-runtime=remote --container-runtime-endpoint=unix:///var/run/crio/crio.sock ..

2. 如何开发新的 Container Runtime

开发新的 Container Runtime 只需要实现 CRI gRPC Server,包括 RuntimeServiceImageService。该 gRPC Server 需要监听在本地的 unix socket(Linux 支持 unix socket 格式,Windows 支持 tcp 格式)。

具体的实现方法可以参考下面已经支持的 Container Runtime 列表。

3. 目前支持的 Container Runtime


目前,有多家厂商都在基于 CRI 集成自己的容器引擎,其中包括:

  • Docker: 核心代码依然保留在 kubelet 内部(pkg/kubelet/dockershim),依然是最稳定和特性支持最好的 Runtime
  • HyperContainer: 支持 Kubernetes v1.6+,提供基于 hypervisor 和 docker 的混合运行时,适用于运行非可信应用,如多租户和 NFV 等场景
  • Runc 有两个实现,cri-o 和 cri-containerd
    • cri-containerd: 支持 kubernetes v1.7+
    • cri-o: 支持 Kubernetes v1.6+,底层运行时支持 runc 和 intel clear container
  • Rkt: 开发中
  • Mirantis: 直接管理 libvirt 虚拟机,镜像须是 qcow2 格式
  • Infranetes: 直接管理 IaaS 平台虚拟机,如 GCE、AWS 等

cri-containerd

以 Containerd 为例,在 1.0 及以前版本将 dockershimdocker daemon 替换为 cri-containerd + containerd,而在 1.1 版本直接将 cri-containerd 内置在 Containerd 中,简化为一个 CRI 插件。

img

Containerd 内置的 CRI 插件实现了 Kubelet CRI 接口中的 Image ServiceRuntime Service,通过内部接口管理容器和镜像,并通过 CNI 插件给 Pod 配置网络。

img

4. CRI Tools


为了方便开发、调试和验证新的 Container Runtime,社区还维护了一个 cri-tools 工具,它提供两个组件

  • crictl: 类似于 docker 的命令行工具,不需要通过 Kubelet 就可以跟 Container Runtime 通信,可用来调试或排查问题
  • critest: CRI 的验证测试工具,用来验证新的 Container Runtime 是否实现了 CRI 需要的功能

另外一个工具是 libpod,它也提供了一个组件: podman,功能和 crictl 类似。

如果想构建 oci 格式的镜像,可以使用工具: buildah

转载自:Kubernetes 中的容器运行时 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生 (icloudnative.io)

标签:容器,k8s,Container,kubelet,CRI,运行,cri,Runtime
From: https://www.cnblogs.com/nwnusun/p/18137490

相关文章

  • PP-HumanSeg安装、运行、基于PP-HumanSegV2-Lite训练、测试(ubuntu虚拟机 cpu版本)
    参考paddleseg官网【PaddleSeg实践范例】PP-HumanSegV2SOTA人像分割方案github的readme: https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/README_CN.md零、准备工作0.安装Anacondaubantu下安装Anaconda、pycharm1.用conda创建虚拟环境#1.查询conda环......
  • Docker容器配置redis集群
    前言Redis集群是一种分布式数据库解决方案,旨在提供高性能、高可用性、可扩展性的数据存储服务。目前比较普遍流行的搭配则是三主三从配置,共6台redis服务进行集群配置。Redis的三主三从配置是一种集群模式,其中包含三个主节点和三个从节点。每个从节点对应一个主节点,当主......
  • 苹果 iOS 18 的首批 AI 功能将完全运行于设备端
    苹果计划为iOS18推出的首批AI功能将完全在端侧上运行,不依赖云服务器。iOS18预计不会包含苹果自己的类ChatGPT的聊天机器人,但目前还不清楚Gemini或其他聊天机器人是否会直接集成到iOS18中。Gurman表示,目前看来苹果即将在WWDC上发布的AI技术将完全在设备本地运......
  • Higress 全新 Wasm 运行时,性能大幅提升
    本文作者:澄潭,阿里云API网关软件工程师,Higress开源项目主要贡献者何良,IntelWebPlatformEngineering软件工程师,WAMR开源项目主要贡献者本文介绍Higress将Wasm插件的运行时从V8切换到WebAssemblyMicroRuntime(WAMR)的最新进展。通过切换到WAMR并开启AOT模......
  • vscode深度debug, 解决import包无法check运行流程的问题。
    解决方法:通过修改VSCode的launch.json文件。参考:用vscode调试python程序与launch.json的修改-知乎(zhihu.com)解决vscode在库里无法打断点问题-知乎(zhihu.com)问题描述:debug无法进入封装成package的包内。具体修改方法:创建launch.json文件;修改为下......
  • 用k8s的networkpolicy模拟租户隔离、组间pod隔离
    pod之间的通信默认是不隔离的,他们之是能相互通信的,但如果你想通过IP地址或者端口来管理网络通信,那么就可以使用k8s的networkpolicy功能。该功能的实现原理是默认都不通过,显示添加白名单。如果指定namespace,那么该networkpolicy生效的范围是本namespace内。如果没有指定namespace,......
  • MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
    问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError:UnsupporteddevicetargetGPU.Thisprocessonlysupportsoneofthe['CPU'].PleasecheckwhethertheGPUenvironmentisinstalledandconfiguredcorrectly,andcheckwhethercu......
  • Ubuntu20.04开机黑屏左上角光标闪烁,以及移除Nvidia驱动后造成的无法启动docker容器问
      这几天系统更新,显卡驱动由525.147.05升级到了535.171.04(tested),终端运行watch-n1nvidia-smi实时显示显卡占用情况时,偶尔出现FailedtoinitializeNVML:Driver/libraryversionmismatch问题,于是将驱动切换成openkernal版本,重启后黑屏左上角光标闪烁,于是尝试使用命令......
  • k8s资深工程师必备技能
    Kubernetes核心概念和技术:节点、容器、Pod、控制器、服务、部署、卷等。高级容器编排:滚动更新、回滚、扩缩容、故障恢复、自愈等。Kubernetes网络模型:CNI插件、Service、Ingress、NetworkPolicy等。Kubernetes存储模型:Volume、PV、PVC、CSI等。Kubernetes安全:RBAC、ServiceAc......
  • 详解K8s 镜像缓存管理kube-fledged
    本文分享自华为云社区《K8s镜像缓存管理kube-fledged认知》,作者:山河已无恙。我们知道 k8s 上的容器调度需要在调度的节点行拉取当前容器的镜像,在一些特殊场景中,需要快速启动和/或扩展的应用程序。例如,由于数据量激增,执行实时数据处理的应用程序需要快速扩展。镜像比......