zoukankan      html  css  js  c++  java
  • IoT设备实践丨如果你也在树莓派上部署了k3s,你也许需要这篇文章

    前 言

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

  • 相关阅读:
    398. Random Pick Index
    382. Linked List Random Node
    645. Set Mismatch
    174. Dungeon Game
    264. Ugly Number II
    115. Distinct Subsequences
    372. Super Pow
    LeetCode 242 有效的字母异位词
    LeetCode 78 子集
    LeetCode 404 左叶子之和
  • 原文地址:https://www.cnblogs.com/k3s2019/p/12484995.html
Copyright © 2011-2022 走看看