当 `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_manager
是 cgroupfs
。
当我尝试在 /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.json
与 sandbox_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,它现在应该可以正常启动了。
我成功地使用 cri-o 到 运行 pod 和容器,跟随 guide and tutorial,其默认 cgroup_manager
是 cgroupfs
。
当我尝试在 /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.json
与 sandbox_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,它现在应该可以正常启动了。