Kubernetes, uygulamaları dağıtmak, yönetmek ve ölçeklendirmek için en yaygın kullanılan platformlardan biridir. Özellikle üretim ortamlarında, yüksek erişilebilirlik (HA) sağlamak için Kubernetes’in dikkatlice yapılandırılması gerekir. Bu rehberde, Kubespray 2.26 sürümünü kullanarak Ubuntu 24.04 üzerinde Kubernetes 1.30.6 sürümünü kuracağız. Kurulumda 3 master, 3 worker ve 2 HAProxy sunucusu kullanarak yüksek erişilebilirlik sağlanacaktır. HAProxy ve Keepalived ile API sunucularına yük dengeleme ve failover desteği ekleyeceğiz.
Sunucu Gereksinimleri
Bu kurulum için aşağıdaki sunucuları kullanacağız. Gerçek bir üretim ortamında tercih edilebilecek sunucu yapılandırması bu örnek üzerinden verilecektir.
Rol | Hostname | IP Adresi |
---|---|---|
HAProxy LB1 | haproxy-1 | 192.168.1.30 |
HAProxy LB2 | haproxy-2 | 192.168.1.31 |
Master | master-1 | 192.168.1.10 |
Master | master-2 | 192.168.1.11 |
Master | master-3 | 192.168.1.12 |
Worker | worker-1 | 192.168.1.20 |
Worker | worker-2 | 192.168.1.21 |
Worker | worker-3 | 192.168.1.22 |
Not: HAProxy sunucuları arasında failover sağlamak için 192.168.1.40 sanal IP adresini kullanacağız.
Adım 1: HAProxy ve Keepalived Kurulumu
HAProxy ile Kubernetes API sunucularına gelen istekleri master node’lara dağıtacağız, Keepalived ise bu HAProxy sunucuları arasında aktif-pasif failover sağlayacak.
1.1 HAProxy ve Keepalived Kurulumu
Her iki HAProxy sunucusunda da aşağıdaki komutları çalıştırarak gerekli paketleri yükleyin:
sudo apt-get update
sudo apt-get install -y haproxy keepalived
1.2 HAProxy Yapılandırması
Her iki HAProxy sunucusunda /etc/haproxy/haproxy.cfg
dosyasını düzenleyerek Kubernetes API portunu yük dengeleyecek şekilde yapılandırın:
frontend kubernetes
bind *:6443
mode tcp
default_backend kubernetes-backend
backend kubernetes-backend
mode tcp
balance roundrobin
option tcp-check
server master-1 192.168.1.10:6443 check
server master-2 192.168.1.11:6443 check
server master-3 192.168.1.12:6443 check
1.3 Keepalived Yapılandırması
Keepalived, HAProxy sunucuları arasında aktif-pasif yapılandırma sağlayarak sanal bir IP adresini yük dengeleyici olarak kullanacak.
Primary Sunucu – Keepalived Konfigürasyonu (/etc/keepalived/keepalived.conf
):
vrrp_instance VI_1 {
state MASTER
interface ens3
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass securepassword
}
virtual_ipaddress {
192.168.1.40
}
}
Backup Sunucu – Keepalived Konfigürasyonu (/etc/keepalived/keepalived.conf
):
vrrp_instance VI_1 {
state BACKUP
interface ens3
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass securepassword
}
virtual_ipaddress {
192.168.1.40
}
}
1.4 Keepalived Servisini Başlatma
Her iki sunucuda Keepalived servisini başlatın ve otomatik başlatılmasını sağlayın:
sudo systemctl start keepalived
sudo systemctl enable keepalived
Adım 2: Kontrol Sunucusunda Python ve Ansible Kurulumu
Kubespray’in çalışabilmesi için Python 3 ve Ansible kurulmalıdır.
2.1 Python ve Gerekli Paketlerin Yüklenmesi
sudo apt-get install -y python3.10-venv python3-netaddr python3-dev python3-wheel
2.2 Python Sanal Ortamı Oluşturma
Kubespray için bir Python sanal ortamı oluşturun ve aktif hale getirin:
sudo python3 -m venv /opt/venv/kubespray
source /opt/venv/kubespray/bin/activate
2.3 Gerekli Python Paketlerinin Kurulumu
Sanal ortam aktifken wheel
ve diğer bağımlılıkları yükleyin:
pip install wheel
Adım 3: Kubespray Kurulumu ve Yapılandırması
3.1 Kubespray Deposunu İndirme
Git klasörünüzü oluşturun ve Kubespray’i indirin:
mkdir -p $HOME/git/co/kubespray
cd $HOME/git/co/kubespray
git clone https://github.com/kubernetes-sigs/kubespray.git ./
git checkout release-2.26
3.2 Gereksinimlerin Kurulması
Kubespray bağımlılıklarını yüklemek için aşağıdaki komutu çalıştırın:
pip install -r requirements.txt
3.3 Envanter Dosyasının Oluşturulması
Cluster yapılandırması için özel bir envanter dosyası oluşturun:
cp -rfp inventory/sample inventory/mycluster
3.4 Etcd ve Kubernetes Cluster Ayarları
Kubernetes ortamının yapılandırmasını belirlemek için etcd.yml
ve k8s-cluster.yml
dosyalarını düzenleyin.
Etcd Ayarları (inventory/mycluster/group_vars/etcd.yml
):
# etcd grup ayarları
etcd_deployment_type: host # etcd'nin çalışacağı ortam (host, docker veya podman)
etcd_data_dir: "/var/lib/etcd" # etcd verilerinin saklanacağı dizin
# Yedekleme ayarları
etcd_backup_enabled: true # etcd yedeklemeleri etkinleştir
etcd_backup_dir: "/var/backups/etcd-backup" # Yedekleme dizini
etcd_backup_cron_job_enabled: true # Cron ile otomatik yedekleme ayarla
etcd_backup_period: "daily" # Yedekleme sıklığı (günlük)
Kubernetes Cluster Ayarları (inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
):
# Konteyner yöneticisi ayarı
container_manager: containerd # Konteyner yöneticisi olarak containerd seçildi
# Kubernetes Pod ve Service CIDR ayarları
kube_network_plugin: calico # Ağ eklentisi olarak Calico kullanıldı
kube_service_addresses: 10.233.0.0/18 # Kubernetes hizmetleri için IP aralığı
kube_pods_subnet: 10.233.64.0/18 # Pod'lar için IP aralığı
kube_network_node_prefix: 24 # Ağ alt ağ maskesi
# Kubernetes sürüm ayarı
kube_version: v1.30.6 # Kullanılacak Kubernetes sürümü
# Kubernetes API Sunucusu yük dengeleme
apiserver_loadbalancer_domain_name: "192.168.1.40" # HAProxy’nin sanal IP adresi
loadbalancer_apiserver:
address: "192.168.1.40"
port: 6443
# Yük dengeleyici ayarları
loadbalancer_apiserver_localhost: false # Yük dengeleyicinin localhost üzerinden değil, IP üzerinden erişilmesini sağlar
Adım 4: Kubernetes Cluster Kurulumunu Başlatma
4.1 Ansible Ping Testi
Bağlantıyı test etmek için tüm sunuculara ping
komutu gönderin:
ansible -i
inventory/mycluster/hosts.yaml -m ping all
4.2 Cluster Kurulumunu Başlatma
Cluster kurulumunu başlatmak için Kubespray playbook’unu çalıştırın:
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
Adım 5: Kurulum Sonrası İşlemler
Kurulum tamamlandıktan sonra, kubectl
komutunu kullanmak için kubeconfig dosyasını ev dizininize kopyalayın ve gerekli alias’leri tanımlayın.
5.1 Kubeconfig Dosyasının Kopyalanması
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.2 Kubectl Tamamlama ve Alias Ayarları
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.bashrc
echo "complete -F __start_kubectl k" >> ~/.bashrc
source ~/.bashrc
5.3 Cluster Durumunun Kontrolü
Kurulum sonrası Kubernetes cluster durumunu kontrol edin:
kubectl get nodes
Sonuç
Bu adımları izleyerek, Kubespray kullanarak yüksek erişilebilirlik sağlayan, containerd konteyner yöneticisi ve HAProxy ile desteklenmiş bir Kubernetes cluster kurulumunu tamamladınız. Bu yapılandırma, Kubernetes API sunucularına yük dengeleme ve failover desteği sağlayarak, kritik üretim ortamlarında kesintisiz erişim sunar.