← Blog'a Geri Dön

Kubernetes HA Cluster Kurulumu

Production ortamında tek bir master node ile çalışmak ciddi bir risk oluşturur. Bu yazıda, yüksek erişilebilirlik (High Availability - HA) sağlayan bir Kubernetes cluster kurulumunu adım adım anlatacağım.

HA Cluster Mimarisi

Kurulumda kullanacağımız bileşenler:

  • 2 Master Node (Control Plane)
  • 4 Worker Node
  • HAProxy Load Balancer
  • etcd Cluster (3 node)

Önkoşullar

Her node için minimum gereksinimler:

  • 2 CPU
  • 4GB RAM
  • 20GB Disk
  • Ubuntu 22.04 LTS

HAProxy Kurulumu

İlk olarak master node'lar önüne HAProxy yerleştireceğiz.

# HAProxy kur
sudo apt-get update
sudo apt-get install -y haproxy

# HAProxy yapılandırması
sudo cat > /etc/haproxy/haproxy.cfg << 'HAPROXY'
global
    log /dev/log local0
    log /dev/log local1 notice
    daemon

defaults
    log global
    mode tcp
    option tcplog
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend kubernetes-apiserver
    bind *:6443
    mode tcp
    option tcplog
    default_backend kubernetes-master

backend kubernetes-master
    mode tcp
    balance roundrobin
    option tcp-check
    server master1 192.168.1.10:6443 check
    server master2 192.168.1.11:6443 check
HAPROXY

# HAProxy restart
sudo systemctl restart haproxy
sudo systemctl enable haproxy

Master Node Kurulumu

İlk master node'u kuralım:

# Container runtime (containerd) kur
sudo apt-get install -y containerd

# containerd yapılandır
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# Kubernetes paketlerini kur
sudo apt-get install -y kubeadm kubelet kubectl
sudo apt-mark hold kubeadm kubelet kubectl

# İlk master node'u başlat
sudo kubeadm init \
  --control-plane-endpoint="haproxy-ip:6443" \
  --upload-certs \
  --pod-network-cidr=10.244.0.0/16

İkinci Master Node Ekleme

# İlk master'dan alınan join komutu
sudo kubeadm join haproxy-ip:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane \
  --certificate-key <cert-key>

Worker Node'ları Ekleme

# Her worker node'da çalıştır
sudo kubeadm join haproxy-ip:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

Network Plugin (Calico)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

etcd Cluster Sağlığı

# etcd cluster durumunu kontrol et
kubectl exec -it etcd-master1 -n kube-system -- \
  etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  member list

# etcd health check
kubectl exec -it etcd-master1 -n kube-system -- \
  etcdctl endpoint health

Load Balancer Test

# HAProxy stats sayfası
curl http://haproxy-ip:9000/stats

# API server erişim testi
kubectl get nodes

# Master node'lardan birini kapat ve tekrar test et
kubectl get nodes

Failover Testi

Master node'lardan birini simüle et:

# Master1'i kapat
sudo systemctl stop kubelet

# API server hala erişilebilir olmalı
kubectl get pods -A

# Master1'i tekrar başlat
sudo systemctl start kubelet

Monitoring

# Prometheus ve Grafana kur
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

Backup ve Restore

# etcd backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

# etcd restore (disaster recovery)
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \
  --data-dir=/var/lib/etcd-restore

Sonuç

HA Kubernetes cluster ile:

  • ✅ Zero downtime
  • ✅ Otomatik failover
  • ✅ Ölçeklenebilir altyapı
  • ✅ Production-ready

"High Availability is not optional for production systems - it's a requirement."

← Blog'a Geri Dön