使用nerdctl玩转containerd

  1. 现有 CLI 的不足

参考
https://mp.weixin.qq.com/s/ZKoO041TqyR2guVooPegrg

从行业趋势来看,Docker 已经和 Kubernetes 社区渐行渐远,以?Containerd?为代表的实现了?CRI?接口的容器运行时将会受到 Kubernetes 的青睐。
但纯粹使用 Containerd 还是有诸多困扰,比如不方便通过 CLI 来创建管理容器,有了?nerdctl?这个 CLI 工具,就就可以填补 Containerd 易用性的空缺

现有 CLI 的不足

虽然 Docker 能干的事情,现在 Containerd 都能干,但 Containerd 还有一个非常明显的缺陷:CLI 不够友好。它无法像 Docker 和 Podman 一样通过一条简单的命令启动一个容器,它的两个 CLI 工具 ctr 和 crictl都无法实现这么一件非常简单的需求,而这个需求是大多数人都需要的,我总不能为了在本地测试容器而专门部署一个 Kubernetes 集群吧?

ctr 的设计对人类不太友好,例如缺少以下这些和 Docker 类似的功能:

  • docker run -p <PORT>

  • docker run --restart=always

  • 通过凭证文件 ~/.docker/config.json 来拉取镜像

  • docker logs

除此之外还有一个 CLI 工具叫 crictl,和 ctr 一样不太友好。

为了解决这个痛点,Containerd 官方推出了一个新的 CLI 叫 nerdctl。nerdctl 的使用体验和 docker 一样顺滑

##安裝nerdctl

你可以从?https://github.com/containerd/nerdctl中下载最新的可执行文件,每一个版本都有两种可用的发行版:

  • `nerdctl--linux-amd64.tar.gz?: 只包含 nerdctl。

  • `nerdctl-full--linux-amd64.tar.gz?: 包含了 nerdctl 和相关依赖组件(containerd, runc, ###CNI, …)。

如果你已经安装了 Containerd,只需要选择前一个发行版,否则就选择完整版。

这里选择完整版nerdctl-full-0.7.3-linux-amd64.tar.gz
cd /opt

wget https://github.com/containerd/nerdctl/releases/download/v0.7.3/nerdctl-full-0.7.3-linux-amd64.tar.gz

tar -C /usr/local -xzf nerdctl-full-0.7.3-linux-amd64.tar.gz

mkdir -p /etc/containerd

containerd config default > /etc/containerd/config.toml

sed -i “s#k8s.gcr.io#registry.aliyuncs.com/k8sxio#g” /etc/containerd/config.toml

sed -i “s/systemd_cgroup = false/systemd_cgroup = true/g” /etc/containerd/config.toml

export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com

sed -i “s#https://registry-1.docker.io#${REGISTRY_MIRROR}#g" /etc/containerd/config.toml

mkdir -p /data/containerd-data-root

sed -i “s#/var/lib/containerd#/data/containerd-data-root#g” /etc/containerd/config.toml

sed -i “s#oom_score = 0#oom_score = -999#g” /etc/containerd/config.toml

sed -i “/containerd.runtimes.runc.options/a\ SystemdCgroup = true” /etc/containerd/config.toml

sed -i “s#/opt/cni/bin#/usr/local/libexec/cni#g” /etc/containerd/config.toml

1
2
3
4
5
6
7
8
9
10
11
12
添加私有仓库harbor---自定义--可选

[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.testtest.com"]
endpoint = ["https://harbor.testtest.com"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.testtest.com".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.testtest.com".auth]
username = "admin"
password = "Harbor12345"

systemctl daemon-reload

systemctl enable –now containerd

systemctl status containerd

containerd –version

###普通用户Rootless

切换到普通用户

比如su - admin

执行 containerd-rootless-setuptool.sh install

强烈建议在Rootless模式下启用cgroup v2

请参阅https://rootlesscontaine.rs/getting-started/common/cgroup2/


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 1209453173@qq.com