IT & DevOps

Kubernetes Cluster Setup สำหรับ Production — คู่มือฉบับสมบูรณ์ 2026

2026-02-21· อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์· อ่าน ~12 นาที
สารบัญ
  1. บทนำ
  2. สิ่งที่ต้องเตรียม
  3. เตรียม Node ทุกเครื่อง
  4. Initialize Master Node
  5. ติดตั้ง Network Plugin
  6. Join Worker Nodes
  7. Storage Configuration
  8. Monitoring Stack
  9. Security Hardening
  10. Ingress Controller
  11. Best Practices
  12. FAQ
  13. สรุป

บทนำ

ถ้าคุณกำลังมองหาวิธี deploy application ขนาดใหญ่ที่ต้อง scale ได้แบบไม่มีสะดุด Kubernetes คือคำตอบที่ดีที่สุดในปี 2026 นี้ ผมเองใช้ Kubernetes มาตั้งแต่ version 1.8 สมัยที่ยังต้อง configure อะไรเยอะมาก จนถึงวันนี้ version 1.29+ ที่ทุกอย่างง่ายขึ้นเยอะ

สำหรับบทความนี้ ผมจะพาคุณ setup Kubernetes Cluster แบบ production-grade ตั้งแต่ศูนย์ ไม่ใช่แค่ demo หรือ lab environment แต่เป็นระบบที่รองรับ traffic จริง มี high availability และ security ครบถ้วน

สิ่งที่ต้องเตรียม (Prerequisites)

ก่อนจะเริ่ม setup cluster คุณต้องเตรียม:

Hardware Requirements

ComponentMaster NodeWorker Node
CPU4 cores+2 cores+
RAM8 GB+4 GB+
Disk100 GB SSD50 GB SSD
Network1 Gbps1 Gbps

Software Requirements

ขั้นตอนที่ 1: เตรียม Node ทุกเครื่อง

Disable Swap

Kubernetes ต้องการให้ปิด swap ทุก node:

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

ติดตั้ง Container Runtime (containerd)

# ติดตั้ง dependencies
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

# ติดตั้ง containerd
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

สิ่งสำคัญคือต้อง enable SystemdCgroup:

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd

ติดตั้ง kubeadm, kubelet, kubectl

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/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.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

ขั้นตอนที่ 2: Initialize Master Node

นี่คือหัวใจสำคัญของการ setup cluster:

sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint="k8s-master.example.com:6443" \
  --upload-certs

หลัง init เสร็จ ให้ copy kubeconfig:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

ขั้นตอนที่ 3: ติดตั้ง Network Plugin

ผมแนะนำ Calico สำหรับ production เพราะรองรับ Network Policy ได้ดี:

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

หรือถ้าต้องการ eBPF-based networking ใช้ Cilium:

cilium install --version 1.15

ตรวจสอบ status:

kubectl get pods -n kube-system
# ต้องเห็น calico-node หรือ cilium-agent Running ทุก node

ขั้นตอนที่ 4: Join Worker Nodes

ใน master node จะได้ join command มา ให้ run บน worker ทุกเครื่อง:

sudo kubeadm join k8s-master.example.com:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

ตรวจสอบ nodes:

kubectl get nodes
# NAME         STATUS   ROLES           AGE   VERSION
# master-01    Ready    control-plane   10m   v1.31.0
# worker-01    Ready    <none>          2m    v1.31.0
# worker-02    Ready    <none>          1m    v1.31.0

ขั้นตอนที่ 5: Storage Configuration

สำหรับ production ต้องมี persistent storage:

Local Path Provisioner (สำหรับเริ่มต้น)

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.26/deploy/local-path-storage.yaml

NFS StorageClass (สำหรับ shared storage)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: nfs.csi.k8s.io
parameters:
  server: nfs-server.example.com
  share: /exports/k8s
reclaimPolicy: Retain
volumeBindingMode: Immediate

ขั้นตอนที่ 6: Monitoring Stack

ระบบ production ต้องมี monitoring เสมอ ผมใช้ kube-prometheus-stack:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace \
  --set grafana.adminPassword="your-secure-password"

Dashboard ที่ต้องมี:

ขั้นตอนที่ 7: Security Hardening

RBAC Configuration

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: developer-role
rules:
- apiGroups: ["", "apps"]
  resources: ["pods", "deployments", "services"]
  verbs: ["get", "list", "watch", "create", "update"]

Network Policy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

Pod Security Standards

ตั้งแต่ Kubernetes 1.25+ ใช้ Pod Security Admission แทน PSP:

kubectl label namespace production pod-security.kubernetes.io/enforce=restricted

ขั้นตอนที่ 8: Ingress Controller

ใช้ NGINX Ingress Controller สำหรับ traffic routing:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace

ตัวอย่าง Ingress Resource:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 80

Best Practices สำหรับ Production

  1. ใช้ Resource Limits เสมอ — กำหนด requests และ limits ให้ทุก container
  2. Enable Pod Disruption Budgets — ป้องกันไม่ให้ pod ถูก evict พร้อมกันหมด
  3. ใช้ Rolling Updates — ตั้ง maxSurge และ maxUnavailable ให้เหมาะสม
  4. Backup etcd สม่ำเสมอ — etcd คือหัวใจของ cluster data
  5. ใช้ GitOps — ArgoCD หรือ Flux สำหรับ deployment management

คำถามที่พบบ่อย (FAQ)

Kubernetes Cluster ต้องใช้กี่ node ขั้นต่ำ?

สำหรับ production แนะนำ 3 master nodes (high availability) และ 2+ worker nodes ขึ้นไป รวมขั้นต่ำ 5 nodes แต่ถ้างบจำกัด ใช้ 1 master + 2 workers ก็พอเริ่มต้นได้

Kubernetes กับ Docker Swarm ต่างกันยังไง?

Kubernetes มี feature ครบกว่ามาก: auto-scaling, rolling updates, service mesh, RBAC และ ecosystem ใหญ่กว่า Docker Swarm ง่ายกว่าแต่ไม่เหมาะกับ workload ขนาดใหญ่

ใช้ Kubernetes บน Cloud หรือ On-Premise ดีกว่า?

ถ้าทีมเล็กแนะนำ managed Kubernetes บน Cloud (EKS, GKE, AKS) ประหยัดเวลา maintain ถ้าต้องการ control เต็มที่หรือมี compliance requirements ใช้ on-premise

Kubernetes เรียนรู้ยากไหม?

มี learning curve สูงพอสมควร แนะนำเริ่มจาก Docker ก่อน แล้วค่อยขยับมา Kubernetes ใช้เวลาประมาณ 2-3 เดือนถึงจะใช้งานได้คล่อง

ต้อง upgrade Kubernetes บ่อยแค่ไหน?

Kubernetes release ใหม่ทุก 4 เดือน แต่ละ version support 1 ปี แนะนำ upgrade ทุก 6-8 เดือน อย่าปล่อยให้ version เก่าเกิน 2 minor versions

สรุป

การ setup Kubernetes Cluster สำหรับ production ไม่ใช่เรื่องยากถ้ามีขั้นตอนที่ชัดเจน ตั้งแต่เตรียม node, initialize cluster, ติดตั้ง networking, storage, monitoring จนถึง security hardening ทุกขั้นตอนสำคัญหมด

สิ่งสำคัญที่สุดคือ อย่ารีบ ทำทีละ step test ให้แน่ใจก่อนไปขั้นตอนถัดไป production cluster ที่ดีต้องผ่านการ test อย่างถี่ถ้วน

ถ้ามีคำถามเพิ่มเติม สามารถติดตามบทความเกี่ยวกับ DevOps และ Server ได้ที่ SiamCafe Blog ครับ

"Infrastructure as code is not just a practice, it's a mindset." — Kelsey Hightower

บทความแนะนำจากเครือข่าย SiamCafe

อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์

IT Infrastructure Expert Since 1997 — ผู้เชี่ยวชาญด้าน Linux, Network, Cloud Computing และ DevOps