乐趣区

关于运维:K8S-120-弃用-Docker-评估之-Docker-CLI-的替代产品-nerdctl

背景

2020 年 12 月初,Kubernetes 在其最新的 Changelog 中发表,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。

弃用 Docker 带来的,可能是一系列的扭转,包含不限于:

  • 容器镜像构建工具
  • 容器 CLI
  • 容器镜像仓库
  • 容器运行时

专题文章《K8S 1.20 弃用 Docker 评估》会从多方面剖析由此带来的变动和影响。

  1. 《K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格局的差异》次要介绍 镜像格局的变动
  2. 《K8S 1.20 弃用 Docker 评估之 Docker CLI 的代替产品》次要介绍 Docker CLI 的代替产品及集体举荐 – RedHat 3 件套 – Buildah、Podman 和 Skopeo

书接上文,明天来介绍 Docker CLI 代替产品的另一种抉择:nerdctl。

nerdctl 简介

nerdctl:是由 containerd 开源的、contaiNERD CTL,这是一个用于 containerd 的,且和 Docker 兼容的 CLI,另外还反对 Compose。

典型利用场景

K8S 1.20+ Node 上做容器 Debug

如果你最近刚刚开始应用 K8S 1.20 及以上版本,并且 CRI 抉择了 containerd,那么你会留神到 containerd 默认带的 CLI – ctr 相比 Docker CLI 产生了较大变动,且存在以下问题:
与 Docker CLI 不兼容,对用户不敌对。另外,ctr 短少以下相似 Docker CLI 的命令:

  • docker run -p <PORT>
  • docker run --restart=always --net=bridge
  • 应用 ~/.docker/config.json 配置 docker pull 以及认证助手工具如 docker-credential-ecr-login
  • docker logs

nerdctl 最次要的长处就是简直齐全兼容 Docker CLI,那么 nerdctl 在 K8S 集群中 debug 就很不便。
仅有的一些差异在于 nerdctl 有 namespace 的概念(✍️备注:其实是 containerd 有 namespace 的概念),如下:

  • default(默认)
  • moby:Docker
  • k8s.io:Kubernetes 集群

举例来说要列出 k8s 中的容器,须要:

nerdctl --namespace k8s.io ps -a

综上,在新版本 K8S 中,为了用户体验的一致性,倡议:

  1. 在 K8S Node 上都装置 nerdctl,装置步骤:
  2. 通过 alias 命令,实现和之前版本体验统一,操作如下:

vi ~/.bashrc

因为次要是用于 K8S Node 上 debug,所以间接这么写:

alias docker='nerdctl -n k8s.io'

装置和应用

curl -fsSLO https://github.com/containerd/nerdctl/releases/download/v0.13.0/nerdctl-0.13.0-linux-amd64.tar.gz
tar xvzf nerdctl-0.13.0-linux-amd64.tar.gz -C /usr/local/bin/ nerdctl

残缺的使用手册见:nerdctl README,能够看到是基本上和 Docker 命令一样。

总结

在 K8S 1.20+ Node 上做容器 Debug,须要用到 CLI,倡议应用 nerdctl,并且 alias 成 Docker 提供统一的体验。
至于个人电脑或是操作机,倡议不要替换,间接用 Docker 全套它不香吗?😏😏😏

三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

退出移动版