树莓派是一种普遍流行的开发板,随着物联网的深刻发展,树莓派大有成为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性能等等。