Bu dökümanda, mevcut Kubernetes kümemizi bozmadan virtual IP'ye yönlendirerek, kesintisiz bir hizmet ile birlikte yüksek erişilebilirlik ile çalışmasını sağlayacağız.

Mevcut Makineler:

  • Kubernetes Master1
  • Kubernetes Master2
  • Kubernetes Master3
  • Kubernetes Worker1
  • Kubernetes Worker2


1) Mevcut Sistem ve Virtual IP Erişimi


Mevcut sistemde, Master1 üzerinde  kubeadm init komutuyla başlatılan bir Kubernetes kümesi oluşturuldu ve daha sonra diğer makineler (Master2, Master3, Worker1 ve Worker2) bu kümeye worker rolüyle dahil edildi.

Load Balancer üzerinde bir Virtual IP tanımlayarak, mevcut makineleri bu Virtual IP'ye 6443 portundan eriştirmemiz gerekiyor.


Çok Önemli

Eğer load balancer kullanmıyorsanız ve ağ üzerinde sanal ip oluşturamıyorsanız bunun için kullanabileceğiniz Keepalived ve HAProxy araçları ile bu işlemi gerçekleştirmek için tıklayınız.

Keepalived sanal ip oluşturmak için, HAProxy ise yük dengeleme işlemi için kullanılmaktadır.


2) IP Değiştirme

Kümede birden fazla master node olduğunda, bu master'ları tek bir master olarak bırakmak için kümeyi yeniden yapılandırmamız gerekmektedir.

Bu işlem genellikle diğer masterları kümeden tamamen çıkartarak başlar.

Aşağıdaki komut master1 hariç diğer masterlar (master2 ve master3) için çalıştırılır.

sudo kubeadm reset  
CODE


Master1 sunucusundan diğer masterlar (master2 ve master3) kümeden silinir.

kubectl delete nodes master2  
kubectl delete nodes master3 
CODE


Mevcut sistemde master1 ve worker sunucularının kalması gerekmekte.


2.1) Master1 sunucusunda yapılacaklar:

Kubelet ve containerd (docker kullanılıyorsa ayrıca docker uygulaması) durdurulur. 

sudo systemctl stop kubelet
sudo systemctl stop containerd
CODE

Bazı dosyaların yedekleri alınır ve silinir.

sudo mv -f /etc/kubernetes /etc/kubernetes.backup
sudo mv -f /var/lib/kubelet /var/lib/kubelet.backup

sudo mkdir -p /etc/kubernetes/pki
sudo cp -r /etc/kubernetes_backup/pki /etc/kubernetes
sudo rm -rf /etc/kubernetes/pki/{apiserver.*,etcd/peer.*}
sudo rm -f ~/.kube/config
CODE

Containerd (docker kullanılıyorsa ayrıca docker uygulaması) yeniden başlatılır.

sudo systemctl start containerd
CODE

Kubeadm init komutu endpoint adresi düzenlenerek tekrardan çalıştırılır ve olarak kullanılır. 

sudo kubeadm init --pod-network-cidr "10.244.0.0/16" --control-plane-endpoint <VIRTUAL_IP> --upload-certs --ignore-preflight-errors=DirAvailable--var-lib-etcd
CODE

Not : Kubeadm join komutları not edilir.

2.2) Worker1 ve Worker2 İçin Yapılacaklar:

Kubelet ve containerd (docker kullanılıyorsa ayrıca docker uygulaması) durdurulur. 

sudo systemctl stop kubelet
sudo systemctl stop containerd
CODE


Bazı dosyaların yedekleri alınır.

sudo mv -f /etc/kubernetes /etc/kubernetes.backup
sudo mv -f /var/lib/kubelet /var/lib/kubelet.backup
CODE


sudo systemctl start containerd
CODE


Kubeadm worker join komutu worker1 ve worker2 makinelerinde çalıştırılır.


2.3 ) Master2 ve Master3 İçin Yapılacaklar:

Bu adımda sadece master join komutunu master2 ve master3'de çalıştırmanız yeterli olacaktır.


2.4) Küme Durumu Kontrolü:

Aşağıdaki komutlar ile yeni küme bilgilerinizi görebilirsiniz.

kubectl cluster-info
kubectl get node -o wide
CODE