Bu dökümanda, mevcut Linux işletim sistemi üzerinde bulunan bir Kubernetes kümesi 1.18 sürümünde ve Docker ile çalışıyor.

Bu kümenin sürümünü 1.18'den 1.30'a yükseltme sürecinde yapılması gerekenler adım adım anlatılmaktadır.

KUBERNETES:
v1.18      →  Mevcut versiyon          
v1.30     →  Hedeflenen versiyon     


Gerekli Dosyalar:

v1.18 - v1.30        →   Kubectl, kubeadm, kubelet dosyaları
Kubernetes-cni    →   Kubernetes 1.18 den 1.19 geçerken bir kere kurmak yeterli olacaktır. 1.19 ve üstü versiyonlarda kurulmasına gerek yoktur.
containerd 1.6     →   kubernetes 1.24 versiyonuna geçerken containerd kullanımına geçilmeli. Containerd 1.6+ üstü olmalı ve docker kaldırılmalıdır.


Kubernetes için http://fss.apinizer.com/index.php/s/uWP0ewA2sf2rS02 adresinden gerekli dosyaları indirebilirsiniz.

Containerd için http://fss.apinizer.com/index.php/s/TSlg6gWm6Aq4LJy adresinden gerekli dosyayı indirebilirsiniz.

1) Versiyon Yükseltme

Bu adım, "1.18-1.19", "1.20-1.23" ve "1.24-1.30" versiyon yükseltme bölümlerinden oluşmaktadır.

Her bir bölümde, versiyon yükseltme süreci ve olası hataların çözümleri ele alınmaktadır.

1.1) 1.18'ten 1.19'a Yükseltme:


Kubeadm, kubelet ve kubectl için paket sabitlemesini kaldıralım.

sudo apt-mark unhold kubeadm kubelet kubectl 
CODE

fss.apinizer üzerinden indirdiğiniz klasöre gidiniz.

cd 1.19.3
CODE

İçerisinde bulunan .deb uzantılı (kubelet,kubectl,kubeadm,kubernetes-cni) dosyalarını çalıştıralım.

sudo dpkg -i *.deb
CODE

Çok Önemli

1.18'den 1.19'a geçişte olası flannel sorunu çıkabilmekte. Aşağıdaki komut ile node durumunu kontrol ediniz.

kubectl get nodes 
CODE

Node durumu NotReady ise aşağıdaki komut ile ilgili sunucudaki loglara bakınız.

journalctl -xeu kubelet
CODE

Çözüm yolu:

Herhangi bir (master veya worker) sunucu üzerinden  flannel dosyasını, yükseltme yaptığınız sunucuya scp komutu ile dosyayı taşımak.

scp /opt/cni/bin/flannel  <USERNAME>@<NODE_IP>:/opt/cni/bin


Node durumunu kontrol ettiğinizde "READY" olduğunu görmelisiniz.


Paket kurulumu gerçekleşti ve node durumu Ready ise yükseltme işlemi yapılabilir.

#Master (control-plane) için:
#versiyon kısmını her bir sürümde değiştiriniz
sudo kubeadm upgrade apply v1.19.3

#Worker için:
sudo kubeadm upgrade node
CODE


1.2) 1.20'den 1.23'e KADAR YÜKSELTME:


1.20-1.23 versiyonları tek tek güncellenir.

cd 1.20.4
CODE


sudo dpkg -i *.deb
CODE
#Master (control-plane) için:
#versiyon kısmını her bir sürümde değiştiriniz
sudo kubeadm upgrade apply v1.20.4


#Worker için:
sudo kubeadm upgrade node
CODE

Containerd Kullanımına Geçiş: Kubernetes 1.24 ve üzeri versiyonlar

Mecvut sistemde containerd yerine docker kullanılıyorsa bu adımda containerd geçişi yapılmalı.

Containerd versiyonu 1.6.x veya üst sürümler olmalıdır.


Not: Mevcutta Containerd kullanılıyorsa "Containerd Geçiş Aşamaları" adımını atlanmalı ve "1.3) 1.24'den 1.30'a yükseltme" adımından devam edilmelidir.


Containerd Geçiş Aşamaları:

Not : Docker kurulu makinelerde gerçekleştiriniz.


Docker durdurulur. Paketleri silinir.

sudo systemctl stop docker.service
sudo systemctl disable docker.service

sudo apt remove docker*
CODE

Containerd versiyonu ve kurulu olup olmadığı kontrol edilir. 

containerd --version
CODE

1.6 ve üzeri bir sürüm kurulu değilse dökümanın başında verilen linkten .deb uzantılı containerd dosyası indirilir.

İndirilen dosyanın bulunduğu dizinde aşağıdaki komutu çalıştırın.

sudo dpkg -i containerd.io*.deb
CODE


Kubeadm-flags.env dosyası açılır.

sudo vi /var/lib/kubelet/kubeadm-flags.env

#Alttaki satır varsa silinir
--network-plugin=cni  

#Alttaki satır yoksa eklenir
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock
CODE

crictl.yaml dosyasına gerekli satırlar eklenir.

sudo tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
CODE

Son ayarlar yapılır ve containerd başlatılır.

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

# Restart containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
systemctl status containerd
CODE

1.3) 1.24'den 1.30'a KADAR YÜKSELTME:


1.24-1.30 versiyonları tek tek güncellenir.

cd 1.24.3
CODE
sudo dpkg -i *.deb
CODE
#Master (control-plane) için:
#versiyon kısmını her bir sürümde değiştiriniz
sudo kubeadm upgrade apply v1.24.3

#Worker için:
sudo kubeadm upgrade node
CODE

Küme Durumu Kontrolü:

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

kubectl cluster-info
kubectl get node -o wide
CODE