From 1bda27cca6bb08c4b0bad886bf6be8e059325cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 4 Aug 2022 10:37:25 +0800 Subject: [PATCH] =?UTF-8?q?post:=E5=A2=9E=E5=8A=A0=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=9C=A8ubuntu=E4=B8=AD=E5=AE=89=E8=A3=85nerdctl=E7=9A=84?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enable-ubuntu-cgroup2-and-nerdctl.md | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 source/_posts/enable-ubuntu-cgroup2-and-nerdctl.md diff --git a/source/_posts/enable-ubuntu-cgroup2-and-nerdctl.md b/source/_posts/enable-ubuntu-cgroup2-and-nerdctl.md new file mode 100644 index 0000000..c8f63f9 --- /dev/null +++ b/source/_posts/enable-ubuntu-cgroup2-and-nerdctl.md @@ -0,0 +1,90 @@ +--- +title: 在Ubuntu LTS中启用CGroup v2并安装nerdctl +tags: + - Linux + - 容器化 + - Ubuntu + - systemd + - cgroup +categories: + - - DevOps + - 系统管理 +keywords: 'ubuntu,containerd,nerdctl,cgroup' +date: 2022-08-04 10:36:50 +--- + +如果云主机采用了Ubuntu 21.04或以下的版本时,默认开启的是CGroup v1,如果要使容器系统能够使用CGroup v2来管理资源,就必须手动开启CGroup v2。本文将记录如何在Ubuntu 21.04及以下系统中开启CGroup v2,并安装containerd容器系统和nerdctl容器控制工具的过程。 + +## 启动CGroup v2功能 + +在启动系统的CGroup v2功能之前,首先需要确认系统是否提供了CGroup v2的支持,并且系统是否已经启动了CGroup v2功能。 + +在命令行中执行以下命令,可以查看系统是否提供了CGroup v2的支持。 + +```bash +grep cgroup /proc/filesystems +``` + +如果输出的结果中包含以下内容,那就说明系统已经提供了CGroup v2的支持。 + +```bash +nodev cgroup2 +``` + +接下来是检查系统中是否已经激活了CGroup v2。同样在命令行中执行以下命令: + +```bash +ls /sys/fs/cgroup/cgroup.controllers +``` + +如果系统提示找不到指定文件,那么就说明系统目前没有激活CGroup v2。 + +此时就可以激活系统中的CGroup v2了,需要注意的是,激活系统中的CGroup v2功能会要求系统重新启动,如果正在操作生产系统,要保证当前系统管理操作不会对系统中所承载的服务产生影响。 + +打开系统中的`/etc/default/grub/`文件,在其中的`GRUB_CMDLINE_LINUX`参数的尾部增加以下内容。 + +```text +systemd.unified_cgroup_hierarchy=1 +``` + +添加完以后的`GRUB_CMDLINE_LINUX`参数可能是这样的: + +```text +GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs systemd.unified_cgroup_hierarchy=1" +``` + +完成添加以后执行以下两条命令,更新系统引导并重新启动系统。 + +```bash +sudo update-grub +sudo shutdown -r now +``` + +!!! note "" + 如果是使用root用户进行的操作,则不必使用`sudo`。 + +完成系统重启以后,可以再次执行检查CGroup v2是否已经激活的命令,此时应该会列出`cgroup.controllers`文件。 + +!!! note "" + 执行命令`cat /sys/fs/cgroup/cgroup.controllers`可以检查目前有哪些设备已经托管给了CGroup。 + +## 安装containerd和nerdctl + +containerd是一个OCI标准的容器化支持环境,但是并不需要我们单独的去完成containerd的安装。nerdctl的完整安装包内已经集成了containerd、runC和CNI,所以直接在Ubuntu中安装nerdctl的完整版即可。 + +顺序执行以下命令可以下载nerdctl 0.22.2版,并将nerdctl和containerd等都安装到`/usr/local`中。 + +```bash +wget https://ghproxy.com/https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-full-0.22.2-linux-amd64.tar.gz +tar Cxzvf /usr/local nerdctl-full-0.19.0-linux-amd64.tar.gz +cp /usr/local/lib/systemd/system/*.service /etc/systemd/system/ +systemctl enable buildkit containerd +systemctl start buildkit containerd +``` +以上命令的最后两行是启动containerd和镜像打包支持。安装包解压完毕以后,不必重启系统,应该就已经可以执行`nerdctl`命令了。 + +如果当前不能使用root用户来完成containerd和nerdctl的安装,那么就需要使用Rootless方式安装nerdctl了。这种情况下可以执行完上面第二条解压命令以后,执行以下命令完成安装。 + +```bash +containerd-rootless-setuptool.sh install +```