Table of Contents
本文主要参考 《Kata Containers CI》,大部分内容是直接从上面的文章中翻译的,但是我会根据我自己的实践,对原文做一定的改变,比如启动虚拟机使用 vagrant 等。Happy hacking on Kata Containers' CI!
Vagrant 安装
这部分内容参见斌哥的《使用 VirtualBox 安装虚拟机开发环境》。
安装 Virtual Box 参见 virtualbox。
$ wget https://download.virtualbox.org/virtualbox/7.0.10/virtualbox-7.0_7.0.10-158379~Ubuntu~jammy_amd64.deb
$ sudo apt install virtualbox-7.0_7.0.10-158379~Ubuntu~jammy_amd64.deb
安装 Vagrant 参见 Install Vagrant,我的测试环境是 ubuntu 22.04,其他的系统参见前面的连接自行安装。
$ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install vagrant
安装 vagrant-disksize 插件,否则虚拟机启动会报错。
$ vagrant plugin install vagrant-disksize
安装 vagrant-proxyconf 插件,负责配置代理。
$ vagrant plugin install vagrant-proxyconf
非 k8s 测试
不同的测试都需要下面两种 URL,这里以我自己的一个失败的 workflow 为例,请自行替换为自己需要的地址。
创建虚拟机
首先要确定虚拟机的规格,以 kata-containers-ci-on-push / run-docker-tests-on-garm / run-docker-tests (clh) 这个 CI 测试为例,去 workflows 中找到 run-docker-tests-on-garm.yaml,在 runs-on 可以看到运行的环境是 "garm-ubuntu-2304-smaller"。
OS
- Ubuntu-2304: 对应的镜像是 "bento/ubuntu-23.04"。
规格
- Small: 2 CPUs, 8 GiB

使用 Vagrant 创建一个 ubuntu-2304-small 规格的虚拟机配置。
$ VM_NAME=kata-ubuntu-2304-small
$ VM_IMAGE=bento/ubuntu-23.04
$ mkdir -p $HOME/vagrant/$VM_NAME
$ cd $HOME/vagrant/$VM_NAME
$ cat > Vagrantfile <<EOF
Vagrant.configure("2") do |config|
config.disksize.size = "30GB"
config.vm.box = "$VM_IMAGE"
config.vm.define "$VM_NAME" do |kata|
kata.vm.hostname = "$VM_NAME"
kata.vm.network "private_network", type: "dhcp"
kata.vm.provider "virtualbox" do |vb|
vb.cpus = 2
vb.memory = "8192"
vb.customize ["modifyvm", :id, "--nested-hw-virt", "on"]
end
end
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://127.0.0.1:7890/"
config.proxy.https = "http://127.0.0.1:7890/"
config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
end
end
EOF
启动虚拟机,启动之前请确保其它虚拟机/ Kata 容器没有启动。
# 确保之前的数据已经被清空
$ vagrant destroy -f
# 启动虚拟机
$ vagrant up
# 启动 ssh
# -R 是反向端口转发
# guest 访问 localhost:7890 -> host:7890
# -L 是正向短款转发
# host 访问 localhost:7890 -> guest:7890
# 这里是因为要访问 host 上 127.0.0.1:7890 代理,所以加入了反向端口转发
$ vagrant ssh -- -R 7890:localhost:7890
构建测试环境
点击失败的 CI 测试项目,进入 "Summary" 页面,找到 "kata-static-tarball" 开头的文件,点击下载到本地。下载的文件格式是 zip,解压缩后获得一个 `

将 tarball 上传到虚拟环境的 /vagrant
,vagrant 自动建立了一个共享路径,host 上是 Vagrantfile 的目录,guest 上是 /vagrant
。这一步的目的是把 kata-static-tarball-xxx.zip 文件解压缩获得 kata-static.tar.xz 文件,然后上传到 host 的当前虚拟机根目录($HOME/vagrant/kata-ubuntu-2304-small
)。
# on macOS(这是我自己的方案)
$ unzip ~/Downloads/kata-static-tarball* -d ~/Downloads
$ scp ~/Downloads/kata-static.tar.xz devant:/home/nxw/vagrant/kata-ubuntu-2304-small
$ rm -rf ~/Downloads/kata-static-tarball* && rm -rf ~/Downloads/kata-static.tar.xz
初始化 git 仓库。
# on Guest
$ BRANCH=
$ git clone --branch $BRANCH https://github.com/justxuewei/kata-containers.git
$ cd kata-containers
$ git remote add upstream https://github.com/kata-containers/kata-containers
$ git remote update
$ git config --global user.email "[email protected]"
$ git config --global user.name "Your Name"
$ git rebase upstream/main
拷贝 tarball 到指定目录。
# on Guest
$ mkdir kata-artifacts
$ cp /vagrant/kata-static.tar.xz $(pwd)/kata-artifacts
【Optional】编译并替换组件
安装 Golang
$ cd $HOME
$ wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz
$ sudo sh -c "rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz"
$ echo "export PATH=$PATH:/usr/local/go/bin" >> $HOME/.profile
$ source $HOME/.profile
$ go version
编译 Runtime-go
$ pushd src/runtime
$ make
$ sudo cp containerd-shim-kata-v2 /usr/local/bin
$ sudo mkdir -p /etc/kata-containers
$ sudo ln -s /opt/kata/share/defaults/kata-containers/configuration.toml /etc/kata-containers
$ popd
启动测试
测试步骤记录在 run-docker-tests-on-garm.yaml,里面有具体使用的 bash 命令,现在开始调试吧。
# 任选一种 hypervisor
$ export KATA_HYPERVISOR=qemu
$ export KATA_HYPERVISOR=clh
$ export KATA_HYPERVISOR=dragonball
$ bash tests/integration/docker/gha-run.sh install-dependencies
$ bash tests/integration/docker/gha-run.sh install-kata kata-artifacts
# 启用 debug 日志
$ sudo chmod +w /opt/kata/share/defaults/kata-containers/configuration.toml
$ sudo sed -i 's/#enable_debug = true/enable_debug = true/' /opt/kata/share/defaults/kata-containers/configuration.toml
$ sudo sh -c "echo '[debug]
level = \"debug\"' >> /etc/containerd/config.toml"
$ sudo systemctl restart containerd
$ bash tests/integration/docker/gha-run.sh run
导出 containerd 日志。
$ sudo journalctl -xe --unit containerd > /tmp/containerd.txt
$ vim /tmp/containerd.txt
导出 shim 日志。
$ sudo journalctl -t kata > /tmp/kata.txt
$ vim /tmp/kata.txt
清理
$ vagrant destroy -f
$ rm ./kata-static.tar.xz
K8s 测试
TBD...