实用指南:如何在Anolis OS上轻松使用 Kata 安全容器?

时间:2023-02-21 18:24:18

实用指南:如何在Anolis OS上轻松使用 Kata 安全容器?

文/云原生SIG

本篇文章我们将详细介绍怎么轻松在 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。

01 Kata Container 3.0.0 (Rust Runtime + Dragonball)

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

目前,Kata 3.0.0 已经在社区发布第一个 Release 版本,用户可以在 Anolis 安装 Kata 3.0.0 来感受新版本的极速体验,我们也测得了 Kata3.0.0 + 内置 Dragonball 相比 Kata 2.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 等配置。

1、部署环境

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

*物理机环境需要使能硬件虚拟化,虚拟机环境需要使能嵌套虚拟化。
内核版本:Linux 4.19
CPU:104 vCPU@3.8GHz
内存:192GB

2、安装 Kata3.0.0

龙蜥社区已经集成了 Kata Containers 最新 3.0.0 版本,推荐您使用龙蜥集成的软件包安装 Kata Container 3.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,也可以根据自己的需求进行调整:

  • Kata 默认配置

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

  • Guest Kernel 默认配置

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

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

  • rootfs 默认配置

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

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

3、安装 Containerd

如果您的环境中没有 Containerd 或没有配置 Containerd 的 Kata 运行时支持,请您参考 3、4 节的内容。

3.1 安装 Containerd

yum --enablerepo Plus install containerd

4、配置 Containerd

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

4.1 生成默认 Containerd 配置

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

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

4.2 配置增加 Kata 容器运行时

接下来,您需要在 Containerd 配置中加入 Kata 容器运行时,从而让 Containerd 运作的时候可以找到 Kata。打开 5.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"

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

实用指南:如何在Anolis OS上轻松使用 Kata 安全容器?

同时,我们为您准备了一份 Containerd 配置文件示例供您进一步参考,您可点击此处下载:​​https://gitee.com/chao1997/kata-share/blob/master/config.toml​

4.3 重启 Containerd

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

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

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

5、启动 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 的差异。

02 切换至 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 3.0.0 安全容器就创建成功啦,您可以继续对 Kata3.0.0 展开更多探索,如果有遇到任何问题,欢迎到龙蜥云原生社区来和我们交流。

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

龙蜥云原生 SIG(Special Interest Group) 助力龙蜥企业用户完成云原生转型和升级;面向用户与企业提供云原生能力和组件支持,并与广大开发者一起构建具备竞争力的云原生技术,协助用户更快、更好地利用云原生技术构建应用集群。

龙蜥云原生 SIG 主页:

​https://openanolis.cn/sig/cloud-native​