部署containerd
简介
本文档介绍采用二进制方式部署containerd组件的简单流程;
环境
包名 | 版本 | 下载地址 |
---|---|---|
containerd-1.6.9-linux-amd64.tar.gz | 1.6.9 | github:https://github.com/containerd/containerd/releases/tag/v1.6.9 |
部署
创建相关目录并上传
mkdir -p /mnt/data_disk/my_src/containerd/v1.6.9
mv /tmp/containerd-1.6.9-linux-amd64.tar.gz /mnt/data_disk/my_src/containerd/v1.6.9
解压
tar -xvf containerd-1.6.9-linux-amd64.tar.gz
[root@buildkitd v1.6.9]# ls
bin containerd-1.6.9-linux-amd64.tar.gz
[root@buildkitd v1.6.9]# ls bin
containerd containerd-shim containerd-shim-runc-v1 containerd-shim-runc-v2 containerd-stress ctr
复制可执行文件并测试
[root@buildkitd v1.6.9]# cp bin/* /usr/local/bin/
[root@buildkitd v1.6.9]# ls /usr/local/bin/
containerd containerd-shim containerd-shim-runc-v1 containerd-shim-runc-v2 containerd-stress ctr
[root@buildkitd v1.6.9]# containerd -v
containerd github.com/containerd/containerd v1.6.9 1c90a442489720eec95342e1789ee8a5e1b9536f
制作service服务文件
service文件模板可以从apt安装后获得;
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd # 字段代表containerd可执行文件位置,根据以上操作,指向到/usr/local/bin/containerd即可;
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
创建containerd配置文件
当containerd正确安装后,可以通过# containerd config default查询默认配置,所以可以通过将该命令结果进行输出重定向的方式来获得配置文件模板;
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
编辑配置文件
153 [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
154 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] # 表示对docker.io域名加速;
155 endpoint = ["https://9916w1ow.mirror.aliyuncs.com"] # 表示当访问docker.io这个域名时通过https://9916w1ow.mirror.aliyuncs.com进行加速;
.
.
.
161 [plugins."io.containerd.internal.v1.opt"]
162 path = "/mnt/data_disk/my_src/containerd/data" # 将默认存储位置/opt/containerd修改为自创目录(根据实际情况修改);
.
.
重启服务并确认状态
[root@buildkitd containerd]# systemctl restart containerd
[root@buildkitd containerd]# systemctl status containerd
● containerd.service - containerd container runtime
Loaded: loaded (/usr/lib/systemd/system/containerd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2024-01-10 15:20:21 CST; 10s ago
Docs: https://containerd.io
Process: 12174 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 12176 (containerd)
Tasks: 9
Memory: 17.9M
CGroup: /system.slice/containerd.service
└─12176 /usr/local/bin/containerd # containerd /usr/local/bin/containerd
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.028161152+08:00" level=error msg="failed to load cni during init, pl... config"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.028665098+08:00" level=info msg=serving... address=/run/containerd/c...ck.ttrpc
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.028998040+08:00" level=info msg=serving... address=/run/containerd/c...erd.sock
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.029132303+08:00" level=info msg="containerd successfully booted in 0.049215s"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.040840027+08:00" level=info msg="Start subscribing containerd event"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.040970928+08:00" level=info msg="Start recovering state"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.041113550+08:00" level=info msg="Start event monitor"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.041158568+08:00" level=info msg="Start snapshots syncer"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.041188315+08:00" level=info msg="Start cni network conf syncer for default"
Jan 10 15:20:21 buildkitd containerd[12176]: time="2024-01-10T15:20:21.041276846+08:00" level=info msg="Start streaming server"
Hint: Some lines were ellipsized, use -l to show in full.
[root@buildkitd containerd]# ls /mnt/data_disk/
buildkitd/ lost+found/ my_src/
[root@buildkitd containerd]# ls /mnt/data_disk/my_src/containerd/data/
bin lib
[root@buildkitd containerd]# systemctl enable containerd
安装runc
runc是容器运行的标准化接口;
mkdir -p /mnt/data_disk/my_src/runC/v1.1.11
yum -y install wget
cd /mnt/data_disk/my_src/runC/v1.1.11
wget https://github.com/opencontainers/runc/releases/download/v1.1.11/runc.amd64
chmod +x ./runc.amd64
ln -s /mnt/data_disk/my_src/runC/v1.1.11/runc.amd64 /usr/local/bin/runc
[root@buildkitd v1.1.11]# runc -v
runc version 1.1.11
commit: v1.1.11-0-g4bccb38c
spec: 1.0.2-dev
go: go1.20.12
libseccomp: 2.5.4
使用containerd下载镜像进行测试
ctr images pull docker.io/library/alpine:latest
安装nerdctl
nerdctl是针对containerd的上层封装工具,实现了 container,volume,network 的创建和管理,类似于docker命令;
mkdir -p /mnt/data_disk/my_src/nerdctl/v1.7.2
mv /tmp/nerdctl-1.7.2-linux-amd64.tar.gz /mnt/data_disk/my_src/nerdctl/v1.7.2
tar -xvf nerdctl-1.7.2-linux-amd64.tar.gz
ln -s /mnt/data_disk/my_src/nerdctl/v1.7.2/nerdctl /usr/local/bin/nerdctl
[root@buildkitd v1.7.2]# nerdctl -v
nerdctl version 1.7.2
安装cni
[root@buildkitd ~]# mkdir -p /mnt/data_disk/my_src/cni/v1.4.0
[root@buildkitd ~]# mv /tmp/cni-plugins-linux-amd64-v1.4.0.tgz /mnt/data_disk/my_src/cni/v1.4.0/
[root@buildkitd ~]# cd /mnt/data_disk/my_src/cni/v1.4.0/
[root@buildkitd v1.4.0]# tar -xvf cni-plugins-linux-amd64-v1.4.0.tgz
# 注意cni的可执行文件必须要保存到/opt/cni/bin下;
[root@buildkitd v1.4.0]# mkdir -p /opt/cni/bin
[root@buildkitd v1.4.0]# cp ./* /opt/cni/bin/
[root@buildkitd v1.4.0]# rm -rf /opt/cni/bin/cni-plugins-linux-amd64-v1.4.0.tgz