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

相關文章
相關標籤/搜索