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.
- server
เป็นการระบุว่าจะติดตั้งแบบ server mode
This specifies whether to install in server mode mode. - — 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. - — flannel-backend=host-gw
จะเป็นการกำหนด network สำหรับ k3s ซึ่งจะใช้เป็นแบบ host-gw จะหมายถึงการกำหนดให้มีการสร้าง route ในทุกๆ node ที่อยู่ใน cluster
This sets the network configuration for K3S to usehost-gw
, which means creating routes on every node within the cluster. - — tls-san=192.168.1.120
เป็นการกำหนด IP หรือ DNS เพื่อสร้าง Certification สำหรับใช้งาน TLS
This configures the IP or DNS to create a certificate for TLS usage. - — bind-address=192.168.1.120
เป็นการกำหนด IP สำหรับทำ Server listening
This sets the IP address for the server listening. - — advertise-address=192.168.1.120
เป็นการกำหนด IP เพื่อให้เครื่องที่เป็น node สามารถเชื่อมต่อได้
This specifies the IP address that allows the node machines to connect. - — node-ip=192.168.1.120
เป็นการกำหนด IP เพื่อให้ Service บน node เรียกใช้งาน
This specifies the IP address for services on the node to use. - — 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