Kubernetes和Docker在容器云生态中霸主地位相争由来已久。其争斗的结果之一:自Kubernetes1.24以后,K8S就不再原生支持docker了,其表现如下:

(看完下面的内容,肯定会感觉没有使用docker方便,但这是趋势,要慢慢适应

  • 启动kubelet会报错

我们都知道containerd来自于docker,后被docker捐献给了云原生计算基金会(Cloud Native Computing Foundation,CNCF)。在RHEL上通过YUM部署containerd的过程中,表现为需要加载docker-ce.repo镜像源。通过在线方式安装的containerd的配置文件只有一个有效配置项:disabled_plugins = ["cri"],这在kubernetes支持docker时倒是没问题,因为kubelet直接调用docker-shim,没必要和containerd直接通讯。这也就是启动kubelet会报错的原因。可以通过下面的命令生成containerd的默认配置文件,然后在此基础上自行修改。

containerd config default > /etc/containerd/config.toml
  • --container-runtime-endpoint默认值从unix:///var/run/dockershim.sock改为unix:///var/run/containerd/containerd.sock

所以,后面不管我们使用docker还是containerd,甚至CRI-O作为Container Runtime,都需要关注--container-runtime-endpoint参数,根据需要进行指定。

  • --pod-infra-container-image要在1.27移除,从CRI获取sandbox image信息。(默认"k8s.gcr.io/pause:3.7")

虽说要到1.27版本弃用,但是我发现自kubeadm安装部署1.24.2时,配置该参数已经不管用了,使用的是node上CRI默认配置,例如:containerd默认使用的sandbox_image:plugins.plugins."io.containerd.grpc.v1.cri".sandbox_image = "k8s.gcr.io/pause:3.6"

  • 无法通过/etc/docker/daemon.json指定私有镜像

其实,不只是私有镜像参数的指定,还有cgroupdriver等很多参数的配置都无法通过docker的daemon.json进行指定了,需要在/etc/containerd/config.toml配置文件里配置:

……
[plugins][plugins."io.containerd.grpc.v1.cri"]sandbox_image = "192.168.11.101/kubeadm/pause:3.7"[plugins."io.containerd.grpc.v1.cri".containerd][plugins."io.containerd.grpc.v1.cri".containerd.runtimes][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true
……[plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.11.101".auth]username = "admin"password = "密码" [plugins."io.containerd.grpc.v1.cri".registry.headers][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry-1.docker.io"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.11.101"]endpoint = ["http://192.168.11.101"]
  • docker pull、push、save、load、exec、run、logs等命令也会被crictl和ctr替换

ctr和containerd一起来自于containerd.io包,crictl来自于cri-tools包,docker的绝大部分命令都可以使用crictl替代,但是该命令很蛋疼的没有crictl push命令,需要ctr来搞定,例如push镜像到harbor中,使用ctr是这样似儿的(并且web方式登录harbor是看不到ctr推送的镜像的):

ctr -n k8s.io images push --user admin:密码 --plain-http=true --platform linux/amd64 192.168.11.101/library/pause:3.7

另外,使用crictl命令还需要配置/etc/crictl.yaml (该文件默认没有,需创建),添加下面的参数

runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false

否则会报错:

WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead. 
ERRO[0000] unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory" 
E0705 15:23:06.260611   13731 remote_image.go:121] "ListImages with filter from image service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService" filter="&ImageFilter{Image:&ImageSpec{Image:,Annotations:map[string]string{},},}"
FATA[0000] listing images: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService

除了上面这些让我们感受比较大的变动,还有一些:

  • --network-plugin=cni在1.24版本被移除
  • --cni-conf-dir=/etc/cni/net.d在1.24版本被移除
  • --image-pull-progress-deadline=15m在1.24版本被移除
  • --container-runtime=remote在1.27会被移除,remote将会是--container-runtime的唯一值(也就是说没有配置的必要了,所以直接移除掉)

【K8S 八】使用containerd作为CRI相关推荐

  1. kubeadm部署K8S并使用containerd做运行时

    kubeadm部署K8S并使用containerd做运行时 前言 去年12月份,当Kubernetes社区宣布1.20版本之后会逐步弃用dockershim,当时也有很多自媒体在宣传Kubernete ...

  2. Kubernetes教程(一)---使用 kubeadm 创建 k8s 集群(containerd)

    来自:指月 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/kubernetes/01-install/ 本文记录了使用 ku ...

  3. k8s(八):核心技术helm

    文章目录 1. 背景 2. 介绍 3. 使用helm可以解决哪些问题 4. 核心概念 1. 背景 k8s上的应用对象,都是由特定的资源描述组成,包括deployment.service等,都保存在各自 ...

  4. k8s(八)—调度因素(nodeName、nodeSelector、亲和与反亲和、Taints 污点)、影响pod调度的指令

    1 调度简介 [root@server2 ~]# kubectl get pod -n kube-system 2 影响kubernetes调度的因素 2.1 nodeName(针对节点) [root ...

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

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

  6. K8S Runtime CRI OCI contained dockershim 理解

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

  7. 谈谈对K8S CNI、CRI和CSI插件的理解

    K8S的设计初衷就是支持可插拔架构,解决PaaS平台不好用.不能用.需要定制化等问题,K8S集成了插件.附加组件.服务和接口来扩展平台的核心功能.附加组件被定义为与环境的其他部分无缝集成的组件,提供类 ...

  8. 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系

    参考 docker,containerd,runc,docker-shim 之间的关系 Containerd shim 进程 PPID 之谜 内核大神教你从 Linux 进程的角度看 Docker R ...

  9. k8s系列05-使用containerd和cilium部署kubeproxy-free的k8s集群

    本文主要在centos7系统上基于containerd和stable版本(1.11.4)的cilium组件部署v1.24.0版本的k8s原生集群,由于集群主要用于自己平时学习和测试使用,加上资源有限, ...

最新文章

  1. zstack快速安装文档
  2. Zend Studio 默认模板和输入代码提示时间的修改方式
  3. 从今天开始研究Flex的相关项目开发
  4. GitHub Research:超过50%的Java记录语句写错了
  5. Vue简易购物车实例
  6. tp前后端不分离源码_Thinkphp5.0+Vue2.0前后台分离框架通使用后端源码
  7. PROFINET通信基础知识
  8. MTK6577+Android之Camera驱动
  9. 【kaggle】Airbnb新用户的民宿预定结果预测
  10. 醉林疯的OJ 1063: 最大公约与最小公倍
  11. LGA1155、LGA1156、LGA1366、LGA2011的CPU插槽对应的都是什么型号的CPU
  12. WinUSB - 微软为所有 USB 设备提供的常规驱动程序
  13. 『XXG JS』JavaScript 数组 - 查找
  14. thinksnsv4.6运行php,SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例...
  15. 谈一谈SaaS产品的架构设计
  16. 清北计算机导论,北京科技大学强军计划考研盛世清北北科强军计划考研经验分享.docx...
  17. 2018届春招面试回顾(一)
  18. 等候·《致我们终将逝去的青春》
  19. 计算机专业英语课外笔记,手帐 | 有了这份笔记后 我终于爱上了英语
  20. 求大家推荐一款好用的天气预报软件华为ma_硬磕到底!华为、字节跳动入局搜索市场,与百度正面刚...

热门文章

  1. 移动垃圾的手机支付......
  2. 7.11网页结构 常用标签
  3. PowerISO----百度百科
  4. poweriso初用小记
  5. 设计模式MVP案例----省市查询
  6. 供应链管理(SCM)
  7. 资料 | 2021年开源SLAM算法集锦
  8. Scikit-learn的优点
  9. 书法软件 隐私声明、免责声明和使用条款
  10. 麦块里面怎么下载java_麦块_麦块下载[2020官方最新版]麦块安全下载_ 极速下载...