时间戳:2022-06-07 20:32:19 星期二

撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker

参考博客k8s入坑之路(3)containerd容器

containerd概念

containerd主要是namebases与k8s docker不同 存放路径不一致 没有默认仓库

容器运行时:

2020年未kubernetes宣布不再支持docker

Kubernetes将弃用Docker描述

在Kubernetes平台中,为了解决与容器运行时(例如Docker) 集成问题,在早期社区推出了CRI (Container untime Interface,容器运行时接口),以支持更多的容器运行时。

Kubernetes计划弃用就是kubelet中dockershim。即Kubernetes kubelet实现中的组件之一,它能够与Docker Engine进行通信。

当我们使用Docker作为容器运行时之后,架构是这样的,如图所示:

移除docker shim 组件将不能直接调用dockerd守护进程,移除后将由kubelet直接调用containerd

docker 和 OCI +CNCF

CNCF(云原生计算机协会)成立容器编排大战中由kubernetes胜出,docker将containerd捐赠CNCF,containerd比runc更高一层的封装。

kubernetes为了保持中立性在1.5版本推出CRI机制,CRI本质是GRPC接口的定义。容器操作接口,镜像操作接口。第一个实现接口的是containerd。

docker 和 kubernetes 与 containerd容器引擎

当我们使用Docker作为容器运行时之后,架构是这样的,如图所示:

移除docker shim 组件将不能直接调用dockerd守护进程,移除后将由kubelet直接调用containerd





kubernetes为了支持docker自己做了dockershim垫片,kubelet调用grpc接口调用dockershim,然后dockershim通过CRI去电泳docker api,docker去操作containerd。kubernetes宣布不再支持docker cri实现是把dockershim去掉。

containerd介绍由来

17年之前docker-ce和docker-ee没有分家之前,docker架构是比较单一的由docker直接管理创建容器的,当其决定拆分企业版和社区版时候对架构进行了很多改变 将它的内部组件解耦,拆分成了很多的小组件,containerd在那个时候被独立了出来,并且符合了kubernetes的CRI容器运行时的接口标准。

Kubernetes将弃用Docker,实际上是弃用了对dockerd守护进程的接口转换支持(取消了docker shim),还是可以通过containerd容器引擎的

containerd 是docker之前的一个产品, 在docker解耦后送给了,独立了出来,docker自己没有要送给了CNCF基金会,containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟。

docker由libcontainer及containerd组成将libcontainer捐赠给OCI开源基金会将libcontainer改名runc,OCI定义了镜像规范,运行时规范。(镜像标准镜像组织结构包含各种文件目录等,运行时如何启动一个容器需要接受那些指定,配置生命周期等,如何划分cgroup等)runc实现。

docker 与 containerd容器引擎

切换到Containerd

  • 命令不一样,有一定的学习成本
  • 展示的字段格式略不同
  • 更简单、更稳定、更高效

这么做的优点:

Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查

Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患

缺点:

各软件需要适配,包括适配新版kubernetes及containerd。containerd镜像拉取存在问题。尽量使用私有仓库进行避免。

如何应对?

在未来的Kubernetes版本彻底放弃Docker支持之前,引入受支持的容器运行时。

除了docker之外,CRI还支持很多容器运行时,例如:

  • containerd: containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟
  • cri-o, podman:都是红帽(RedHat) 项目,目前红帽主推podman

抛出思考的问题:

1、切换容器引擎docker镜像还能再用嘛?

可以

2、k8s现在还支持docker嘛?

还支持,计划是在1.23版本移除

3、docker还值 得学嘛?

值得

4、做好技术的储备,已应对切换容器引擎

containerd架构:

操作containerd使用的命名空间不同,镜像物理隔离目录完全不同。

Container 安装

containerd 安装
# 1. Container Runtime - Containerd
#### 1.1 软件包下载
# 设定containerd的版本号
$ VERSION=1.4.3
# 下载压缩包
$ wget https://github.com/containerd/containerd/releases/download/v${VERSION}/cri-containerd-cni-${VERSION}-linux-amd64.tar.gz #### 1.2 整理压缩文件
下载后的文件是一个tar.gz,是一个allinone的包,包括了runc、circtl、ctr、containerd等容器运行时以及cni相关的文件,解压缩到一个独立的目录中
# 解压缩
$ tar -xvf cri-containerd-cni-${VERSION}-linux-amd64.tar.gz
# 复制需要的文件
$ cp etc/crictl.yaml /etc/
$ cp etc/systemd/system/containerd.service /etc/systemd/system/
$ cp -r usr / #### 1.3 containerd配置文件
$ mkdir -p /etc/containerd
# 默认配置生成配置文件
$ containerd config default > /etc/containerd/config.toml
# 定制化配置(可选)
$ vi /etc/containerd/config.toml #### 1.4 启动containerd
$ systemctl enable containerd
$ systemctl restart containerd
# 检查状态
$ systemctl status containerd

Container 的ctr命令

containerd 的ctr命令
####镜像操作
#ctr i -h查看帮助
# 拉取镜像
$ ctr image pull docker.io/library/nginx:alpine
# 列出本地镜像
$ ctr image ls
# 使用 -q(--quiet) 选项可以只打印镜像名称。
$ ctr image ls -q
# 检测本地镜像
$ ctr image check
# 重新打标签
$ ctr image tag docker.io/library/nginx:alpine harbor.k8s.local/course/nginx:alpine
# 删除镜像
$ ctr image rm harbor.k8s.local/course/nginx:alpine
# 将镜像挂载到主机目录
$ ctr image mount docker.io/library/nginx:alpine /mnt
# 将镜像从主机目录上卸载
$ ctr image unmount /mnt
# 将镜像导出为压缩包
$ ctr image export nginx.tar.gz docker.io/library/nginx:alpine
# 从压缩包导入镜像
$ ctr image import nginx.tar.gz #### 容器操作
容器相关操作可以通过 ctr container 获取。
# 创建容器
$ ctr container create docker.io/library/nginx:alpine nginx
# 列出容器
$ ctr container ls
# 同样可以加上 -q 选项精简列表内容:
$ ctr container ls -q
# 查看容器详细配置
$ ctr container info nginx
# 删除容器
$ ctr container rm nginx
将crictl转变为docker命令操作ctr
ctr i -h查看帮助

ctr i pull docker.io/library/redis:alpine 拉取镜像(默认不带镜像仓库地址) docker pull docker.io/library/redis:alpine docker仓库会自动补全

ctr i ls 查看镜像

ctr ns 查看命名空间 c 创建 ls 查看  rm删除 label设置标签

docker tag redis:alpine registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpine将镜像重新打标签

docker push registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin上传镜像

ctr i pull registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin 拉取镜像

ctr i ls查看镜像

ctr run -t -d registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin redis 启动容器

ctr c ls查看当前运行容器

ctr t ls 查看当前运行任务

ctr t kill 杀掉当前任务

ctr t rm 删除任务

ctr c rm 删除容器

ctr -n default t ls 查看当前命名空间任务

k8s给containerd提供crictl命令

crictl images 查看镜像

crictl ps 查看进程

crictl pod 查看
podcrictl logs 查看日志
crictl exec 进入容器
alias docker=crictl 将crictl转变为docker命令操作ctr ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/kubernetes-kubespray/pause:3.2 k8s.gcr.io/pause:3.2 重新将镜像打一个tag
docker变成docker ce后默认命名空间moby containerd默认空间default kubernetes默认空间k8s.io

Kubernetes将弃用Docker!与 containerd容器引擎的更多相关文章

  1. Kubernetes将弃用docker?

    1.前言 近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时.并在1.23后不再支持dock ...

  2. Kubernetes容器运行时弃用Docker转型Containerd

    文章转载自:https://i4t.com/5435.html Kubernetes社区在2020年7月份发布的版本中已经开始了dockershim的移除计划,在1.20版本中将内置的dockersh ...

  3. Kubernetes弃用Docker后怎么办?

    本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...

  4. k8s入坑之路(3)containerd容器

    containerd概念: containerd主要是namebases与k8s docker不同 存放路径不一致 没有默认仓库 容器运行时: 2020年未kubernetes宣布不再支持docker ...

  5. 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?

    作者 | 张攀(豫哲) 来源 | 尔达 Erda 公众号 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!**在 Erda 开源的同时,我们计划编 ...

  6. Kubernetes 教程:在 Containerd 容器中使用 GPU

    原文链接:https://fuckcloudnative.io/posts/add-nvidia-gpu-support-to-k8s-with-containerd/ 前两天闹得沸沸扬扬的事件不知道 ...

  7. Docker与Containerd使用区别

    文章转载自:https://cloud.tencent.com/developer/article/1984040 Kubernetes 在 1.24 版本里弃用并移除 docker shim,这导致 ...

  8. Docker系列01—容器的发展历程---Docker的生态圈

    本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...

  9. K8S为什么要弃用Docker?Dockershim将移除

    一.背景由于最近知道了 K8s 新版本(v1.20)确定弃用 Docker 的消息,为了明确是否会对现有系统架构产生响,所以对涉及到的相关技术进行了一定的梳理(索性的是对现有的系统架构基本无影响:&g ...

随机推荐

  1. iOS全埋点解决方案-控件点击事件

    前言 ​ 我们主要介绍如何实现控件点击事件($AppClick)的全埋点.在介绍如何实现之前,我们需要先了解一下,在 UIKit 框架下,处理点击或拖动事件的 Target-Action 设计模式. ...

  2. 学习打卡day16&&echarts入门

    echarts有两种部署方式,一种是使用CDN命令,将所需文件安装到目标文件中,"npm install echarts --save",适合于已经学习入门了Vue.第二种是在gi ...

  3. 阶段性总结linux(1)

    学习安装linux系统 [网络连接方式] 桥接 ,好比所有人都在25期教室,公用这个教室的局域网段 192.168.11.0~192.168.11.255 教室内有60个同学,插上了网线,所有人都是 ...

  4. 阿里云IoT流转到postgresql数据库方案

    之前写过一篇如使用阿里云上部署.NET 3.1自定义运行时的文章,吐槽一下,虽然现在已经2022年了,但是阿里云函数计算的支持依然停留在.NET Core 2.1,更新缓慢,由于程序解包大小的限制,也 ...

  5. 如何配置JAVA环境并安装IEAD软件

    安装IDEA软件之前需要做哪些准备? 在安装IDEA软件之前,需要先确定电脑中有没有JDK,如果没有需要先安装JDK. JDK是整个JAVA的核心,包括了Java运行环境,Java工具(javac/j ...

  6. C#/VB.NET 获取Excel中图片所在的行、列坐标位置

    本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置.这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列.纵坐标即顶点所在的第几行.下面是获取图 ...

  7. golang md5加密和python md5加密比较

    python md5加密和golang md5加密各有不同,记录于此做备忘 Python 方法 md5 import base64 import hashlib def get_md5_data(bo ...

  8. 《C++Primary》阅读简要总结

    三月份的主要任务之一就是阅读C++Primary这本书,终于在昨天25号下午完成了基础部分的阅读,算是对基础知识整体梳理了一遍,开始看这本书大概可以追溯到去年12月份,在那之前看了C++的入门书籍&l ...

  9. 常用的Linux 系统备份、恢复命令

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 删库跑路的事常常听说,不过,这只能是个调侃的话题,真正的工作中可不能这么干,否则,库是删了,路怕是跑不了了. 所以,备份很重 ...

  10. 1.sprng 简介

    容器(可以用来管理所有的组件(类)) 核心关注:IOC和AOP 1.IOC Inversion(反转) Of Control:控制反转 控制:资源的获取方式 1.主动式(要什么资源自己创建) Pers ...