Install Kubernetes on Ubuntu 24.04 LTS (Kube-VIP)

39

สวัสดีครับทุกคน วันนี้เราก็จะมาลองติดตั้ง Kubernetes กันครับ ก่อนอื่นเลย ทุกคนต้องเตรียม Resource ที่จะใช้ติดตั้งให้พร้อมก่อนนะครับ OK ถ้าพร้อมแล้วไปลุยกันเล๊ยยย!! เอ้ๆ ลืมอีกอย่าง ผมจะติดตั้งโดยใช้ Kube-VIP สำหรับไว้รองรับการทำ Mutiple Control-Plane (HA) ไว้ด้วย เริ่มกันเลยครับ

วิธีการติดตั้ง
#Set hostname
$ sudo hostnamectl set-hostname “k8sc1”

ซึ่งผมจะทำดังนี้
Control-Plane ประกอบด้วย
– k8sc1
– k8sc2
– k8sc3
Worker node ประกอบด้วย
– k8sw1
– k8sw2
– k8sw3
– k8sw4
– k8sw5

#Install dependencies
$ sudo apt update && sudo apt upgrade y
$ sudo apt install apttransporthttps curl y

#Install containerd
$ sudo apt install containerd -y

#Configure containerd
$ sudo mkdir -p /etc/containerd
$ containerd config default | sudo tee /etc/containerd/config.toml > /dev/null

$ sudo sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/’ /etc/containerd/config.toml

$ sudo systemctl restart containerd

#Install Kubernetes
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg –dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

$ echo ‘deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /’ | sudo tee /etc/apt/sources.list.d/kubernetes.list

$ sudo apt update
$ sudo apt install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl

#Disable swap
$ sudo swapoff -a
$ sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

#Set required sysctl
$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

$ sudo sysctl –system

ถึงส่วนนี้ผมก็จะทำในทุกๆ Node นะครับ ต่อไปก็จะทำการ Config Kube-VIP กันต่อ ซึ่งผมจะทำตาม Document นี้เลยครับ https://kube-vip.io/docs/installation/static/

#Kube-VIP (ทำแค่ C1)
$ export VIP=192.168.0.40 (ซึ่ง IP Address ของ VIP ก็ใช้ทำที่ทุกคนใช้ได้เลยครับ เพียงแค่ไม่ชนกันกับ IP Node ที่ใช้งาน)

$ export INTERFACE=ens160 (ในส่วนนี้ควรตรวจสอบก่อนโดยใช้คำสั่ง $ ip a สำหรับตรวจสอบ interface ที่ใช้งานก่อน)

$ KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r “.[0].name”)

#Set hosts (ในทุกๆ node)
$ sudo vi /etc/hosts
โดยผมจะเพิ่มส่วนนี้เข้าไปในไฟล์ hosts :
192.168.0.40 kube-api-server
192.168.0.41 k8sc1
192.168.0.42 k8sc2
192.168.0.43 k8sc3
192.168.0.44 k8sw1
192.168.0.45 k8sw2
192.168.0.46 k8sw3
192.168.0.47 k8sw4
192.168.0.48 k8sw5

#ทำการตรวจสอบ kube-api-server ว่าสามารถใช้งานได้หรือไม่ด้วยคำสั่ง :
$ ping kube-api-server หรือ ping 192.168.0.40

***หากไม่พบใช้คำสั่ง ip a ดูว่ามี VIP ติดอยู่กับ interface หรือไม่***
$ ip a show dev ens160 (ควรเห็น 192.168.0.40 อยู่ในรายการ)

#ถ้าไม่มีให้เพิ่มด้วยคำสั่ง :
$ ip addr add 192.168.0.40/24 dev ens160

# ทดสอบ ping อีกครั้ง (ควรจะใช้ได้)
$ ping kube-api-server

#Copy file kube-vip.yaml to k8sc2, k8sc3
$ scp /etc/kubernetes/manifests/kube-vip.yaml root@k8sc2:/etc/kubernetes/manifests/
$ scp /etc/kubernetes/manifests/kube-vip.yaml root@k8sc3:/etc/kubernetes/manifests/

#HA (https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)
$ kubeadm init –control-plane-endpoint 192.168.0.40 –apiserver-advertise-address 192.168.0.41

ผมลัพธ์ที่ได้ควรจะมีคำสั่งที่ใช้ Join ของ Control-Plane และ Worker nodes ออกมาด้วย เช่น :
kubeadm join xxx.xx.xx.xxx:6443 –token <token> \
–discovery-token-ca-cert-hash sha256:<key> \
–control-plane

kubeadm join xxx.xx.xx.xxx:6443 –token <token> \
–discovery-token-ca-cert-hash sha256:<key>

————————————

$ export KUBECONFIG=/etc/kubernetes/admin.conf

#Curl Caloco (https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises)
$ kubectl apply -f calico.yaml

#ตรวจสอบ calico
$ kubectl get -f calico.yaml
$ kubectl get pod -n kube-system

หลังจากที่ได้ kubeadm แล้วทุกคนสามารถนำคำสั่งที่ได้ไปที่ node อื่นๆและทำการ join ได้เลยครับ เพียงเท่านี้ก็เป็นอันเสร็จเรียบร้อยครับ แต่เดี๋ยวก่อนสำหรับการ Join Control-Plane ไว้บทความต่อไปผมจะมาแชร์วิธีอีกครั้งนะครับ!!

ขอบคุณทุกท่านที่เข้ามาอ่านครับ