• K8S 1.20 弃用 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
    • 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 编写.

  • 相关阅读:
    Proxyless Mesh 在 Dubbo 中的实践
    Optional非空判断
    解决ERR: cURL error 77: Unable to initialize NSS: -8023
    PIE-Engine:广东省生态遥感指数RSEI研究2
    高级测试工程师必备技术:用Git版本控制自动化测试代码
    Python 学习之路: 常用断言汇总
    多源最短路径算法:Floyd-Warshall算法分析
    中石油大学22春季《大学英语(四)#》第三阶段在线作业
    详解ThreadLocal
    51单片机主从双机可变波特率串口通讯LED流水指示
  • 原文地址:https://www.cnblogs.com/east4ming/p/17166892.html