当 `cgroup_manager=systemd` 时使用 cri-o 到 运行 pod 和容器

use cri-o to run pod and container when `cgroup_manager=systemd`

我成功地使用 cri-o 到 运行 pod 和容器,跟随 guide and tutorial,其默认 cgroup_managercgroupfs

当我尝试在 /etc/crio/crio.conf 中设置 cgroup_manager = "systemd" 并重新启动 crio 服务时。

然后,我在 tutorial

中尝试了相同的步骤
POD_ID=$(sudo crictl runp test/testdata/sandbox_config.json)

得到以下错误:

FATA[0000] run pod sandbox failed: rpc error: code = Unknown desc = cri-o configured with systemd cgroup manager, but did not receive slice as parent: /Burstable/pod_123-456

sandbox_config.jsonsandbox_config.json

相同

cgroup_manager=systemd如何使用cri-o启动pod和container?有样品吗?

我在 crictl.md 中找到了一个成功的演示。

我想可能是上面sandbox_config.json中的linux cgroup配置不适合systemd。

$ cat pod-config.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "log_directory": "/tmp",
    "linux": {
    }
}

$ cat container-config.json
{
  "metadata": {
      "name": "busybox"
  },
  "image":{
      "image": "busybox"
  },
  "command": [
      "top"
  ],
  "log_path":"busybox/0.log",
  "linux": {
  }
}

但是,我仍然不知道如何为 systemd 配置 sandbox_config.json 中的 linux.*

我必须做的一件事是将我的 cgroup-manager for crictl 设置为 systemd: 在 crictl.yaml:

runtime-endpoint: unix:///var/run/crio/crio.sock
cgroup-manager: systemd

据我了解,您不需要在 pod 配置中指定 cgroup(您可以,但不是必需的)。 CRI-O 和 crictl 只需要要求相同的 cgroup 层次结构

当您在 /etc/crio/crio.conf 中将 cgroup 管理器切换到 systemd 时,您必须修改 pod yaml/json 以给 cgroup_parent 一个切片。 所以在你的 sandbox_config.json 改变

"linux": {
        "cgroup_parent": "/Burstable/pod_123-456",

像这样

"linux": {
        "cgroup_parent": "podabc.slice",

尝试重新创建您的 pod,它现在应该可以正常启动了。