[kubernetes]-k8s使用nerdctl构建containerd镜像
·
导语:希望在服务器上直接构建containerd的镜像并直接调试使用。
采用nerdctl的好处,可以直接在服务器上构建并直接给k8s使用。nerdctl使用方式和docker基本一致,commit命令相对无脑可以给开发用。
验证使用nerdctl构建containerd镜像
前置条件已经安装了containerd 。nerdctl pull的镜像会存在/var/lib/containerd ,nerdctl push 的认证和docker共用。
wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-1.7.7-linux-amd64.tar.gz
tar zxvf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/local/bin/
echo 'source <(nerdctl completion bash)' >> /etc/profile
# 重新加载 /etc/profile 文件
source /etc/profile
如果要用nerdctl build 命令需要安装buildkit
下载
mkdir tmp && cd tmp
wget -c https://github.com/moby/buildkit/releases/download/v0.17.0-rc1/buildkit-v0.17.0-rc1.linux-arm64.tar.gz
tar zxvf buildkit-v0.17.0-rc1.linux-arm64.tar.gz
cp -rf bin/* /usr/bin
安装配置
cat > /lib/systemd/system/buildkit.socket <<EOF
#######################################
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660
[Install]
WantedBy=sockets.target
EOF
cat >/lib/systemd/system/buildkit.service <<EOF
#########################################
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable buildkit.service
systemctl start buildkit.service
systemctl status buildkit.service
systemctl status buildkit.socket
调整context大小
# error: failed to solve: Internal: rpc error: code = Internal desc = received 4294967292-bytes data exceeding the limit 262244 bytes
mkdir -p /etc/buildkit/
cat > /etc/buildkit/buildkitd.toml <<EOF
[worker]
max_context_size = 42949672960 # 设置为40GB,或根据需要调整
EOF
systemctl restart buildkit.service
构建镜像
# nerdctl build的镜像可以用ctr -nk8s.io images ls 查看到
nerdctl build -t harbor.deepwise.com/dev/kylinv10-lung:CTA_v20241022 . --no-cache
nerdctl push harbor.deepwise.com/dev/kylinv10-lung:CTA_v20241022

补充
构建可能会出现的报错
buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=image,name=k8s.io/base/kylinv10-lung:lung_nodule_v20241022

使用buildctl有一点不好就是构建的镜像不是在k8s.io下,无法给k8s直接使用,还需要导出一下或者push一下

查看
ctr -n buildkit i ls

docker和containerd的版本有要求,低版本会出现这个报错

nerdctl commit
在官方nginx的镜像里安装一个vim进行测试

测试commit的镜像是否带vim

参考文档:
https://www.cnblogs.com/chen2ha/p/17086900.html
https://github.com/containerd/nerdctl
https://github.com/containerd/nerdctl/releases/tag/v1.7.7
更多推荐
所有评论(0)