K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl

k8s,docker,评估,cli,替代,产品,nerdctl · 浏览次数 : 332

小编点评

## Docker CLI 替代产品 nerdctl 简介 **背景:** 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。弃用 Docker 带来的,可能是一系列的改变,包括不限于:容器镜像构建工具容器 CLI容器镜像仓库容器运行时专题文章《K8S 1.20 弃用 Docker 评估》。 **核心优势:** * **几乎完全兼容 Docker CLI:** nerdctl 与 Docker CLI 功能基本兼容,几乎所有命令都支持。 * **支持 multiple namespace:** 与 Docker 中的 namespace 相似,支持多个 namespace 的管理。 * **易于安装和使用:** 可以使用 `alias` 命令轻松实现和旧版本一致的体验。 * **全功能:** 提供所有主要功能,包括 `docker run`, `docker ps`, `docker kill` 等。 **使用 nerdctl 的优点:** * 与 Docker CLI 相似,但拥有 namespace 的支持。 * 容易于安装和使用,无需手动配置。 * 提供与 Docker 命令兼容的体验。 * 可用于 K8S 集群中进行容器调试。 **使用 nerdctl 的注意事项:** * nerdctl 的 namespace 与 Docker 中的 namespace 相似,但命名空间的范围更广。 * nerdctl 没有 Docker 的 `docker-credential-ecr-logindocker` 等工具支持。 **总结:** nerdctl 是 Kubernetes 中容器调试的新宠,它几乎完全兼容 Docker CLI,拥有 multiple namespace 的支持,易于安装和使用,并提供与 Docker 命令兼容的体验。建议使用 nerdctl 进行容器调试,并通过 `alias` 命令保持与旧版本一致的体验。

正文

背景

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 编写.

与K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl相似的内容:

K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品

背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。 弃用 Docker 带来的,可能是一系列的改变,包括不限于: 容器镜像构建工具 容器 CLI 容器镜像仓库 容器运行时 专题文

K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl

背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。 弃用 Docker 带来的,可能是一系列的改变,包括不限于: 容器镜像构建工具 容器 CLI 容器镜像仓库 容器运行时 专题文

K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别

背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。 弃用 Docker 带来的,可能是一系列的改变,包括不限于: 容器镜像构建工具 容器 CLI 容器镜像仓库 容器运行时 专题文

K8s高可用集群二进制部署-V1.20

一、前置知识点 1.1 生产环境部署K8s集群的两种方式 kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

[转帖]突破 etcd 限制!字节自研 K8s 存储 KubeBrain

https://my.oschina.net/u/5632822/blog/5596911 KubeBrain 是字节跳动针对 Kubernetes 元信息存储的使用需求,基于分布式 KV 存储引擎设计并实现的、可以取代 etcd 的元信息存储系统,目前支撑着线上超过 20,000 节点的超大规模

6个优化策略,助你降低K8S成本

Kubernetes 早已成为容器编排引擎的事实标准,而随着 Kubernetes 环境的复杂性持续增长,成本也在不断攀升。CNCF 发布的调查报告《Kubernetes 的 FinOps》显示,68%的受访者表示 Kubernetes 开销正在上涨,并且一半的人所在的组织经历了每年超过20%的开销

[转帖]IoT运维 - 如何部署一套高可用K8S集群

https://zhuanlan.zhihu.com/p/579983530 如何部署一套高可用k8s集群,下面直接演示一下 环境 ip角色主机名 192.168.3.20 kubectl、ansible deploy 192.168.3.21 etcd1 etcd1 192.168.3.22 et

Kubernetes(K8S) Deployment 升级和回滚

创建部署详见 Kubernetes(K8S) Deployment 部署 Pod 传统应用升级,一般是V1.0的jar包,有一个应对 1.0 的 shell 启动脚本。升级时,传 2.0 的 jar包,配置 2.0 的 shell 脚本。 执行顺序为,停1.0的服务,启2.0的服务,有问题时,把2.

玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server

## 前言 基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s 等方案的测试验证。 考虑过使用二手服务器,比如 Dell R730, 还搞了一套配置清单,如下: * Dell R730 * 3.5 尺寸规格硬盘 * CPU: 2686v4*2 * 内存:16g*8 * 存储:4

[转帖]【k8s】1、基础概念和架构及组件

文章目录 一、kubernetes概述1、什么是kubernetes?2、应用程序部署方式的演变3、为什么要用kubernetes? 二、kubernetes 特性三、Kubernetes集群架构与核心组件1、master组件1.1 kube-apiserver(中央枢纽)1.2 kube-cont