คู่มือติดตั้ง Kubernetes บน Proxmox
ขั้นตอนที่ 1: เตรียม VM บน Proxmox
สร้าง VM Template
-
สร้าง VM Master Node
- CPU: 2 cores (ขั้นต่ำ)
- RAM: 4GB (ขั้นต่ำ)
- Storage: 50GB
- Network: Bridge network
- OS: Ubuntu 22.04 LTS
-
สร้าง VM Worker Nodes (ถ้าต้องการ cluster)
- CPU: 2 cores
- RAM: 2GB (ขั้นต่ำ)
- Storage: 30GB
- ทำซ้ำตามจำนวนที่ต้องการ
การตั้งค่า Network
# ตั้งค่า Static IP สำหรับแต่ละ node
# Master Node: 192.168.1.100
# Worker Node 1: 192.168.1.101
# Worker Node 2: 192.168.1.102
ขั้นตอนที่ 2: เตรียม Ubuntu สำหรับ Kubernetes
อัปเดตระบบ (ทำในทุก VM)
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gpg
ปิด Swap (จำเป็นสำหรับ K8s)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
โหลด Kernel Modules
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
ตั้งค่า sysctl parameters
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
ขั้นตอนที่ 3: ติดตั้ง Container Runtime (containerd)
ติดตั้ง containerd
# เพิ่ม Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y containerd.io
ตั้งค่า containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# แก้ไขไฟล์ config
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
ขั้นตอนที่ 4: ติดตั้ง kubeadm, kubelet, และ kubectl
เพิ่ม Kubernetes repository
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/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.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
ติดตั้ง Kubernetes components
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
ขั้นตอนที่ 5: สร้าง Kubernetes Cluster
บน Master Node
# Initialize cluster
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
# ตั้งค่า kubectl สำหรับ user
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
บันทึก join command
# คำสั่งนี้จะแสดงหลังจาก kubeadm init เสร็จ
# ตัวอย่าง:
# kubeadm join 192.168.1.100:6443 --token abc123.xyz789 --discovery-token-ca-cert-hash sha256:abcdef...
ขั้นตอนที่ 6: ติดตั้ง Pod Network (Flannel)
บน Master Node
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
ขั้นตอนที่ 7: เพิ่ม Worker Nodes
บน Worker Nodes
# ใช้คำสั่ง join ที่ได้จาก master node
sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
ตรวจสอบ nodes บน Master
kubectl get nodes
ขั้นตอนที่ 8: ติดตั้ง Dashboard (Optional)
ติดตั้ง Kubernetes Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
สร้าง Service Account สำหรับ Dashboard
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
สร้าง Token สำหรับเข้าถึง Dashboard
kubectl -n kubernetes-dashboard create token admin-user
เข้าถึง Dashboard
kubectl proxy
# เปิดเบราว์เซอร์ไปที่: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
ขั้นตอนที่ 9: ทดสอบ Deployment
สร้าง Test Application
# สร้าง nginx deployment
kubectl create deployment nginx --image=nginx --replicas=3
# Expose เป็น service
kubectl expose deployment nginx --type=NodePort --port=80
# ดู services
kubectl get services
คำสั่งที่มีประโยชน์
ตรวจสอบสถานะ Cluster
kubectl cluster-info
kubectl get nodes -o wide
kubectl get pods --all-namespaces
kubectl get services --all-namespaces
ดู logs
kubectl logs <pod-name>
sudo journalctl -xeu kubelet
Reset cluster (ถ้าต้องการเริ่มใหม่)
sudo kubeadm reset
sudo rm -rf /etc/cni/net.d
sudo rm -rf $HOME/.kube/config
หมายเหตุสำคัญ
- ทรัพยากรขั้นต่ำ: Master node ต้องการ RAM อย่างน้อย 4GB
- Network: ให้แน่ใจว่าทุก nodes อยู่ในเครือข่ายเดียวกันและติดต่อกันได้
- Firewall: เปิด ports ที่จำเป็น (6443, 2379-2380, 10250, 10251, 10252)
- Backup: สำรอง etcd และ certificates อย่างสม่ำเสมอ
- Update: ติดตาม security updates สำหรับ Kubernetes components
Next Steps
- ศึกษา Helm สำหรับ package management
- ติดตั้ง Ingress Controller (nginx-ingress หรือ Traefik)
- ตั้งค่า persistent storage
- ศึกษา monitoring ด้วย Prometheus และ Grafana
- เรียนรู้ CI/CD integration