首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ARM上的Kubelet无法启动:无法启动ContainerManager系统验证失败-以下Cgroup子系统未装入:[cpuset]

基础概念

ARM: ARM(Advanced RISC Machines)是一种广泛使用的处理器架构,特别适用于移动设备和嵌入式系统。

Kubelet: Kubelet是Kubernetes集群中的一个关键组件,负责在每个节点上运行容器。它与Master节点通信,确保Pods按照期望的状态运行。

Cgroups (Control Groups): Cgroups是Linux内核的一个功能,用于限制、核算并隔离一组进程的资源使用(如CPU、内存、磁盘I/O等)。

ContainerManager: 在Kubernetes中,ContainerManager是一个管理容器生命周期的系统组件,它使用Cgroups来管理资源。

问题原因

当Kubelet在ARM架构上无法启动,并报告“无法启动ContainerManager系统验证失败-以下Cgroup子系统未装入:[cpuset]”错误时,通常是因为Cgroups的cpuset子系统没有正确配置或加载。

解决方法

  1. 检查内核模块: 确保cpuset内核模块已经加载。可以通过以下命令检查:
  2. 检查内核模块: 确保cpuset内核模块已经加载。可以通过以下命令检查:
  3. 如果没有输出,需要手动加载模块:
  4. 如果没有输出,需要手动加载模块:
  5. 配置Cgroups: 确保Cgroups的配置文件正确无误。通常位于/etc/cgconfig.conf/etc/cgrules.conf。检查这些文件中是否有针对cpuset的正确配置。
  6. 重启服务: 在修改了配置文件后,重启相关的服务以应用更改:
  7. 重启服务: 在修改了配置文件后,重启相关的服务以应用更改:
  8. 检查Kubelet日志: 查看Kubelet的日志文件,通常位于/var/log/kubelet.log,以获取更多详细的错误信息。
  9. 更新系统和内核: 确保操作系统和内核都是最新版本,因为旧版本可能存在已知的bug或不支持某些功能。
  10. 使用Docker的Cgroup驱动: 如果使用Docker作为容器运行时,确保Docker配置了正确的Cgroup驱动。可以在/etc/docker/daemon.json中设置:
  11. 使用Docker的Cgroup驱动: 如果使用Docker作为容器运行时,确保Docker配置了正确的Cgroup驱动。可以在/etc/docker/daemon.json中设置:
  12. 然后重启Docker服务:
  13. 然后重启Docker服务:

应用场景

这个问题通常出现在需要在ARM架构上部署Kubernetes集群的场景中,特别是在资源受限的环境如嵌入式系统或物联网设备上。

优势

  • 资源隔离: Cgroups允许对进程组进行资源限制,确保关键应用不会被其他应用消耗过多资源。
  • 性能监控: 可以实时监控各个进程组的资源使用情况,便于优化和调试。
  • 安全性: 通过限制资源访问,可以减少潜在的安全风险。

通过上述步骤,应该能够解决ARM上Kubelet因Cgroup子系统未装入而无法启动的问题。如果问题仍然存在,建议进一步检查系统日志和相关配置文件,或者寻求社区支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kubelet从入门到放弃:识透CPU管理

但是当节点上运行了CPU 密集型 Pod 时,应用可能会因抢占等情况导致CPU切换,而上述的切换导致的延时与中断对于业务敏感性Pod是无法接受的。 为了解决上述问题。...cpuset cpuset作为cgroup的子系统,主要用于numa架构,用于设置cpu的亲和性,为 cgroup 中的 task 分配独立的 CPU和内存等。...容器cgroup目录的 cpuset文件 中的 CPU 数量与 Pod 中指定的 CPU limit 相等。这种分配增强了CPU亲和性,减少了CPU上下文切换。...在介绍代码之前,zouyee先带各位看一看CPU manager的启动图(CPU manager属于Container Manager模块的子系统) ?...对于上图的内容,zouyee总结流程如下: 1、在命令行启动部分,Kubelet中调用NewContainerManager构建ContainerManager 2、NewContainerManager

52630

Kubelet从入门到放弃:识透CPU管理

但是当节点上运行了CPU 密集型 Pod 时,应用可能会因抢占等情况导致CPU切换,而上述的切换导致的延时与中断对于业务敏感性Pod是无法接受的。 为了解决上述问题。...1.3 相关技术 在CPU管理中,涉及NUMA、HT及cpuset技术,以下为简要介绍。...cpuset cpuset作为cgroup的子系统,主要用于numa架构,用于设置cpu的亲和性,为 cgroup 中的 task 分配独立的 CPU和内存等。...容器cgroup目录的 cpuset文件 中的 CPU 数量与 Pod 中指定的 CPU limit 相等。这种分配增强了CPU亲和性,减少了CPU上下文切换。...对于上图的内容,zouyee总结流程如下: 1、在命令行启动部分,Kubelet中调用NewContainerManager构建ContainerManager 2、NewContainerManager

81022
  • kubernetes 中 Qos 的设计与实现

    kubernetes 中的 cgroup level kubelet 启动后会在 root cgroup 下面创建一个叫做 kubepods 子 cgroup,kubelet 会把本机的 allocatable...机制最终为这个 pod 分配资源的,针对每一种资源,它会做以下几件事情: 首先判断 pod 属于哪种 Qos,在对应的 Qos level cgroup 下对 pod 中的每一个容器在 cgroup 所有子系统下都创建一个...小结 kubelet 启动时首先会创建 root cgroups 以及为 Qos 创建对应的 level cgroups,然后当 pod 调度到节点上时,kubelet 也会为 pod 以及 pod 下的...启动 containerManager 时也会启动 qosContainerManager,代码如下所示: k8s.io/kubernetes/pkg/kubelet/kubelet.go:1361...对于 Qos level cgroup,kubelet 会根据以下事件动态更新: 1、kubelet 服务启动时; 2、在创建 pod level cgroup 之前,即创建 pod 前; 3、在删除

    3.4K21

    Kubernetes 资源预留配置

    不过需要注意,如果 --kube-reserved-cgroup 不存在,Kubelet 不会创建它,启动 Kubelet 将会失败。...# 指定 kube 资源预留的 cgroup 修改完成后,重启 kubelet,如果没有创建上面的 kubelet 的 cgroup,启动会失败: $ systemctl restart kubelet...does not exist 上面的提示信息很明显,我们指定的 kubelet 这个 cgroup 不存在,但是由于子系统较多,具体是哪一个子系统不存在不好定位,我们可以将 kubelet 的日志级别调整为...请注意,如果 --system-reserved-cgroup 不存在,kubelet 不会创建它,kubelet 会启动失败。...我们通过 --eviction-hard 预留一些内存后,当节点上的可用内存降至保留值以下时,kubelet 将尝试驱逐 Pod, $ kubectl describe node ydzs-node4

    3.9K50

    图解K8s源码 - kubelet 下的 QoS 控制机制及 k8s Cgroups v2 简介

    QOSContainerManager 是包含在 containerManager 下的,所以在初始化和启动 containerManager 时也会对 QOSContainerManager 做初始化和启动...启动后的流程如下: 为了使 cgroup_manager 适配 cgroupv2,cgroup_manager 的部分代码做了更新。...cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。 memory 子系统,可以限制进程的 memory 使用量。...在 v1 中,不同的子系统比如 cpu、memory 其实可以挂载到一起。比如以下例子中将 cpu 相关的三个子系统挂到了一起,memory 是另外一个挂载点。...这种情况下做限速的话就需要 memory 和 blkio 这两个子系统能够协同。但是在 v1 中这两个子系统是独立设计和实现的,无法达到协同,也就无法限制 buffer io 的写。

    1.6K30

    Kubernetes之Kubelet组件解析

    Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volumes...containerManager 负责node节点上运行的容器的cgroup配置信息,kubelet启动参数如果指定–cgroupPerQos的时候,kubelet会启动gorountie来周期性的更新...pod的cgroup信息,维持其正确.实现了pod的Guaranteed/BestEffort/Burstable三种级别的Qos,通过配置kubelet可以有效的保证了当有大量pod在node上运行时...失败pod 4. 阻止直到pod在节点上终止 kubelet将实施围绕pod质量服务类定义的默认驱逐策略。 它将针对相对于其调度请求的饥饿计算资源的最大消费者的pod。...它按照以下顺序对服务质量等级进行排序。 消费最多的饥饿资源的BestEffort pods首先失败。 消耗最大数量的饥饿资源相对于他们对该资源的请求的Burstable pod首先被杀死。

    2K40

    Kubernetes 资源拓扑感知调度优化

    然而,Kubernetes 原生的调度与资源绑定功能已经无法满足复杂的算力场景,亟需对资源进行更加精细化的调度,主要体现为: Kubernetes 原生调度器无法感知节点资源拓扑信息导致 Pod 生产失败...Linux 下的容器技术主要通过 cgroups 来实现资源控制。 在 cgroups 中,cpuset 子系统可以为 cgroups 中的进程分配独立的 CPU 和内存节点。...通过将 CPU 核心编号写入 cpuset 子系统中的 cpuset.cpus文件中或将内存 NUMA 编号写入 cpuset.mems文件中,可以限制一个或一组进程只使用特定的 CPU 或者内存。...幸运的是,在容器的资源限制中,我们不需要手动操作 cpuset 子系统。通过连接容器运行时(CRI)提供的接口,可以直接更新容器的资源限制。...节点 kubelet 监听并准备启动 Pod。 节点 kubelet 调用容器运行时接口启动容器。

    1.8K20

    在Kubernetes集群中运行KIND以实现持续集成

    如果是这种情况,您需要在容器启动脚本中将--cgroup parent设置为以下内容,以便Docker daemon创建的cgroup能正确嵌套。...IPtables 我们观察到,当在生产Kubernetes集群中运行时,容器内的docker daemon启动的嵌套容器有时无法访问internet。但是,它在开发人员的笔记本电脑上可以正常运行。...我们在笔记本电脑上尝试了以下操作,它可以完美运行!...当KIND在DIND容器内的嵌套节点容器中启动kubelet时,相比于嵌套的KIND节点容器的root cgroup,kubelet将在/kubepods/burstable/下操作其pod的cgroup...之后,在我们的生产Kubernetes集群中启动一个KIND集群。您可以通过将以下yaml应用于Kubernetes集群来启动该修复程序。

    1.8K20

    Kubelet 对 Pod 的服务质量管理

    上篇文章 《Kubelet 创建 pod 工作流程》 讲解了 kubelet 如何创建 pod,各组件之间如何协作。基于上一篇文章,本文会讲解 kubelet 如何对 Pod 进行服务质量管理。...kubelet 启动后,会解析节点上的 root cgroups,然后在其下面创建一个叫做 kubepods 的子 cgroups。...kubelet 管理 pod QoS 等级是通过组件 qosContainerManager,该组件是组件 containerManager 的成员,在构造 containerManager 的时候构造...构造完毕后,containerManager 启动的时候,会初始化并启动所有的子组件,其中就包括 qosContainerManager,启动 qosContainerManager 的方式是调用 setupNode...如下图所示,首先会获取根组 cgroup (路径为/kubepods),也就是上一步解析的结果。

    1K32

    Docker in docker的一些故障检查过程

    启动内层docker daemon时报告缺cgroup mount 宋传义报告在1.9上可以成功的在外层容器里运行内层的docker daemon,但1.7的报告缺cgroup mount。...id=9787 在未启用LVM的情况下会直接报错退出,无法从 /etc/sysconfig/docker-storage-setup 生成 /etc/sysconfig/docker-storage 配置文件...在外层容器里启动内层容器时报告缺/sys/fs/cgroup/docker.service 这个故障,宋传义描述为“只有rz-ep17上docker in docker运行正常,其它机器均失败”。...如果kill掉start_docker.sh启动的docker daemon,手工在docker exec bash的命令行上另启动一个daemon,则一定出/sys/fs/cgroup/docker.service...经实验,发现docker被kubelet依赖启动的时候,/proc//cgroup 文件中perf_event、freezer、cpuset三行会是/docker-daemon;docker独立启动时则为

    25510

    在 Kubernetes 中运行 Kubernetes

    但是由于 Docker Daemon 进程做了绑定挂载,cadvisor 就无法找到容器进程对应的 cgroup。...cgroup 子系统),这个方法可以很好的解决这个问题。...IPtables 在使用的时候我们发现在线上的 Kubernetes 集群运行时,有时候容器内的 Docker Daemon 启动的嵌套容器无法访问外网,但是在本地开发电脑上却可以很正常的工作,大部分开发者应该都会经常遇到这种情况...当 KinD 在 DIND 容器内的嵌套节点容器内启动 kubelet 的时候,kubelet 将在 /kubepods/burstable/ 下相对于嵌套 KIND 节点容器的根 cgroup 为其...,相对于嵌套的 KinD 节点容器的根 cgroup,在 kubelet 启动之前就存在了,这是上面我们讨论过的 cgroups 挂载造成的,通过 KinD entrypoint 脚本设置。

    2.9K20

    vivo AI 计算平台的K8s填坑指南

    如果命令失败,出现以下错误消息: # docker run -d --name test --kernel-memory 100M nginx:1.14.2001f2ed0176941715d717b87a331fa05ab2bb2a9ab7107f3f66322ce9d6471a5docker...我们在 GPU 机器启动了该特性后,发现 GPU 容器无法访问 GPU 设备,执行 nvidia-smi 命令会有错误消息“Failed to initialize NVML: Unknown Error...根因分析 CPU Manager 特性是在 kubelet 的 CPU Manager 模块实现的。该模块通过 docker 的 --cpuset-cpus 参数,可以限制容器使用指定的 CPU 核。...修复方法 修复该问题需要修改 kubelet 的 CPU Manager 模块的代码。对于独占核的 Pod,不再定时去更新 Pod 的 cpuset-cpus 参数。这样规避了更新导致设备失效的问题。...这种策略导致系统中存在很多僵尸 cgroup,这些 cgroup 的进程已退出但是因为内核使用内存未释放,所以一直未被清理,还会包含在 memory.stat 中。

    1.4K10

    kubelet 架构浅析

    一、概要 kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理Pod 和其中的容器...,访问 http://localhost:4194 可以看到 cAdvisor 的管理界面,通过 kubelet 的启动参数 --cadvisor-port 可以指定启动的端口。...livenessProbe:用于判断容器是否存活,如果探测失败,kubelet 会 kill 掉该容器,并根据容器的重启策略做相应的处理。...可以通过配置 kubelet 启动参数 --eviction-hard= 来决定 evict 的策略值。...12、containerManager 负责 node 节点上运行的容器的 cgroup 配置信息,kubelet 启动参数如果指定 --cgroups-per-qos 的时候,kubelet 会启动

    2.5K00

    Docker的cgroup讲解

    ---- 概念 cgroup ,控制组,它提供了一套机制用于控制一组特定进程对资源的使用。cgroup绑定一个进程集合到一个或多个子系统上。...官方解释 subsystem,子系统,一个通过cgroup提供的工具和接口来管理进程集合的模块。一个子系统就是一个典型的“资源控制器”,用来调度资源或者控制资源使用的上限。其实每种资源就是一个子系统。...子系统可以是以进程为单位的任何东西,比如虚拟化子系统、内存子系统。 hierarchy,层级树,多个cgroup的集合,这些集合构成的树叫hierarchy。...可以认为这是一个资源树,附着在这上面的进程可以使用的资源上限必须受树上节点(cgroup)的控制。hierarchy上的层次关系通过cgroupfs虚拟文件系统显示。...举个例子,cpusets子系统可以将进程绑定到特定的cpu和内存节点上。 如果未理解跳过往下看,回头再看 讲解 /proc/[pid]/cgroup进程的cgroup信息,如下图: ?

    76510

    了解Linux的cgroup

    这就让cgroup的出现成为了可能,它用来统一将进程进行分组,并在分组的基础上对进程进行监控和资源控制管理。...其中cpuset主要用于设置CPU的亲和性,可以限制cgroup中的进程只能在指定的CPU上运行,或者不能在指定的CPU上运行,同时cpuset还能设置内存的亲和性。...cpuacct包含当前cgroup所使用的CPU的统计信息。这里我们只说以下cpu。...这个文件里面包含了一个控制是否为当前cgroup启动OOM-killer的标识。...如果写0到这个文件,将启动OOM-killer,当内核无法给进程分配足够的内存时,将会直接kill掉该进程;如果写1到这个文件,表示不启动OOM-killer,当内核无法给进程分配足够的内存时,将会暂停该进程直到有空余的内存之后再继续运行

    24710

    用树莓派构建 Kubernetes 集群

    ARM64;32 位 vs. 64 位;ARM vs. x86 请注意,AArch64 和 ARM64 实际上是同一种东西。不同的名称源于它们在不同社区中的使用。...采用 AArch64/ARM64 架构的系统也能够运行 32 位的 ARM 镜像,但反之则不然:32 位的 ARM 系统无法运行 64 位的容器镜像。...这里不会太深入地解释不同的架构类型,值得注意的是,ARM64/AArch64 和 x86_64 架构是不同的,运行在 64 位 ARM 架构上的 Kubernetes 节点无法运行为 x86_64 构建的容器镜像...对于树莓派 4,将以下内容添加到 /boot/firmware/cmdline.txt 文件中: cgroup_enable=cpuset cgroup_enable=memory cgroup_memory...# 将 cgroup 和交换选项添加到内核命令行中 # 请注意 "cgroup_enable=cpuset" 前的空格,以便在该行的最后一个项目后添加一个空格 $ sudo sed -i '$ s/$/

    77620
    领券