安装部署

安装 Kata 前需要预先安装 KVM 套件和 containerd,本文不再赘述。

基于预编译的二进制文件安装 Kata 参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#  release 页面下载 kata-static-3.0.2-x86_64.tar.xz)
xz kata-static-3.0.2-x86_64.tar.xz
tar xvf kata-static-3.0.2-x86_64.tar
mv opt/kata /opt
sudo cp /opt/kata/share/defaults/kata-containers/configuration.toml /etc/kata-containers/configuration.toml
sudo ln -sf /opt/kata/bin/containerd-shim-kata-v2 /usr/local/bin/containerd-shim-kata-v2
sudo ln -sf /opt/kata/bin/kata-runtime /usr/local/bin/kata-runtime
sudo ln -sf /opt/kata/bin/kata-monitor /usr/local/bin/kata-monitor
# 执行环境检查
sudo kata-runtime check --no-network-checks

在 Ubuntu 环境中,kata 支持通过 snap 一键安装 sudo snap install kata-containers --classic。 由于 kata 2.x 不支持在 cgroupv1 上运行,而 snap 当前最新安装版本只到2.4,所以建议通过二进制文件安装 kata 3.x。

Kata 集成 Containerd

配置 CNI

集成 kata 到 Containerd 前,需要为 Containerd 配置 CNI,参考以下步骤:

1
2
3
mkdir /opt/cni/bin
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
sudo tar -zxvf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin

创建以下配置文件 /etc/cni/net.d/10-bridge-net.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "cniVersion": "0.2.0",
  "name": "brnet",
  "type": "bridge",
  "bridge": "cni0",
  "isGateway": true,
  "ipMasq": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.10.10.0/24",
    "routes": [
      {
        "dst": "0.0.0.0/0"
      }
    ]
  }
}

配置运行时

在 Containerd中集成 kata 有好几种方式,以下配置同时支持两个版本运行时(runc 和 kata),更新 containerd 的配置文件/etc/containerd/config.toml,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[plugins.cri.cni]
    # conf_dir is the directory in which the admin places a CNI conf.
    conf_dir = "/etc/cni/net.d"

[plugins.cri.containerd]
      no_pivot = false
    [plugins.cri.containerd.runtimes]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
         privileged_without_host_devices = false
         runtime_type = "io.containerd.runc.v2"
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            BinaryName = ""
            CriuImagePath = ""
            CriuPath = ""
            CriuWorkPath = ""
            IoGid = 0
      [plugins.cri.containerd.runtimes.kata]
         runtime_type = "io.containerd.kata.v2"
         privileged_without_host_devices = true
         pod_annotations = ["io.katacontainers.*"]
         container_annotations = ["io.katacontainers.*"]
         [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata.options]
            ConfigPath = "/etc/kata-containers/configuration.toml"

运行测试容器(PS:ctr 删除容器需要先 kill 容器主进程,之后才能删除,sudo ctr tasks kill -a -s 9

1
2
sudo ctr run --cni --runtime io.containerd.runc.v2     -t --rm registry.lqingcloud.cn/library/centos:7.4.1708 centos-runc sh
sudo ctr run --cni --runtime io.containerd.run.kata.v2 -t --rm registry.lqingcloud.cn/library/centos:7.4.1708 centos-kata sh

参考