DEV Community

Lumin
Lumin

Posted on

Setup Raspberry Pi for Kubernetes Cluster

Why run Kubernetes on Raspberry Pi

  • การรัน Kubernetes ด้วย Raspberry Pi น่าจะให้ความรู้ผมมากกว่าการไปรันบน Katacoda หรือ GCP เพราะจะได้เจอปัญหาจริงๆ ในการ setup ลงบน machine จริงๆ ไม่ว่าจะเป็นเรื่องของ version หรือ dependency ต่างๆ

  • การรันโปรแกรมบน Raspberry Pi (ต่อไปจะใช้คำว่า Pi เพื่อลดจำนวนการกดคีบอร์ด) ทำให้เราคิดถึงเรื่องปริมาณที่จำกัดของ resource และ dependency เยอะมากๆ เพราะของหลายๆอย่างที่รันได้บน cloud ทั่วๆไป มันรันไม่ได้บน Pi เช่น kubectl (ใน Pi4 เจอ error ว่าไม่รองรับ armhf ซึ่งเข้าใจว่าเป็น CPU ของ Pi4)

  • ในระยะยาว เอา development environment มาลง Pi Cluster น่าจะประหยัดเงินช่วยได้เยอะ

  • มีโปรแกรมหลายๆตัวที่รันบน Cloud แล้วเปลืองมากๆ เช่น Open Faas หรือจะลอง Database ใหม่ๆบางตัว เช่น CockroachDB ถ้ามี Pi Cluster แล้ว ก็ลองเล่นได้แบบไม่เสียเงินเยอะ

Preparation

  • แน่นอนว่าต้องซื้อ Pi ก่อนรุ่นที่แนะนำคือ Pi 4 ซึ่งจะมี Ram ให้เลือก 4GB และ 8GB เลือกเอาที่สบายใจ

  • power adapter

  • SD card สำหรับลง Raspbian OS (สามารถซื้อมาพร้อมกับ Pi ได้เลย)

  • SD card reader สำหรับ install Raspbian OS ผ่าน Notebook (สามารถซื้อมาพร้อมกับ Pi ได้เลย)คนที่มี Mac Pro รุ่นใหม่ก็น่าจะลำบากหน่อย ต้องไปหา adapter มาเพิ่ม สำหรับผมโชคดีที่ยังมี Mac Air ปี 2013 ซึ่งมีช่องให้เสีย SD card reader อยู่แล้ว

  • Argon case (optional)เคสสำหรับใส่ Pi เป็นเคสที่ดูดีและแพงพอๆกับ Pi 4 4GB เลย

  • SSD card (optional)ถ้าซื้อ Argon case มาด้วย มันจะมีช่องให้เสียบ SSD card ก็จะได้ storage เพิ่ม ซึ่งดีกว่าการใช้  SD card แน่นอนอยู่แล้ว

Setup Raspberry Pi

การติดตั้ง Pi มี 2 วิธีคือ

  1. install ผ่าน monitor
  2. headless install คือเปิดมาใช้งานผ่าน ssh เลยซึ่งผมใช้วิธีนี้

ทั้ง 2 วิธีนี้ต้องเตรียม Raspbian OS ผ่าน SD card เหมือนกันหมด

ขั้นตอน

1) ไปเอา Raspbian image มาจาก https://www.raspberrypi.org/software/operating-systems/

2) ใช้โปรแกรม etcher ในการ flash SD card (เหมือนๆกับตอนที่เราจะ write CD … รู้สึกแก่)
https://www.balena.io/etcher/ คือพอเสียบ SD card ไปแล้วมันจะขึ้นมาให้เลือก image เพื่อทำ flash เลย

จบขั้นตอนการเตรียม Raspbian OS
ตอนนี้ผมได้ SD card ที่มี Raspbian OS แล้ว

3) สำหรับขั้นตอนถัดไปคือเข้าไป edit config ใน SD เพื่อบอกให้ Pi ต่อ wifi ตัวไหนในบ้านเรา

4) สร้างไฟล์ ssh ที่ root ของ SD (ไฟล์นี้น่าจะมีอยู่แล้วนะ)

5) สร้างไฟล์ wpa_supplicant.conf ที่ root ของ SD ข้อมูลในไฟล์จะเป็นดังนี้

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="NETWORK-NAME"
    psk="NETWORK-PASSWORD"
}
Enter fullscreen mode Exit fullscreen mode

ซึ่ง NETWORK-NAME คือ ชื่อของ wifi ที่เราต้องการใช้ Pi ต่อ และ NETWORK-PASSWORD คือ password ที่ใช้ connect wifi นั่นเอง

6) เอา SD เสียบเข้า Pi แล้วต่อ power adapter เลยเจ้า Pi จะ connect กับ wifi ที่เรากำหนดไว้ใน wpa_supplicant.conf

7) ทีนี้เราต้อง ssh เข้าไปใน Pi ซึ่งเราจำเป้นจะต้องรู้จัก IP ของ Pi ก่อนสำหรับ OSX เราใช้โปรแกรม IP Scanner https://apps.apple.com/th/app/ip-scanner/id404167149?mt=12
ซึ่งพอเปิดโปรแกรม มันจะลิสรายการ device ภายใน network ของเราทั้งหมด เราจะเจอ ip ของ Pi ภายใต้ชื่อ Raspberry Pi

8) พอได้ ip มาแล้ว เพื่อไม่ให้ Pi ของเราได้ ip ชุดใหม่ เราควรจะต้องทำ static ip ซึ่งเราสามารถไปค้นหาวิธีทำได้ใน google เลย เช่นผมที่ใช้ True ก็จะหาว่า "True wifi add static ip"

9) เมื่อทำ static ip แล้วก็สร้าง domain mapping ใน /etc/hosts

127.0.0.1    localhost
192.168.1.41 pi-master.local
Enter fullscreen mode Exit fullscreen mode

อันนี้สมมุติว่าผมมี Pi ip = 192.168.1.41 และจะใช้ domain เป็น pi-master.local

10) ssh เข้า Pi ซึ่งมันจะถามหา password โดย default password คือ raspberry

ssh pi@pi-master.local
Enter fullscreen mode Exit fullscreen mode

Update and Upgrade

เป็นประเพณี เมื่อเราได้ server ใหม่ เราควรจะต้อง update repo

sudo apt update && sudo apt upgrade -qy --no-install-recommends
sudo apt install rpi-eeprom  -y
sudo reboot
Enter fullscreen mode Exit fullscreen mode

และ reboot เพื่อความมั่นใจ 1 ที

Install Docker

curl -sSL https://get.docker.com | sh
sudo reboot
Enter fullscreen mode Exit fullscreen mode

เป็นประเพณีของ Docker เช่นกันที่ลงแล้วต้อง reboot

เสร็จแล้วเราควรจะเพิ่ม user เราลง docker group เพราะตามปกติเมื่อ install เสร็จ มันจะสร้าง user group สำหรับ docker runner

sudo usermod -aG docker $USER 
Enter fullscreen mode Exit fullscreen mode

install Kubernetes (k3s)

ตอนแรกพยายามจะ install official kubectl แต่ว่าได้ error ว่ามันรองรับ armhf (เข้าใจว่าเป็นสถาปัตยกรรม CPU ของ Pi4) จึงต้องใช้ k3s แทน

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
k3s --version 
Enter fullscreen mode Exit fullscreen mode

ซึ่งการรัน Kubernetes บน Pi นั้นจะต้องเพิ่ม config ใน /boot/cmdline.txt
โดยเพิ่ม cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 ลงท้ายไฟล์

ลองตรวจสอบ

k3s kubectl get node
Enter fullscreen mode Exit fullscreen mode

ซึ่งมันควรจะคืนค่า node ของ Pi มาให้เรา

NAME          STATUS   ROLES                  AGE     VERSION
raspberrypi   Ready    control-plane,master   5h40m   v1.21.5+k3s2
Enter fullscreen mode Exit fullscreen mode

ตอนนี้ผมจะได้ Pi รองรับการทำ Kubernetes Cluster ได้แล้ว

ในโพสถัดไปผมจะลองสร้าง app บน cluster ตัวนี้ และอยากจะลองใช้เครื่อง Mac เป็น work node สำหรับ cluster นี้ เพื่อจำลองการมีหลายๆ node ก่อนที่จะซื้อเคสและ Pi มาเพิ่ม :D


สิ่งที่ผมคิดว่าควรจะต้องไปดูเพิ่มอีก

  • security setup on Raspberry Pi ~ เพราะตอนนี้ access ด้วย default account

Top comments (0)