前 言

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

硬件设备: 树莓派4

k3s版本: v1.17.3+k3s1

操作系统:

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

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

关键报错信息:

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性能等等。

IoT设备实践丨如果你也在树莓派上部署了k3s,你也许需要这篇文章的更多相关文章

  1. 在树莓派上部署InfoPi

    如果仅仅想试用InfoPi,请参照此文在Windows上试用.在Windows上部署比在树莓派上部署简单得多. 先说明一下,我用的系统是Raspbian(2014-06-20发布的). 用户pi,工作 ...

  2. 在树莓派上部署asp.net

    今天成功的在树莓派上部署asp.net呢.之前在unbuntu上测试成功了,结果今天操作的时候又不会操作了,主要对Linux太不熟悉了,找资料,资料又不多,这次赶紧记录下来,以备下次查阅. 我用的mo ...

  3. Windows 10 IoT Serials 4 - 如何在树莓派上使用Cortana语音助手

    从Windows 10 IoT Core 14986版本开始,微软已经加入Cortana语音助手功能.之前,我们只能使用本地语音识别,需要编写应用程序,下载到设备中才能实现.从现在开始,微软已经从系统 ...

  4. 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  5. 以数字资产模型为核心驱动的一站式IoT数据分析实践

    [摘要] 一个不会直播的云服务架构师,不是一个好的攻城狮! 在这个全民直播的时代 一个不会直播的云服务架构师 不是一个好的攻城狮 3月23日15:00-15:50,华为云IoT物联网数据分析服务架构师 ...

  6. Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 前几章我 ...

  7. 【Windows 10 IoT - 1】Window 10系统安装(树莓派 Pi2)

    一.硬件准备 (1).树莓派Pi2 (2).8G 10速Micro SD卡 (3).LCD显示器(如果是VGA接口,需要加一个HDMI转VGA模块) (4).鼠标 (5).安装Windows 10的P ...

  8. 操作 IoT 设备内嵌 SQLite

    Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD   Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本 ...

  9. 恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备

    恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备   想要起来时,一种沉重感阻碍着他,这是一种安全感:感觉到一张床为他铺好了,而且只属于他:想要静卧时,一种不安阻碍着他,把他从床上赶起来,这是 ...

随机推荐

  1. nginx+php+扩展件安装实践版

    一.安装各种软件包 yum -y install wget git vim lrzsz unzip zip gcc make gd-devel bzip2 bzip2-devel libcurl li ...

  2. struts.xml中namespace的配置之浏览器兼容性

    还是做练习项目的时候发现一个问题: <span style="font-size:14px;"><package name="default" ...

  3. 吴裕雄--天生自然 HADOOP大数据分布式处理:CenterOS 7 多台物理机、虚拟机相互桥连接ping通,并且能够成功连接外网

    选择用于桥接模式下的虚拟交换机,并且要选择对应的有线或者无线的网卡,如果主机是插网线联网的,那就选择有线网卡,如果主机是连无线网络的就选择无线网卡.Realtek PCIe GBE Family Co ...

  4. centos 中文乱码解决办法

    缘由:本人在虚拟机中安装centos 5.3,起初安装时选择了english,后来使用的过程中发现打开网页,会出现中文乱码,无法正常显示.当然,本地文件中的中文更是无法显示. 若是将系统语言langu ...

  5. python3多线程应用详解(第三卷:图解多线程中join,守护线程应用)

  6. FPGA实现CRC编码

    首先CRC应用的主要场景: 在数据通信中要求数据的高度可靠性,但实际上由于信道不理想或者噪声干扰都会导致数据的误码率 那么对于信道不理想产生的影响可以用均衡的方法进行改善或者消除,而噪声干扰的数据误码 ...

  7. WEB 安全 - xss 初探

    零.参考资料 网络攻击-XSS攻击详解: 前端安全之XSS攻击: 一.概念 跨站脚本攻击Cross-site scripting (XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户 ...

  8. overflow属性的应用

    在使用JQueryUI chosen插件的时候,由于页面布局的原因,下拉列表框超出div范围,图形效果严重变形,一点解决的思路都没有,最后请教公司前端,瞬间解决,原来使用CSS 中的overflow属 ...

  9. JAVA递归、非递归遍历二叉树

    前序遍历:1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历:1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历:1.后序遍历左子树 2.后序遍历右子树 3.访问根节点-- ...

  10. 自定义一个简单的SegmentedControl

    先大概看下我们想实现简单的效果 源码 // // DSegmentedControl.swift // IOS学习之自定义UISegmentedControl // // Created by din ...