Kubernetes:kubeadm init - CGROUPS_PIDS:缺失

问题描述

我正在尝试运行 kubeadm init,但在预检期间出现此错误CGROUPS_PIDS: missing

kubeadm init phase preflight

[preflight] Running pre-flight checks
[preflight] The system verification Failed. Printing the output from the verification:
KERNEL_VERSION: 3.13.0-37-generic
CONfig_NAMESPACES: enabled
CONfig_NET_NS: enabled
CONfig_PID_NS: enabled
CONfig_IPC_NS: enabled
CONfig_UTS_NS: enabled
CONfig_CGROUPS: enabled
CONfig_CGROUP_cpuACCT: enabled
CONfig_CGROUP_DEVICE: enabled
CONfig_CGROUP_FREEZER: enabled
CONfig_CGROUP_SCHED: enabled
CONfig_cpuSETS: enabled
CONfig_MEMCG: enabled
CONfig_INET: enabled
CONfig_EXT4_FS: enabled
CONfig_PROC_FS: enabled
CONfig_NETFILTER_XT_TARGET_REDIRECT: enabled (as module)
CONfig_NETFILTER_XT_MATCH_COMMENT: enabled (as module)
CONfig_OVERLAYFS_FS: enabled (as module)
CONfig_AUFS_FS: enabled (as module)
CONfig_BLK_DEV_DM: enabled
DOCKER_VERSION: 19.03.8
DOCKER_GRAPH_DRIVER: aufs
OS: Linux
CGROUPS_cpu: enabled
CGROUPS_cpuACCT: enabled
CGROUPS_cpuSET: enabled
CGROUPS_DEVICES: enabled
CGROUPS_FREEZER: enabled
CGROUPS_MEMORY: enabled
CGROUPS_PIDS: missing
CGROUPS_HUGETLB: enabled
error execution phase preflight: [preflight] Some Fatal errors occurred:
        [ERROR SystemVerification]: missing required cgroups: pids
[preflight] If you kNow what you are doing,you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

kubeadm 版本:

kubeadm version: &version.Info{Major:"1",Minor:"20",GitVersion:"v1.20.2",GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56",GitTreeState:"clean",BuildDate:"2021-01-13T13:25:59Z",GoVersion:"go1.15.5",Compiler:"gc",Platform:"linux/amd64"}

在 Digital Ocean VM 上运行的 Ubuntu 20.04 版。我以前在同一个 VM 上有一个 kubernetes 集群(也使用 kubeadm),但是在集群崩溃和 Ubuntu 升级之后,现在尝试从头开始重新创建集群时出现此错误(我先运行 kubeadm reset)。>

经过数小时的谷歌搜索后,我仍然不知道如何解决这个问题,甚至不知道这意味着什么。任何帮助表示赞赏。


更新

内核配置 CGROUPS 的输出

$ cat /boot/config-`uname -r` | grep CGROUP
CONfig_CGROUPS=y
# CONfig_CGROUP_DEBUG is not set
CONfig_CGROUP_FREEZER=y
CONfig_CGROUP_DEVICE=y
CONfig_CGROUP_cpuACCT=y
CONfig_CGROUP_HUGETLB=y
CONfig_CGROUP_PERF=y
CONfig_CGROUP_SCHED=y
CONfig_BLK_CGROUP=y
# CONfig_DEBUG_BLK_CGROUP is not set
CONfig_NET_CLS_CGROUP=m
CONfig_NETPRIO_CGROUP=m

更新:已解决

事实证明,我的云提供商否决了内核为较旧的内核 (3.x)。更改设置后,Ubuntu GRUB 启动的内核 (5.x) 正在运行,其中启用了 CGROUPS_PIDS

解决方法

这可能会报告您的内核没有定义 pids cgroup 的事实。如果定义了 CONFIG_CGROUP_PIDS,后者由 Linux 内核提供。

看看你的内核配置。在 Ubuntu 下,你可以运行类似:

$ cat /boot/config-`uname -r` | grep CGROUP 
CONFIG_CGROUPS=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPF=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_SOCK_CGROUP_DATA=y
# CONFIG_BLK_CGROUP_IOLATENCY is not set
CONFIG_BLK_CGROUP_IOCOST=y
# CONFIG_BFQ_CGROUP_DEBUG is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=m
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y

然后,检查您的内核是否使用 CONFIG_CGROUP_PIDS 构建。在上面的显示中,它被设置了。