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."