K3S on Raspberry Pi — Cluster Setup (Update: 2024–08–04)

สำหรับเนื้อหาในบทความนี้จะเป็นการ แก้ไขเพิ่มเติมจากบทความก่อนหน้าสำหรับการติดตั้ง K3S Cluster เพื่อให้สามารถติดตั้งได้กระชับขึ้นครับ

The content in this article, is a revision and update from the previous article on setting up a K3S Cluster, making the installation process more concise.

เริ่มแรกเราจะทำการติดตั้ง OS ของ Raspberry Pi ให้เป็นแบบ Lite OS 64bit ทั้ง Host และ Node ซึ่งเราสามารถทำได้โดยในหน้าของโปรแกรม Raspberry Pi Imager หลังจากที่เราเลือก Pi Device แล้ว และเราจะทำการเลือก OS นั้น ให้เราเลือก Raspberry Pi OS (other) -> Raspberry Pi OS Lite (64-bit)

First, we will install the OS for the Raspberry Pi as Lite OS 64-bit on both the Host and Node. This can be done through the Raspberry Pi Imager program. After selecting the Pi Device, choose the ‘Raspberry Pi OS (other)’ and ‘Raspberry Pi OS Lite (64-bit).

และให้ทำตามขั้นตอนสำหรับการติดตั้งลง SD Card ต่อไป และรอจนกว่าจะเสร็จ

จากนั้นให้เสียบ SD card กลับเข้าไปใหม่ เพื่อทำการแก้ไขไฟล์ cmdline.txt โดยให้เพิ่มคำสั่งนี้เข้าไปต่อท้าย

Next, reinsert the SD card to edit the file cmdline.txt by adding this command at the end.

cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

หลังจากนั้นให้เสียบ SD Card เข้ากับ Raspberry Pi และเปิดเครื่อง ให้รอจนกว่าจะ Boot เสร็จ ซึ่งเราสามารถเช็ค IP ได้จาก Router หรือโปรแกรม IP Scanner ต่างๆ ได้

After that, insert the SD card into the Raspberry Pi and power it on. Wait until the boot process is complete. You can check the IP address from the router or using IP scanner programs.

ซึ่งเมื่อ Pi Boot เสร็จแล้ว เราก็จะมาทำการปิดการใช้งาน SWAP กันก่อน โดยขั้นตอนมี ดังนี้

Once the Pi has finished booting, we will first disable SWAP. The steps are as follows:

# 1. ปิด swap / turn of swap
sudo swapoff -a

# 2. แก้ไขขนาดของ swap โดยให้เปิดไฟล์ dphys-swapfile ขึ้นมา / open file 'dphys-swapfile' to edit
sudo nano /etc/dphys-swapfile

# 3. แก้ไขค่าของ CONF_SWAPSIZE ให้เป็น 0 / change the value of CONF_SWAPSIZE to 0
CONF_SWAPSIZE=0
# 4. บันทึกไฟล์แล้วออก / save and close

จากนั้นให้ทำการตั้งค่า IP โดยในตัวอย่างจะใช้ Pi 4 เป็น Host และ Pi3 เป็น Node

Next, configure the IP addresses. In this example, a Pi 4 will be used as the Host and a Pi 3 as the Node.

สำหรับการ setup IP เราก็จะใช้คำสั่งนี้ เพื่อเปิดหน้าต่างการตั้งค่า Network Interface ขึ้นมา

We will use this command to open the Network Interface configuration window to set up the IP addresses.

sudo nmtui

จากนั้นให้เลือก Edit Connection และเลือก Interface ที่ต้องการตั้งค่า โดยในที่นี้่จะใช้เป็น Wi-Fi

Next, select ‘Edit Connection’ and choose the interface you want to configure, which in this case will be Wi-Fi.

แล้วให้เลื่อนลงมาที่ IPv4 Configuration ซึ่งจะเป็นคำว่า Automatic แล้วเปลี่ยนเป็น Manual และให้กด enter ที่คำว่า Show ด้านขวา เพื่อเปิดหน้า IP Config

Then, scroll down to ‘IPv4 Configuration,’ which will be set to ‘Automatic.’ Change it to ‘Manual’ and press ‘Enter’ on the ‘Show’ button on the right to open the IP Config window.

ให้ระบุ IP ที่ต้องการใช้งาน

Specify the IP address you want to use.

เมื่อตั้งค่าเสร็จแล้วให้เลื่อนลงไปล่างสุดที่คำว่า OK แล้ว Enter เพื่อบันทึก ก็จะกลับมาที่หน้าจอ Interface ให้กดที่ Back และเลื่อนไปที่ Quit เพื่อออก

Once the configuration is complete, scroll down to the bottom and select ‘OK,’ then press ‘Enter’ to save. You will return to the Interface screen. Click ‘Back,’ and then scroll to ‘Quit’ to exit.

จากให้ให้สั่ง Reboot ด้วยคำสั่ง

Then, reboot the system using the following command:

sudo reboot

และให้่ทำแบบเดียวกันกับ Node ตัวอื่นๆ

Apply the same process to the other Node devices.

ขั้นตอนต่อไปจะเป็นการติดตั้ง K3S บน Raspberry Pi กัน สำหรับตัว Host ให้ใช้คำสั่งนี้ เพื่อเปลี่ยนเป็น root ก่อน

The next step is to install K3S on the Raspberry Pi. For the Host, use the following command to switch to root first:

sudo -s

จากนั้น ให้ใช้คำสั่งนี้เพื่อติดตั้ง k3s สำหรับเครื่อง Host

Next, use the following command to install K3S on the Host machine:

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" \
INSTALL_K3S_EXEC="server --disable=traefik --flannel-backend=host-gw --tls-san=192.168.1.120 --bind-address=192.168.1.120 --advertise-address=192.168.1.120 --node-ip=192.168.1.120 --cluster-init" sh -s -
  • K3S_KUBECONFIG_MODE
    เป็นการกำหนด mode ให้สามารถใช้งานได้โดยไม่ต้องขอสิทธิ์ root
    This sets the mode to allow usage without needing root privileges.
  • INSTALL_K3S_EXEC
    เป็นการกำหนด config ต่างๆ สำหรับติดตั้ง
    This configures various settings for the installation.
  1. server
    เป็นการระบุว่าจะติดตั้งแบบ server mode
    This specifies whether to install in server mode mode.
  2. — disable=traefik
    เป็นการยกเลิกการติดตั้ง treafik ซึ่ง treafik จะเป็นค่า default ในการติดตั้ง เพื่อทำ service หรือ load balance
    This cancels the installation of Traefik, which is the default for service management and load balancing in the installation.
  3. — flannel-backend=host-gw
    จะเป็นการกำหนด network สำหรับ k3s ซึ่งจะใช้เป็นแบบ host-gw จะหมายถึงการกำหนดให้มีการสร้าง route ในทุกๆ node ที่อยู่ใน cluster
    This sets the network configuration for K3S to use host-gw, which means creating routes on every node within the cluster.
  4. — tls-san=192.168.1.120
    เป็นการกำหนด IP หรือ DNS เพื่อสร้าง Certification สำหรับใช้งาน TLS
    This configures the IP or DNS to create a certificate for TLS usage.
  5. — bind-address=192.168.1.120
    เป็นการกำหนด IP สำหรับทำ Server listening
    This sets the IP address for the server listening.
  6. — advertise-address=192.168.1.120
    เป็นการกำหนด IP เพื่อให้เครื่องที่เป็น node สามารถเชื่อมต่อได้
    This specifies the IP address that allows the node machines to connect.
  7. — node-ip=192.168.1.120
    เป็นการกำหนด IP เพื่อให้ Service บน node เรียกใช้งาน
    This specifies the IP address for services on the node to use.
  8. — cluster-init
    เป็นการระบุให้มีการติดตั้งเครื่องนี้เป็น Host หากไม่ใส่จะเป็นการ join ไปยัง host อื่นที่มีอยู่
    This designates the machine as the Host. If this is not specified, the machine will join an existing Host instead.

จากนั้น ให้ใช้คำสั่งเพื่อตรวจสอบ service และหาก service ทำงานปกติ ก็จะแสดง ดังภาพ

Then, use the command to check the service. If the service is running normally, it will display as shown in the image.

systemctl status k3s

ให้ออกจาก root แล้วลองใช้คำสั่ง แสดงข้อมูลของ cluster

Exit root, and then use the command to display information about the cluster.

kubectl cluster-info

ขั้นตอนสุดท้ายสำหรับเครื่อง Host ให้ทำการ export token และ config สำหรับใช้ในการเชื่อมต่อ

The final step for the Host machine is to export the token and configuration for use in connecting.

#1 export cluster token
sudo cat /var/lib/rancher/k3s/server/node-token > ~/.kube/node_token

#2 export cluster config
sudo kubectl config view --raw > ~/.kube/config

ขั้นตอนต่อไป ก็จะเป็นการติดตั้ง node ให้กับ k3s โดยเราจะใช้คำสั่ง

The next step is to install the node for K3S using the following command:

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" K3S_URL=https://192.168.1.120:6443 \
K3S_TOKEN="<token>" sh -

สำหรับค่า token ก็จะเป็น token ที่เรา export ไว้ในไฟล์ node_token ในเครื่อง Host

The token value will be the token exported in the node_token file on the Host machine.

ตรวจสอบว่า Service ทำงานหรือไม่ด้วยคำสั่ง

Check whether the service is running using the following command:

 systemctl status k3s-agent

จากนั้น กลับไปเช็คที่เครื่อง Host ด้วยคำสั่งนี้ ก็จะแสดงรายการของ node ขึ้นมา

Then, return to the Host machine and use this command to display the list of nodes.

kubectl get nodes

Reference:

Part 1 — Raspberry Pi Setup

Part 2 — Static IP Setup

Part 3 — Main Cluster Setup

Part 4 — Node Cluster

Part 5 — Ingress Nginx

Part 6 — Remote Access

Part 7 — Portainer

Cluster install — update on 2024–08–04

--

--