本篇文章我们将手把手详细介绍怎么轻松在Anolis OS上使用Kata Containers安全容器,我们将介绍Kata Container社区于2022年10月10日最新发行的Kata3.0.0的安装部署方式,3.0.0版本包含了基于袋鼠RunD开源的最新Rust Kata runtime + 内置Dragonball 和Go runtime + VMM(本文默认安装了QEMU)两套架构。

目前社区计划在未来1-2年的时间内逐步由Go Runtime迁移至Rust Runtime,Rust Kata runtime是Kata社区未来的发展方向,在整体资源消耗、启动速度等方面都有明显优势,同时提供内置沙箱Dragonball进一步提高使用体验,目前还处于快速发展阶段。

本篇教程默认安装Rust Kata Runtime + Dragonball,并会提供简易教程帮助您切换到Go Kata Runtime + QEMU,另外,我们提供的Guest Kernel基于龙蜥OS, rootfs基于专门为容器场景优化的LifseaOS。

Kata Container 3.0.0 (Rust Runtime + Dragonball)

RunD是龙蜥社区开源的下一代安全容器解决方案,相比于社区的Kata2.0而言,RunD最大的特点是 提供了基于容器场景深度优化的 内置Dragonball 沙箱,减少了虚拟化外部依赖,带给用户开箱即用的优质体验,同时极大提升了整体容器的启动速度;其次通过引入全新的异步Rust Runtime 机制,进一步降低Kata安全容器整体的资源开销。RunD目前已开源成为Kata Containers社区上游3.0版本标准。八月我们在龙蜥公众号介绍了Kata3.0背后的设计与思考,其中一体架构、轻量安全容器虚拟机Dragonball、异步Rust Runtime等创新给3.0版本带来了低资源开销、极速启动速度、易于运维等优势,具体介绍详见Kata3.0系列文章

目前,Kata3.0.0已经在社区发布第一个Release版本,用户可以在Anolis安装Kata3.0.0来感受新版本的极速体验,我们也测得了Kata3.0.0 + 内置Dragonball 相比 Kata2.4.3 + QEMU 的性能数据,给到各位更具体的提升效果。

Kata 2.4.3 + QEMU

Kata 3.0.0 + 内置Dragonball

100容器串行启动时间

56s

35s

100容器并行启动时间

3.7s

3.4s

100容器并行启动内存消耗

18402764KB

9040992KB

*性能数据均在本教程中的部署环境中测试得到,测试时两个Kata使用相同Guest Kernel和Rootfs等配置。

一、部署环境

本教程中使用的是阿里云上购买的神龙弹性裸金属服务器,您也可以在本地物理机或其他云环境中部署 Kata Containers。

*物理机环境需要使能硬件虚拟化,虚拟机环境需要使能嵌套虚拟化。

内核版本:Linux 4.19

CPU:104 vCPU@3.8GHz

内存:192GB

二、安装Kata3.0.0

龙蜥社区已经集成了Kata Containers 最新3.0.0版本,推荐您使用龙蜥集成的软件包安装 Kata Container3.0.0。龙蜥软件包会为您做好默认Guest Kernel配置、默认Rootfs配置、默认Kata配置,帮助您做到真正的开箱即用体验。

2.1 安装龙蜥experimental源

由于目前Kata Container 3.0.0在龙蜥源的experimental repo中,首先需要安装龙蜥的experimental repo。

yum install anolis-experimental-release

2.2 安装Kata Containers 3.0.0

接着,您可以在Experimental repo中安装Kata Containers 3.0.0.

yum --enablerepo Experimental install kata-containers

以上两步即可安装好Kata Containers 3.0.0,并且我们会为您做好如下默认配置,您可以使用它们即刻开始使用Kata Container,也可以根据自己的需求进行调整:

1. Kata 默认配置
Kata Containers 3.0.0安装后,默认配置会在/usr/share/kata-containers/defaults/configuration.toml且默认虚拟机管理器VMM为Dragonball

2. Guest Kernel 默认配置
默认Guest kernel路径:/usr/share/kata-containers/vmlinux.container

*默认安装的guest kernel是基于龙蜥 5.10 cloud linux 配合 Kata社区推荐5.10内核参数制作而成。

3. rootfs 默认配置
默认rootfs路径:/usr/share/kata-containers/kata-containers.img

*默认安装的rootfs是基于专门为容器场景优化的LifseaOS。

三、安装Containerd

如果您的环境中没有containerd或没有配置containerd的Kata运行时支持,请您参考一下第三、第四章节的内容。

3.1 安装containerd

yum --enablerepo Plus install containerd

四、配置Containerd

当containerd安装完成后,您需要修改containerd配置来让containerd可以找到Kata容器运行时。

4.1 生成默认containerd配置

首先请您进入/etc/containerd路径,这里默认会存放containerd的配置文件config.toml。 如果您这个路径下没有配置文件或者配置文件是被全部注释的缺省状态,您可以使用如下命令生成默认配置;如您已经有完整配置,也可以直接跳到4.2。

# 进入containerd配置目录并查看配置情况,若无配置或为全部注释,可以继续生成默认配置
cd /etc/containerd/
# 生成containerd默认配置
containerd config default > /etc/containerd/config.toml

4.2 配置增加Kata容器运行时

接下来,您需要在containerd配置中加入Kata容器运行时,从而让containerd运作的时候可以找到Kata。打开4.1中的containerd配置并找到[plugins."io.containerd.grpc.v1.cri".containerd.runtimes],在其下加入新的runtime_type.

# 打开containerd配置并在
# [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
# 下加入kata runtime的选择
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata]
  runtime_type = "io.containerd.kata.v2"

为了让您更好理解如何修改配置,我们这边也给到一份修改完的配置截图,方便您参考。

同时,我们为您准备了一份配置示例供您进一步参考,您可点击此处下载:containerd配置文件示例

4.3 重启containerd

最后,重启containerd让配置生效。

# 配置完成,重启containerd即可
systemctl restart containerd

恭喜您,到这一步跑起Kata容器的主要步骤已经完成,您后续可以自由地开始尝试Kata,如果您想现在立即就有一个用例让Kata跑起来,请您继续往下看。

五、启动Kata3.0.0安全容器

5.1 获取busybox镜像

为了启动安全容器,我们首先需要获取到一个镜像。在这个教程里,让我们选用最基础的镜像busybox吧。

同时,您也可以选用各种你喜欢的CLI工具,例如ctr、nerctl、crictl等,在本教程中,我们使用了containerd自带的ctr。

ctr images pull docker.io/library/busybox:latest

5.2 启动Kata安全容器

接着,让我们使用Kata启动一个安全容器,并打出安全容器中的操作系统信息吧。

ctr run --runtime=io.containerd.kata.v2 --rm docker.io/library/busybox:latest kata-test uname -r

--runtime用于指定容器运行时,--rm 代表我们创建好容器、容器运行完命令后会立即销毁容器, docker.io/library/busybox:latest 代表容器的镜像名,kata-test代表容器的名称,最后 uname -r是我们要在容器中运行的命令。

通过以上命令即可打出安全容器中的操作系统版本信息,您可以感受到安全容器内运行的Guest OS和Host OS的差异。

切换至Go Runtime + QEMU

目前社区计划在未来1-2年的时间内逐步由Go Runtime迁移至Rust Runtime,您如果在使用Rust Kata Runtime上遇到功能性问题可以先使用Go Runtime,下面我们将介绍切换方法。

一、切换至Go Runtime的二进制文件

首先,进入Kata Runtime默认二进制安装路径。

cd /usr/local/bin

接着,用Go Runtime二进制文件替换Rust Runtime二进制文件

# 遇到overwrite询问,都请回答y cp /usr/runtime-go/bin/* .

二、切换Kata配置到QEMU配置

进入Kata配置路径,并切换配置到QEMU配置。

# 进入配置路径 cd /usr/share/defaults/kata-containers # 切换配置到QEMU配置 ln -sf configuration-qemu.toml configuration.toml

通过以上两步,您已切换到go runtime,您可以试着按教程中的5.1和5.2步骤来启动安全容器。

小贴士:请注意,安装包中的kata-agent是用于在虚拟机内启动服务和宿主机沟通的,在任何情况下请不要在宿主机上直接启动kata-agent,可能会对您的机器产生破坏。