第5关 K8S的新宠Containerd

这篇具有很好参考价值的文章主要介绍了第5关 K8S的新宠Containerd。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

------> 课程视频同步分享在今日头条和B站

大家好,我是博哥爱运维。这节课给大家讲下K8S新版本默认支持的容器运行时(CRI)Containerd 。

时至今日,docker原本的一手好牌被打得稀烂,Google的k8s在1.20明确说明后期将不再支持docker作为容器运行时(后面简称CRI),明面上说kubelet中的模块"dockershim"(该模块实现了对Dcoker的CRI支持)维护给开发团队带来了很大困扰,实则是Docker已经没有了利用价值。

之前在Google、RedHat、IBM几位互联网巨头的忽悠下,Docker公司将libcontainer捐献给了OCI并改名为runC,而随后在容器编排大战中,Docker的Swarm败给了k8s,然后Docker稀里糊涂地将自身核心依赖Containerd捐献给了CNCF,想以此来证明自己Docker是一个PaaS平台。

然而巨头就是巨头,Google明修栈道,暗渡陈仓,首先k8s弄了一个容器运行时的标准CRI(Container Runntime Interface),你只要适配了这个CRI,就能作为k8s的容器运行时一起工作;同时为了不让Docker起疑心,在k8s前期,专门在kubelet中弄了个模块"dockershim",用来将CRI的调用翻译成Docker的API,以使Docker可以作为K8s的容器运行时正常运行。

时间一天天过去,现在Containerd已经羽翼丰满,足以和docker运行时媲美,并且性能比docker更好,目前各大云厂商的k8s服务均推荐用户使用Containerd来作为CRI。

k8s的新宠,2023年Kubernetes实战攻略,kubernetes,容器,云原生,docker

Containerd 和 Docker 组件常用命令是什么?

Containerd 不支持 docker API 和 docker CLI,但是可以通过 ctr 命令实现类似的功能。

镜像相关功能 Docker Containerd
显示本地镜像列表 docker images ctr -n k8s.io images ls
下载镜像 docker pull ctr -n k8s.io images pull -h
上传镜像 docker push ctr -n k8s.io images push -h
*删除本地镜像 docker rmi ctr -n k8s.io delete
查看镜像详情 docker inspect IMAGE-ID crictl inspecti IMAGE-ID
*导出离线镜像 docker save xxx > xxx.tar ctr -n k8s.io images export nginx-1.21.6.tar docker.io/library/nginx:1.21.6
*导入离线镜像 docker load -i xxx.tar ctr -n k8s.io images import xxx.tar
容器相关功能 Docker Containerd
显示容器列表 docker ps crictl ps
创建容器 docker create crictl create
启动容器 docker start crictl start
停止容器 docker stop crictl stop
删除容器 docker rm crictl rm
查看容器详情 docker inspect crictl inspect
attach docker attach crictl attach
exec docker exec crictl exec
logs docker logs crictl logs
stats docker stats crictl stats
POD 相关功能 Docker Containerd
显示 POD 列表 crictl pods
查看 POD 详情 crictl inspectp
运行 POD crictl runp
停止 POD crictl stopp
调用链区别有哪些?
  • Docker 作为 k8s 容器运行时,调用关系如下:
    kubelet --> docker shim (在 kubelet 进程中) --> dockerd --> containerd
  • Containerd 作为 k8s 容器运行时,调用关系如下:
    kubelet --> cri plugin(在 containerd 进程中) --> containerd

其中 dockerd 虽增加了 swarm cluster、 docker build 、 docker API 等功能,但也会引入一些 bug,而与 containerd 相比,多了一层调用。

镜像导入/导出操作

注意 k8s 只会使用 k8s.io namespace 中镜像。

使用Containerd时,需要往 k8s.io 导入镜像,containerd worker 终于能正常被调度了

为支持多租户隔离,containerd 有 namespace 概念,不同 namespace 下的 image、container 均不同,直接使用 ctr 操作时,会使用 default namespace

# ctr namespace ls
NAME   LABELS 
k8s.io

# containerd需要指定命令空间导入镜像
# docker pull nginx:1.21.6 && docker save nginx:1.21.6 > nginx-1.21.6.tar

# ctr -n k8s.io images import nginx-1.21.6.tar


containerd导出镜像,然后通过docker导入也是可以的

# 先查询要导出的镜像名称全名
# ctr -n k8s.io images ls|grep nginx
docker.io/library/nginx:1.21.6                                                                                                   application/vnd.docker.distribution.manifest.list.v2+json sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514 54.1 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed 
docker.io/library/nginx@sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514 54.1 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed 

# 通过ctr导出
# ctr -n k8s.io images export nginx-1.21.6.tar  docker.io/library/nginx:1.21.6
# ll -h nginx-1.21.6.tar 
-rw-r--r-- 1 root root 55M Oct 18 11:51 nginx-1.21.6.tar


# 然后用docker导入
# docker images|grep nginx
# docker load -i nginx-1.21.6.tar
ad6562704f37: Loading layer [==================================================>]  31.38MB/31.38MB
58354abe5f0e: Loading layer [==================================================>]  25.35MB/25.35MB
53ae81198b64: Loading layer [==================================================>]     601B/601B
57d3fc88cb3f: Loading layer [==================================================>]     893B/893B
747b7a567071: Loading layer [==================================================>]     667B/667B
33e3df466e11: Loading layer [==================================================>]  1.396kB/1.396kB
Loaded image: nginx:1.21.6

# docker images|grep nginx       
nginx                                                1.21.6    0e901e68141f   16 months ago   142MB

# docker rmi nginx:1.21.6
Untagged: nginx:1.21.6
Deleted: sha256:0e901e68141fd02f237cf63eb842529f8a9500636a9419e3cf4fb986b8fe3d5d
Deleted: sha256:1e877fb1acf761377390ab38bbad050a1d5296f1b4f51878c2695d4ecdb98c62
Deleted: sha256:834e54d50f731515065370d1c15f0ed47d2f7b6a7b0452646db80f14ace9b8de
Deleted: sha256:d28ca7ee17ff94497071d5c075b4099a4f2c950a3471fc49bdf9876227970b24
Deleted: sha256:096f97ba95539883af393732efac02acdd0e2ae587a5479d97065b64b4eded8c
Deleted: sha256:de7e3b2a7430261fde88313fbf784a63c2229ce369b9116053786845c39058d5
Deleted: sha256:ad6562704f3759fb50f0d3de5f80a38f65a85e709b77fd24491253990f30b6be
Containerd结合docker一起使用的生产案例:

利用docker in docker (简称dind),实际在CRI为Containerd的情况下,还能利用docker 实现打包镜像等功能文章来源地址https://www.toymoban.com/news/detail-792930.html

# only have docker client ,use dind can be use normal
dindSvc=$(kubectl -n kube-system get svc dind |awk 'NR==2{print $3}')
export DOCKER_HOST="tcp://${dindSvc}:2375/"
export DOCKER_DRIVER=overlay2
export DOCKER_TLS_CERTDIR=""

到了这里,关于第5关 K8S的新宠Containerd的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年基准Kubernetes报告:6个K8s可靠性失误

    云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面,但大多数组织预计今年的云使用和支出将与计划的相同(45%),或高于计划的(45%)。Flexera公司2023年云现状报告中的新数据显示, 仅有

    2024年02月15日
    浏览(35)
  • Ubuntu22 k8s 1.27.1 安装及集群搭建教学(2023.5.16 k8s 最新版本教学,只看这一篇就够了哦!保姆级教程!不行你来找我!)

    温馨提示请仔细阅读:❤️❤️❤️❤️❤️❤️❤️❤️ 1. 由于新版的k8s不支持docker了,因此开始前建议新开一台全新的虚拟机 2. 全程安装过程最大的问题是网络问题,经常需要拉取到外网的东西,如果条件允许请准备好魔法上网 3. 请在每一步进行之前妥善利用快照功能

    2024年02月07日
    浏览(49)
  • k8s 安装 kubernetes安装教程 虚拟机安装k8s centos7安装k8s kuberadmin安装k8s k8s工具安装 k8s安装前配置参数

    k8s采用master, node1, node2 。三台虚拟机安装的一主两从,机器已提前安装好docker。下面是机器配置,k8s安装过程,以及出现的问题与解决方法   虚拟机全部采用静态ip, master 30机器, node1 31机器, node2 32机器                                        机器ip 192.168.

    2024年02月11日
    浏览(50)
  • java 对接 k8s API、K8s基本架构、k8s常用命令

    引言: 当容器部署涉及到 多个节点 服务器,用docker、docker-compose 来部署就不是那么方便了,不能统一控制,不方便伸缩,配置统一管理、版本控制;当我们业务涉及到集群容器部署时,就考虑K8s、K3s 来实现。 k8s 架构组成: (一)Master :apiserver、scheduler、controller-manager 以

    2024年02月16日
    浏览(40)
  • 彻底卸载k8s(重置k8s)

    注意:master和slave节点都需要执行相同操作。

    2024年02月12日
    浏览(37)
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

    一、docker的问世         在LXC(Linux container)Linux容器虚拟技术出现之前,业界网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。 虚拟机是什么?         虚拟机其实就是 在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

    2024年03月26日
    浏览(71)
  • k8s入门:裸机部署 k8s 集群

    系列文章 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:StatefulSet 简单使用 第五章:✨ k8s入门:存储(storage) 第六章:✨ K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间 第七章:

    2023年04月20日
    浏览(46)
  • K8s进阶之路-安装部署K8s

    参考:(部署过程参考的下面红色字体文档链接就可以,步骤很详细,重点部分在下面做了标注)  安装部署K8S集群文档: 使用kubeadm方式搭建K8S集群 · GitBook 本机: master:10.0.0.13 master            node1: 10.0.0.11 node1            node2: 10.0.0.12 node2 #systemctl stop firewalldsy

    2024年02月22日
    浏览(50)
  • 【K8S 】K8S配置资源管理

    1、概念 用来保存密码。token,敏感的K8S资源 这类数据可以直接存放在镜像中,但是放在Secret中可以更方便的控制,减少暴露的风险 Secret:保存加密的信息 2、Secret类型: docker-registry:存储docker仓库的认证信息,以及docker的组件认证信息(私有) generic:是Secret的默认模式,

    2024年01月17日
    浏览(49)
  • 【K8S系列】深入解析K8S监控

    做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记论点 蓝色 :用来标记论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下k8s监控相关

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包