วันนี้เรามาลองสร้าง Kubernetes cluster แบบ 2 nodes เป็น 1 control plane node และ 1 worker node บน Ubuntu Linux กันนะครับ
สร้าง control plane node (master node)
ติดตั้ง prerequisites
sudo apt update && sudo apt upgrade -y sudo swapoff -a cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter 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
ติดตั้ง containerd
sudo apt install -y 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/g' /etc/containerd/config.toml
sudo sed -i 's|sandbox_image = "registry.k8s.io/pause:3.8"|sandbox_image = "registry.k8s.io/pause:3.10"|' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
ติดตั้ง Kubernetes tools
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
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 systemctl enable kubelet
สร้าง Kubernetes cluster
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ติดตั้ง Calico CNI
curl https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml -O
kubectl apply -f calico.yaml
ติดตั้ง Calico tools
curl -L https://github.com/projectcalico/calico/releases/download/v3.29.1/calicoctl-linux-amd64 -o calicoctl
chmod +x ./calicoctl
แล้วดูสถานะของ control plane node ว่าเป็น ready
kubectl get nodes

ตอนนี้เราได้ control plane node แล้ว
ดังนั้นเราไปเพิ่ม worker node เข้ามาใน cluster ต่อนะครับ
Join worker node เข้า cluster
ติดตั้ง prerequisites, containerd, และ Kubernetes tools
# Prerequisites sudo apt update && sudo apt upgrade -y sudo swapoff -a cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter 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 # Install containerd sudo apt install -y 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/g' /etc/containerd/config.toml sudo sed -i 's|sandbox_image = "registry.k8s.io/pause:3.8"|sandbox_image = "registry.k8s.io/pause:3.10"|' /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd # Install Kubernetes tools sudo apt-get install -y apt-transport-https ca-certificates curl gpg 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 systemctl enable kubelet
บน control plane node, generate token สำหรับการ join
kubeadm token create --print-join-command

แล้วนำคำสั่งด้านบนกลับมารันที่ worker node
kubeadm join — token <token> <control-plane-host>:<control-plane-port> — discovery-token-ca-cert-hash sha256:<hash>

ดูสถานะของ nodes
kubectl get nodes
ตอนนรี้เราได้ 2-node Kubernetes cluster แล้วนะครับ

ลองทดสอบ
ลองสร้าง nginx pod แล้ว get service ขึ้นมาดู
kubectl run nginx --image=nginx --port=80
kubectl expose pod nginx --type=NodePort --port=80
kubectl get pods -o wide
kubectl get svc nginx

แล้วลอง access
curl http://<Worker_Node_IP>:<NodePort>

ตอนนี้ทุกอย่างเรียบร้อยแล้วนะครับ สามารถเล่น Kubernetes ต่อได้เลย

วิดีโอตัวอย่าง
Ref.