K8s on Proxmox

คู่มือติดตั้ง Kubernetes บน Proxmox

ขั้นตอนที่ 1: เตรียม VM บน Proxmox

สร้าง VM Template

  1. สร้าง VM Master Node

    • CPU: 2 cores (ขั้นต่ำ)
    • RAM: 4GB (ขั้นต่ำ)
    • Storage: 50GB
    • Network: Bridge network
    • OS: Ubuntu 22.04 LTS
  2. สร้าง 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

หมายเหตุสำคัญ

  1. ทรัพยากรขั้นต่ำ: Master node ต้องการ RAM อย่างน้อย 4GB
  2. Network: ให้แน่ใจว่าทุก nodes อยู่ในเครือข่ายเดียวกันและติดต่อกันได้
  3. Firewall: เปิด ports ที่จำเป็น (6443, 2379-2380, 10250, 10251, 10252)
  4. Backup: สำรอง etcd และ certificates อย่างสม่ำเสมอ
  5. Update: ติดตาม security updates สำหรับ Kubernetes components

Next Steps

  1. ศึกษา Helm สำหรับ package management
  2. ติดตั้ง Ingress Controller (nginx-ingress หรือ Traefik)
  3. ตั้งค่า persistent storage
  4. ศึกษา monitoring ด้วย Prometheus และ Grafana
  5. เรียนรู้ CI/CD integration
Related
Ubuntu · Windows · Etc