สร้าง 2-node Kubernetes cluster

สร้าง 2-node Kubernetes บน laptop ของเราเอาไว้ทดลองเล่น

วันนี้เรามาลองสร้าง 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.

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *