前言
containerd是从docker中分离出来的一个项目。作为一个底层容器运行时,使用containerd不仅性能提高了(调用链变短了),而且资源占用也会变小。因此它成了Kubernete容器运行时更好的选择。本文将介绍containerd的安装与使用。
本机使用Ubuntu 20.04对containerd进行安装:
root@ubuntu:~# cat /etc/issue
Ubuntu 20.04 LTS \n \l
查看containerd有那些可用版本:
root@ubuntu:~# apt-cache madison containerd
containerd | 1.5.9-0ubuntu1~20.04.4 | http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
containerd | 1.3.3-0ubuntu2 | http://us.archive.ubuntu.com/ubuntu focal/main amd64 Packages
安装containerd,会自动下载依赖runc:
root@ubuntu:~# apt install -y containerd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
runc
The following NEW packages will be installed:
containerd runc
0 upgraded, 2 newly installed, 0 to remove and 354 not upgraded.
Need to get 37.1 MB of archives.
After this operation, 166 MB of additional disk space will be used.
Get:1 http://security.ubuntu.com/ubuntu focal-security/main amd64 runc amd64 1.0.0~rc95-0ubuntu1~20.04.2 [4,087 kB]
Get:2 http://security.ubuntu.com/ubuntu focal-security/main amd64 containerd amd64 1.5.9-0ubuntu1~20.04.4 [33.0 MB]
Fetched 37.1 MB in 3min 0s (206 kB/s)
Selecting previously unselected package runc.
(Reading database ... 180949 files and directories currently installed.)
Preparing to unpack .../runc_1.0.0~rc95-0ubuntu1~20.04.2_amd64.deb ...
Unpacking runc (1.0.0~rc95-0ubuntu1~20.04.2) ...
Selecting previously unselected package containerd.
Preparing to unpack .../containerd_1.5.9-0ubuntu1~20.04.4_amd64.deb ...
Unpacking containerd (1.5.9-0ubuntu1~20.04.4) ...
Setting up runc (1.0.0~rc95-0ubuntu1~20.04.2) ...
Setting up containerd (1.5.9-0ubuntu1~20.04.4) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
Processing triggers for man-db (2.9.1-1) ...
查看containerd与runc的版本号:
root@ubuntu:~# containerd -v
containerd github.com/containerd/containerd 1.5.9-0ubuntu1~20.04.4
root@ubuntu:~#
root@ubuntu:~# runc -v
runc version 1.0.0~rc95-0ubuntu1~20.04.2
spec: 1.0.2-dev
go: go1.13.8
libseccomp: 2.4.3
使用默认配置信息,输出到config.toml配置文件:
root@ubuntu:~# mkdir /etc/containerd/
root@ubuntu:~# containerd config default > /etc/containerd/config.toml
重新启动containerd服务:
root@ubuntu:~# systemctl status containerd.service
下载功能完善的命令行工具nerdctl,并解压复制到bin目录:
root@ubuntu:~# wget https://github.com/containerd/nerdctl/releases/download/v0.18.0/nerdctl-0.18.0-linux-amd64.tar.gz
root@ubuntu:~# tar zxvf nerdctl-0.18.0-linux-amd64.tar.gz
root@ubuntu:~# cp nerdctl /usr/local/bin/
root@ubuntu:~# nerdctl -v
nerdctl version 0.18.0
下载网络插件cni,解压到指定目录。可用于容器端口映射:
root@ubuntu:~# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
root@ubuntu:~# mkdir -p /opt/cni/bin
root@ubuntu:~# tar zxvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
root@ubuntu:~# ls /opt/cni/bin/
bandwidth bridge dhcp firewall host-device host-local ipvlan loopback macvlan portmap ptp sbr static tuning vlan vrf
启动nginx容器,该命令跟docker一致:
root@ubuntu:~# nerdctl run -d -p 80:80 --name=nginx-web1 --restart=always nginx
root@ubuntu:~# nerdctl ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f9fc657b4ec docker.io/library/nginx:latest "/docker-entrypoint.…" 9 seconds ago Up 0.0.0.0:80->80/tcp nginx-web1
检测nginx容器是否运行正常:
root@ubuntu:~# curl 127.0.0.1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...