IoT设备实践丨若是你也在树莓派上部署了k3s,你也许须要这篇文章

前 言

树莓派是一种普遍流行的开发板,随着物联网的深刻发展,树莓派大有成为IoT终端设备标准之趋势。在支持客户在IoT场景中落地k3s时,k3s在树莓派上的部署问题也就出现了。本文记录了一些其中的关键问题,转述成文,方便其余用户参考。linux

硬件设备: 树莓派4算法

k3s版本: v1.17.3+k3s1ubuntu

操做系统:服务器

ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img架构

安装采用airgap方式部署后,核心问题是k3s没法启动,并有如下日志报错信息:dom

在这里插入图片描述

关键报错信息:性能

level=error msg="Failed to find memory cgroup, you may need to add \"cgroup_memory=1 cgroup_enable=memory\" to your linux cmdline (/boot/cmdline.txt on a Raspberry Pi)"

排查记录

日志提示很明显,因此咱们修改/boot/cmdline.txt并重启,可是重启后发现问题依旧,仍是有这个问题。这个修改的本质是添加内核参数,因此咱们从操做系统层面检查:加密

$ cat /proc/cmdline | grep cgroup_memory
 # nothing return

也就是说,cmdline的修改没有生效。因此,咱们怀疑ubuntu这个镜像修改cmdline有其余方式:操作系统

$ df -hT | grep mmc
/dev/mmcblk0p2 ext4       29G  2.8G   26G  10% /
/dev/mmcblk0p1 vfat      253M  117M  136M  47% /boot/firmware
# 真正的启动分区在/boot/firmware

# 阅读/boot/firmware/README
# 排查后得知,应该修改nobtcmd.txt

在/boot/firmware/nobtcmd.txt添加cgroup相关参数后,重启后能够看到cmdline有了指望的配置:日志

$ cat /proc/cmdline | grep cgroup_memory
coherent_pool=1M ………. cgroup_memory=1 cgroup_enable=memory

这时发现k3s依然没有完成启动,日志输出缓慢,怀疑系统某些因素影响了启动过程。排查entropy,发现可用值很是低,低到会阻塞程序运行,通常来讲<1000程序就会卡住:

$ cat /proc/sys/kernel/random/entropy_avail
522

不少程序的运行都依赖随机数生成,好比hash、加密解密等过程。申请随机数就会消耗系统的entropy(熵),当entropy低到必定阈值,程序就运行缓慢,等待随机数种子。

通常来讲kernel能够从硬件运行信息中收集噪声来补充entropy,但树莓派毕竟硬件能力有限,没法从硬件层面快速生成entropy,因此咱们安装软件提供模拟算法进行补充:

$ apt install haveged 
$ systemctl enable haveged

$ cat /proc/sys/kernel/random/entropy_avail
2366

一切稳当以后,再查看k3s启动状态,k3s已经完成启动。

总 结

Linux运行在诸如树莓派这种简易硬件架构下,会有不少细微差异,平日在x86 server体系的认知和经验可能都是不成立,这就致使运行在服务器Linux上的软件并不会那么容易移植到小型终端设备上。对于树莓派,除了文中说起的内容,你还须要关注NTP时间同步,MicroSD卡的IO性能等等。

相关文章
相关标签/搜索