使用nerdctl管理容器

背景

在kubernetesv1.24之后已经正式移除docker作为容器运行了,现在大部分都用containerd。
containerd自带的crictl和ctr命令虽然能够简单的管理,但是并不好用,比如说不支持build镜像。因此推荐nerdctl命令来管理。
nerdclt兼容原来docker的大部分命令,可以直接通用。

安装准备

准备nerdctl、buildkit、buildctl三个工具。
buildkit 是服务端,他负责访问后端容器工具containerd。
buildctl nerdctl 是客户端,在这我们不用buildctl,用nerdctl。
附上github链接,请自行下载:
nerdctl
https://github.com/containerd/nerdctl/releases
buidkit
https://github.com/moby/buildkit/releases
根据自己的系统下载相应的二进制包。

注意:

问题1:
使用nerctl的会造成所在服务器的calico-node出问题,报错内容为:
BGP not established
因为calico获取的网卡和nerctl生成的冲突了。所以需要修改calico的yaml文件。
name: calico-node
在containers.env字段下,下面的ens根据自己的网卡名称修改,添加:

        - name: IP_AUTODETECTION_METHOD
          value: "interface=ens.*"

问题2:
在内网无法完全访问互联网的情况下,即使配置了使用本地镜像也会超时,显示会访问registry-1.docker.io域名,需要随意添加主机/etc/host/文件,添加registry-1.docker.io的host。

安装buildkit、nerdctl

1.把下载的buildkit压缩包中的所有二进制文件复制到/usr/bin/下。
2.创建buildkit的配置文件buildkitd.toml。
如果不使用这个配置文件,nerdctl在build镜像的时候,默认from不会去拉取本地的镜像,因此需要添加下面配置。
有专门的镜像仓库的话,不使用本地镜像可以忽略。

官方文档:
https://github.com/containerd/nerdctl/blob/master/docs/build.md

[worker.oci]
  enabled = false
[worker.containerd]
  enabled = true
  # namespace should be "k8s.io" for Kubernetes (including Rancher Desktop)
  namespace = "k8s.io"

3.创建buildkit.socket文件

[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
[Install]
WantedBy=sockets.target

4.创建buidkit.service服务启动文件:
根据自身实际情况修改ExecStart这行。
–config指的就是上述的使用本地镜像配置文件,如未添加,可忽略。

[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socketDocumentation=https://github.com/moby/buildkit
[Service]
ExecStart=/usr/bin/buildkitd --oci-worker=false --containerd-worker=true --config=/alidata/ctr-image/buildkit/etc/buildkitd.toml
[Install]
WantedBy=multi-user.target

5.启动。
systemclt start buildkit
6.复制nerdctl到/usr/bin/下使用即可。

你可能感兴趣的:(kubernetes,docker,运维,kubernetes)