Skip to main content
Let's learn about K3s and Argo CD
let's-learn-about-k3s-and-argo-cd.md

Let's learn about K3s and Argo CD

2025-04-24 18:13:01

 
 

💡 K3s คืออะไร?

K3s เป็น Kubernetes เวอร์ชันที่เบาและง่ายต่อการติดตั้ง พัฒนาโดยบริษัท Rancher (ปัจจุบันคือ SUSE) เพื่อให้ใช้งาน Kubernetes ได้ง่ายขึ้นบนอุปกรณ์ทรัพยากรจำกัด

- Raspberry Pi
- ระบบ IoT
- Edge computing
- หรือแม้แต่ในเครื่อง dev เล็ก ๆ

 
 

🔍 จุดเด่นของ K3s

- ✅ เบา – ไฟล์ไบนารีเดียว ขนาดเล็กกว่า Kubernetes ปกติ
- ✅ ติดตั้งง่าย – ใช้คำสั่งเดียวก็ขึ้นคลัสเตอร์ได้เลย
- ✅ ลดความซับซ้อน – ตัดบาง component ที่ไม่จำเป็นออก เช่น etcd (ใช้ SQLite แทนโดย default)
- ✅ เหมาะกับ resource น้อย – ทำงานได้ดีในสภาพแวดล้อมที่มี RAM/CPU จำกัด

 
 

🚀 ใช้ทำอะไรได้บ้าง?

- สร้าง dev/test environment ที่เร็วและเบา
- ใช้งาน Kubernetes บนอุปกรณ์ IoT หรือ edge device
- เรียนรู้และทดลอง Kubernetes โดยไม่ต้องใช้ของหนักอย่าง Minikube หรือ k8s เต็มตัว

 
 

📊 เปรียบเทียบ K3s vs Kubernetes (K8s)

หัวข้อ

K3s

Kubernetes (K8s ปกติ)

🔧 การติดตั้ง ง่ายมาก ใช้แค่คำสั่งเดียว ซับซ้อน ต้องติดตั้งหลาย component แยกกัน
🧱 ขนาด/ทรัพยากร เบา ใช้ RAM และ CPU น้อย หนักกว่า ใช้ทรัพยากรมาก
🧠 ความซับซ้อน ลดความซับซ้อน (ตัด component บางตัวออก) เต็มรูปแบบ ฟีเจอร์ครบ
📦 Etcd / ฐานข้อมูล ใช้ SQLite เป็น default (เบากว่า) ใช้ etcd (เหมาะกับการ scale และ HA)
🔄 การอัปเกรด/ดูแลระบบ ง่ายกว่า จัดการได้เร็ว ต้องใช้ความรู้ลึกขึ้น
🚀 กรณีการใช้งาน เหมาะกับ dev, IoT, edge, lab/test เหมาะกับ production scale ขนาดใหญ่
 
 

⚙️ ขั้นตอนการติดตั้ง K3s

          ตัวอย่างระบบที่จะติดตั้งจะเป็นแบบ Single Server โดยจะเป็นการ ติดตั้งตัว Server node ขึ้นมา 1 node และจะเชื่อมต่อ Agent node ไปยัง server node ตามภาพที่แสดงข้างล่าง 

 

k3s-single-server

 

สิ่งที่ต้องเตรียม : 

- คอมพิวเตอร์ หรือ อุปกรณ์ที่จะใช้ติดตั้งระบบในที่นี้เราจะใช้เป็น VM โดย spec hardware จะอ้างอิงจากความต้องการขั้นต่ำของ ตัว K3s ถ้าเพื่อนๆมีเหลือก็จัดเลยครับ

- Server Node : 2 Cores CPU / 2 GB Ram / 10 GB Disk (1 node)

- Agent Node : 1 Core CPU / 512 MB Ram / 10 GB Disk (2 node ถ้าไม่ต้องการก็ไม่ต้องเพราะสามารถลงแบบ server node ตัวเดียวได้)

- OS ในที่นี้จะใช้เป็น ubuntu server 24.04 ทำให้ใน command ส่วนใหญ่ในบทความนี้จะเป็นของ ubuntu แต่ที่จริงแล้วตัว K3s สามารถจะติดตั้งใน os ประเภท linux ได้หลากหลาย สามารถเหลือได้ตามที่อุปกรณ์หรือเครื่องคอมนั้น support 

- ถ้าเครื่องเปิดใช้งานตัว swap อยู่ ให้ทำการ disable swap ด้วย 

ศึกษาเพิ่มเติม :

➡️ how-to-permanently-disable-swap-in-linux

 
 

ขั้นตอนการติดตั้ง : 

 

1. ทำการ update ระบบให้เรียบร้อย (สามารถข้ามไปได้เลย)

sudo apt update && sudo apt upgrade -y
 

2. ติดตั้งตัว K3s ที่ server node โดยจะ ตั้งค่าให้ disable ตัว traefik (เนื่องจากจะไปใช้แบบอื่น)

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="server" sh -s - --disable=traefik

**โดยตัว script ของ K3s จะติดตั้งตัว Kubectl มาให้เราเรียบร้อยแล้ว

ตรวจสอบว่าตัว node ติดตั้งเรียบร้อยแล้วหรือยัง โดยใช้คำสั่งของ kubectl

kubectl get nodes
 
kubectl-get-nodes-1
 

3. ก่อนที่ติดตั้ง K3s ที่ agent node จะต้องใช้ IP address หรือ hostname ของเครื่อง server node ด้วย สามารถหาได้ดังนี้ 

ip addr | grep eth0

get-server-node-ip

** เป็นเพียงตัวอย่าง IP และ interface ของเพื่อนๆอาจไม่เหมือนกัน 

จากนั้นต้องเอา token ที่ใช้ในการ register จาก server node โดยจะอยู่ที่ไฟล์ /var/lib/rancher/k3s/server/node-token

sudo cat /var/lib/rancher/k3s/server/node-token

get-server-token

 

4. ติดตั้ง K3s ที่ agent node ตัวอย่างคำสั่งที่ใช้ติดตั้ง K3s ที่ agent node

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="agent" K3S_TOKEN="server-node-token" sh -s - --server https://server-node-ip:6443

ให้เราแก้ คำสั่งโดยใส่ข้อมูลของ server node ลงไป ให้ทำการรันคำสั่งนี้ใน agent node ทุกตัว

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="agent" K3S_TOKEN="K10f445512011d792d7a4c8644e4c401845cdfbe0a6a92f48225e4b25fc9ab20c78::server:8db954fdf8618f0decbd7b20744432a8" sh -s - --server https://192.168.1.221:6443
 
5. เหมือนติดตั้งเสร็จหมดแล้วให้กลับไปที่ server node เพื่อ check สถานะของแต่ละ node โดยใช้คำสั่งของ kubectl เหมือนเดิม
kubectl get nodes

kube-get-nodes-2

 

จะพบว่ามี node เพิ่มเข้ามาจากตอนแรก และในตอนนี้ ตัว k3s cluster ก็พร้อมใช้งานแล้ว แต่ถ้าเราต้องการ access ตัว cluster จากภายนอก server node เราสามารถใช้ตัวไฟล์ kube config ได้ โดยตัวไฟล์ จะอยู่ที่ /etc/rancher/k3s/k3s.yaml

sudo cat /etc/rancher/k3s/k3s.yaml

 เมื่อจะนำไปใช้ให้เปลี่ยน IP address ไปเป็นของ server node ด้วย

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data:  """ """ """
    server: https://127.0.0.1:6443 // เปลี่ยนตรงนี้
  name: default
""" """ """
 

Optional : ติดตั้ง kubectl completion เพื่อความสะดวกในการใช้งาน

kubectl completion SHELL

คำสั่งในการติดตั้งอาจจะแตกต่างไปต่าง OS และ shell ที่ใช้ โดยในที่นี้จะใช้เป็น bash shell

source <(kubectl completion bash) 
echo "source <(kubectl completion bash)" >> ~/.bashrc
 
 
 
 

💡 Argo CD คืออะไร?

Argo CD (ย่อมาจาก Argo Continuous Delivery) คือ เครื่องมือสำหรับจัดการการ Deploy แอปพลิเคชันบน Kubernetes โดยใช้ GitOps

 

argocd-anime

 
 

🔧 คำว่า “GitOps” หมายถึงอะไร?

คือการใช้ Git เป็นศูนย์กลางในการจัดการแอป ทุกการเปลี่ยนแปลงของระบบ (เช่น config, deployment, service ฯลฯ) จะถูกบันทึกไว้ใน Git 
Argo CD จะ ดู Git Repo แล้ว Deploy ตามนั้นให้เอง
 
 

✅ สรุปง่าย ๆ 

- Argo CD ช่วยให้เรา Deploy จาก Git ไปยัง Kubernetes โดยอัตโนมัติ

- เราไม่ต้องไปรัน kubectl apply เอง

- มันจะ sync สถานะของแอปบน cluster ให้ ตรงกับไฟล์ YAML ใน Git

 
 

🎯 ทำไมคนถึงใช้ Argo CD?

- ควบคุมทุกอย่างผ่าน Git

- ตรวจสอบง่าย ใครแก้อะไร เมื่อไหร่

- ลด human error (ไม่ต้อง deploy มือ)

- มี UI สวย ๆ ให้ดูสถานะแอป

 
 

⚙️ ขั้นตอนการติดตั้ง Argo CD

 

1. ไปที่เครื่อง server node หรือ เครื่องที่ใช้ kube config ของ k3s cluster ที่ติดตั้งไป และทำการสร้าง namespace

kubectl create namespace argocd

 

2. ติดตั้งตัว argo cd

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

รอจะจนกว่าระบบจะติดตั้งเสร็จ โดยสามารถตรวจสอบได้ดังนี้ 

kubectl get deployments -n argocd

kube-get-argo

ให้รอจนกว่าจะ ready ทั้งหมด ดังภาพบนด้านบน

 

3. ในการเข้าใช้งานตัว web ต้องทำการเปิด port ให้สามารถเข้าถึง service ได้จากภายนอก เราจะทำการ patch ตัว service ให้เป็น type LoadBalancer

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

จากนั้นก็ดูว่าต้องใช้ port อะไร 

kubectl get svc argocd-server -n argocd
kube-get-svc

จากรูปด้านบนจะเห็นได้ว่า มี port 32343(http) และ 30756(https) โดยระบบจะสุ่มขึ้นมาทำให้อาจจะไม่เหมือนกันในทุกเครื่อง

 

4. เข้าใช้งานหน้าเว็บ โดยจะได้ server node ip และ port (http หรือ https ก็ได้) เปิด web browser แล้วใส่ที่อยู่เว็บได้เลย ในที่นี้จะเป็น https://192.168.1.221:30756

argocd-login
 
 
โดย default user จะเป็น admin ส่วน initial password อยู่ใน secret  เราต้องทำการ decode มันออกมา
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
argocd-password
 

จากนั้นก็ login เข้าใช้งานได้เลย ให้เราทำการเปลี่ยน password โดยไปที่ "User Info" แล้วทำการเปลี่ยน password ให้เรียบร้อย ทีนี้ตัว Argo CD ก็พร้อมใช้งาน 

 

argo-home

 
 

📝 ตัวอย่างการใช้งาน Argo CD

 

1.  connect repo เข้ากับตัว argo cd  ให้ไปที่ "Settings" > "Repositories" > "Connect Repo"  นั้นก็ใส่ข้อมูลของ project ที่เก็บตัว deployment ไว้ จากนั้นก็กด "Connect"

 
argo-repo
 
 

2. สร้างตัว Application สำหรับการ deploy ให้ไปที่ "Application" > "New app" สร้างรายละเอียดของ app จากนั้น กด "Create"

 
guestbook-create-1
 
guestbook-create-2
 

3. รอให้ตัว Application sync ให้สำเร็จ แล้วจะปรากฎข้อมูลต่างๆ เช่น deployment, service, pods และอื่น โดยจะอ้างดิงตาม component ที่อยู่ในไฟล์ deployment

 
guestbook-synced
 
Source code for demo :  ➡️ Github : ArgoCD Example Apps
 

!!! เพื่อความเข้าใจที่มากขึ้นรบกวนศึกษาเพิ่มเติม links ข้อมูลที่จำเป็นต่างๆได้รวบรวมไว้ให้แล้ว !!!

tags:DeploymentKubernetesDevOpsArgo CDK3s