一 实践
contained实用管理工具
http://www.ciscoedu.com.cn/details/id/252.html

containerd的默认命令行工具(crictl)也不是很好用,和docker也不兼容。

nttlabs贡献了一个名为nerdctl的containerd客户端,可以兼容docker命令行工具。于是我们就可以使用nerdctl来作为docker的替代品了。

nerdctl不仅与docker兼容,而且还支持了更多的功能:

1.支持containerd的命名空间查看,nerdctl不仅可以管理Docker容器,也可以直接管理本地的的Kubernetes pod。

2.支持将Docker Image Manifest镜像转换为OCI镜像、estargz镜像。

3.支持OCIcrypt(镜像加密)。

# 下载nerdctl
wget https://breezey-public.oss-cn-zhangjiakou.aliyuncs.com/softwares/linux/kubernetes/nerdctl-full-0.14.0-linux-amd64.tar.gz
# 解压nerdctl
tar xf nerdctl-full-0.14.0-linux-amd64.tar.gz  -C /usr/
# 验证
nerdctl ps --namespace k8s.io # --namespace string         containerd namespace, such as "moby" for Docker, "k8s.io" for Kubernetes [$CONTAINERD_NAMESPACE] (default "default")

二 理论
原文:https://blog.csdn.net/u011563903/article/details/90743853

容器历史小叙
早期的k8s runtime架构,远没这么复杂,kubelet创建容器,直接调用docker daemon,docker daemon自己调用libcontainer就把容器运行起来。

但往往,事情不会如此简单,一系列政治斗争开始了,先是大佬们认为运行时标准不能被 Docker 一家公司控制,于是就撺掇着搞了开放容器标准 OCI。Docker 则把 libcontainer 封装了一下,变成 runC 捐献出来作为 OCI 的参考实现。

再接下来就是 rkt(coreos推出的,类似docker) 想从 Docker 那边分一杯羹,希望 Kubernetes 原生支持 rkt 作为运行时,而且 PR 还真的合进去了。维护过一块业务同时接两个需求方的读者老爷应该都知道类似的事情有多坑,Kubernetes 中负责维护 kubelet 的小组 sig-node 也是被狠狠坑了一把。

大家一看这么搞可不行,今天能有 rkt,明天就能有更多幺蛾子出来,这么搞下去我们小组也不用干活了,整天搞兼容性的 bug 就够呛。于是乎,Kubernetes 1.5 推出了 CRI 机制,即容器运行时接口(Container Runtime Interface),Kubernetes 告诉大家,你们想做 Runtime 可以啊,我们也资瓷欢迎,实现这个接口就成,成功反客为主。

不过 CRI 本身只是 Kubernetes 推的一个标准,当时的 Kubernetes 尚未达到如今这般武林盟主的地位,容器运行时当然不能说我跟 Kubernetes 绑死了只提供 CRI 接口,于是就有了 shim(垫片)这个说法,一个 shim 的职责就是作为 Adapter 将各种容器运行时本身的接口适配到 Kubernetes 的 CRI 接口上。

接下来就是 Docker 要搞 Swarm 进军 PaaS 市场,于是做了个架构切分,把容器操作都移动到一个单独的 Daemon 进程 containerd 中去,让 Docker Daemon 专门负责上层的封装编排。可惜 Swarm 在 Kubernetes 面前实在是不够打,惨败之后 Docker 公司就把 containerd 项目捐给 CNCF 缩回去安心搞 Docker 企业版了。

最后就是我们在上一张图里看到的这一坨东西了,尽管现在已经有 CRI-O,containerd-plugin 这样更精简轻量的 Runtime 架构,dockershim 这一套作为经受了最多生产环境考验的方案,迄今为止仍是 Kubernetes 默认的 Runtime 实现。
————————————————

OCI, CRI
OCI(开放容器标准),规定了2点:

容器镜像要长啥样,即 ImageSpec。里面的大致规定就是你这个东西需要是一个压缩了的文件夹,文件夹里以 xxx 结构放 xxx 文件;
容器要需要能接收哪些指令,这些指令的行为是什么,即 RuntimeSpec。这里面的大致内容就是“容器”要能够执行 “create”,“start”,“stop”,“delete” 这些命令,并且行为要规范。
————————————————
强隔离容器:Kata,gVisor,Firecracker
一直以来,K8S都难以实现真正的多租户。
理想来说,平台的各个租户(tenant)之间应该无法感受到彼此的存在,表现得就像每个租户独占这整个平台一样。具体来说,我不能看到其它租户的资源,我的资源跑满了不能影响其它租户的资源使用,我也无法从网络或内核上攻击其它租户。
Kubernetes 当然做不到,其中最大的两个原因是:

kube-apiserver 是整个集群中的单例,并且没有多租户概念
默认的 oci-runtime 是 runC,而 runC 启动的容器是共享内核的
kata:

————————————————
说完了 Kata,其实 gVisor 和 Firecracker 都不言自明了,大体上都是类似的,只是:

gVisor 并不会去创建一个完整的 VM,而是实现了一个叫 “Sentry” 的用户态进程来处理容器的 syscall,而拦截 syscall 并重定向到 Sentry 的过程则由 KVM 或 ptrace 实现。
Firecracker 称自己为 microVM,即轻量级虚拟机,它本身还是基于 KVM 的,不过 KVM 通常使用 QEMU 来虚拟化除 CPU 和内存外的资源,比如 IO 设备,网络设备。Firecracker 则使用 rust 实现了最精简的设备虚拟化,为的就是压榨虚拟化的开销,越轻量越好。
————————————————
版权声明:本文为CSDN博主「Frank范」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011563903/article/details/90743853

二 1.23弃用docker 理解

https://blog.csdn.net/justlpf/article/details/120530870


K8S Runtime CRI OCI contained dockershim 理解 1.23弃用docker - 含docker containerd通用工具 nerdctl相关推荐

  1. K8S Runtime CRI OCI contained dockershim 理解(转)

    在docker/k8s时代,经常听到CRI, OCI,contained和各种shim等名词,看完本篇博文,您会有个彻底的理解. 典型的K8S Runtime架构 从最常见的Docker说起,kube ...

  2. K8S Runtime CRI OCI contained dockershim 理解

    在docker/k8s时代,经常听到CRI, OCI,contained和各种shim等名词,看完本篇博文,您会有个彻底的理解. 典型的K8S Runtime架构 从最常见的Docker说起,kube ...

  3. k8s中pv和pvc如何理解

    k8s中pv和pvc如何理解 持久化与有状态应用的误区 k8s 带来的持久化问题和应用状态问题 认识PV/PVC/StorageClass 快速理解 生命周期 持久化与有状态应用的误区 刚接触k8s的 ...

  4. 【Kubernetes】k8s网络概念和实操详细说明【calico网络】【含docker不同容器网络互通配置,k8s网络互通配置】【1】

    文章目录 calico网络之间通信配置[docker容器互通流程配置] calico网络原理分析 一.Calico基本介绍 二.Calico结构组成 三.Calico 工作原理 四.Calico网络方 ...

  5. linux runtime pm机制的深入理解

    一:runtime机制说明 何为runtime机制?也就是系统在非睡眠状态,设备在空闲时可以进入runtime suspend状态同时不依赖系统wake_lock机制,非空闲时执行runtime re ...

  6. _一文让你透彻理解Linux的SOCKET编程(含实例解析)

    1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 U ...

  7. 【Docker】Docker镜像是什么?浅谈对Docker镜像的理解

    专栏往期文章 <Docker是什么?Docker从介绍到Linux安装图文详细教程> <30条Docker常用命令图文举例总结> 本期目录 专栏往期文章 1. Docker镜像 ...

  8. 【kubernetes】k8s集群高可用部署安装和概念详细说明【含离线部署】,客户端连接haproxy访问高可用流程

    文章目录 说明 高可用原理 K8S多master节点架构图 测试环境说明 部署高可用 安装包准备[可选] 高可用架构说明 配置haproxy 说明[必看] 安装haproxy 编辑配置文件 配置etc ...

  9. c++ 重载 重写_Java | 深入理解方法调用的本质(含重载与重写区别)

    前言 对于习惯使用面向对象开发的工程师们来说,重载 & 重写 这两个概念应该不会陌生了.在中 / 低级别面试中,也常常会考察面试者对它们的理解(隐约记得当年在校招面试时遇到过): 网上大多数资 ...

最新文章

  1. @CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate
  2. dp凸优化/wqs二分学习笔记(洛谷4383 [八省联考2018]林克卡特树lct)
  3. Android中的帧布局
  4. 计算机一级选择题已做完确认,计算机一级选择题(附答案)
  5. 《大数据》2015年第2期“前沿”——大数据技术发展的十个前沿方向(上)
  6. mysql教程多表查询_解析Mysql多表查询的实现
  7. nullnullProcessing Bitmaps Off the UI Thread 处理来自UI线程的位图
  8. JS获取HTML video标签视频第一帧
  9. sqoop导入与导出总结
  10. SAM4E单片机之旅——11、UART之PDC收发
  11. Spring系列缓存注解@Cacheable @CacheEvit @CachePut 使用姿势介绍
  12. 非IE浏览器下ActiveX技术的替代方案
  13. solidworks齿轮编辑_如何应用solidworks进行齿轮工程图绘制
  14. excel表格打印每页都有表头_教你一招Excel打印技巧:每页有表头标题,阅读起来是真方便...
  15. ftp连接21端口出现的问题的解决方案
  16. 较全的国外学术论文网站与常用的学术搜索引擎
  17. idea使用lombok的时候无法找到log,编译时无法找到log
  18. c3p0 连接数据库报错
  19. 【图形学】18 光照模型(三、镜面反射的Shader实现)
  20. Hive使用必知必会系列

热门文章

  1. 7-10 最具人气奖选票
  2. ASP.NET MVC 员工疫情信息管理
  3. PHP sendmail配置
  4. Android 实战之酷云(一)
  5. 大数据BAT经典面试题
  6. 自定义SharpDevelop5.1/5.2的代码智能提示(代码完成)快捷键
  7. RIKIBOT-FX4纯激光里程计的建图导航
  8. Go 常用使用的包整理及介绍
  9. Go的依赖注入库dig
  10. ABB robotstudio 创建系统小问题,谢谢