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.

RolHostnameIP Adresi
HAProxy LB1haproxy-1192.168.1.30
HAProxy LB2haproxy-2192.168.1.31
Mastermaster-1192.168.1.10
Mastermaster-2192.168.1.11
Mastermaster-3192.168.1.12
Workerworker-1192.168.1.20
Workerworker-2192.168.1.21
Workerworker-3192.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.