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 sürümünü yükseltirken, mevcut ve hedef sürümler arasındaki her bir küçük sürümün (örneğin, 1.25'ten 1.26'ya, sonra 1.26'dan 1.27'ye vb.) ardışık olarak yükseltilmesi gerekmektedir.

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

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

Control Plane (Master) Node için Yükseltme

Master(control-plane) olan sunuya geçiş yapınız ve aşağıdaki adımları uygulayınız.

Yükseltme işlemine başlamadan önce kubeadm, kubelet ve kubectl versiyonlarını aşağıdaki komutlar ile kontrol ediniz.

kubeadm version
kubelet --version
kubectl version --client
POWERSHELL
Kubeadm Versiyon yükseltme

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

sudo apt-mark unhold kubeadm
CODE


https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

cd 1.19.3
CODE

İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.

sudo dpkg -i kubeadm_1.19.3-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Master (control-plane) node'unuza alternatif bir master node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

kubectl drain <MASTER_NODE_NAME> --ignore-daemonsets 
POWERSHELL

Kurulumu gerçekleştirilen v1.19.3 sürümüne upgrade komutu ile Kubeadm'i yükseltiniz.

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

İşlemin başarılı olduğu belirten mesajı ekranda çıktı olarak görmelisiniz.

Node'u tekrar kullanılabilir hale getiriniz.

kubectl uncordon <MASTER_NODE_NAME>
POWERSHELL
Kubelet ve Kubectl Versiyon yükseltme
sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.19.3-00_amd64.deb
sudo dpkg -i kubectl_1.19.3-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL

Kubelet hizmetini yeniden başlatın.

systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Master (control-plane) olan node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

Versiyon  olarak upgrade işleminin başarılı olduğunu kontrol edin.

Worker Node için Yükseltme

Worker node'un versiyon yükseltmesi de benzer adımlarla gerçekleştirilir.

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Worker node'unuza alternatif bir node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek worker node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

Komut master(control-plane) sunucusunda çalıştırılır ve worker node için bakım ve pod boşaltma işlemini başlatır.

kubectl drain <WORKER_NODE_NAME> --ignore-daemonsets
POWERSHELL

Worker node'un bulunduğu sunucuya geçiş yapılır ve kubeadm yükseltme işlemini aşağıdaki komutlar ile gerçekleştirilir.

https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

sudo apt-mark unhold kubeadm
sudo dpkg -i kubeadm_1.19.3-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Worker node için yükseltme işlemini gerçekleştiriniz.

sudo kubeadm upgrade node
POWERSHELL

Kubelet ve Kubectl Versiyon yükseltme

sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.19.3-00_amd64.deb
sudo dpkg -i kubectl_1.19.3-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL


systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Aşağıdaki komutu master(control-plane) olan node'da çalıştırarak node'utekrar kullanıma açınız.

kubectl uncordon <WORKER_NODE_NAME> 
POWERSHELL

Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

1.2) 1.20'den 1.23'e yükseltme

1.20-1.23 versiyonları tek tek güncellenir.

Control Plane (Master) Node için Yükseltme

Master(control-plane) olan sunuya geçiş yapınız ve aşağıdaki adımları uygulayınız.

Yükseltme işlemine başlamadan önce kubeadm, kubelet ve kubectl versiyonlarını aşağıdaki komutlar ile kontrol ediniz.

kubeadm version
kubelet --version
kubectl version --client
POWERSHELL
Kubeadm Versiyon yükseltme

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

sudo apt-mark unhold kubeadm
CODE


https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

cd 1.20.4
CODE

İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.

sudo dpkg -i kubeadm_1.20.4-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Master (control-plane) node'unuza alternatif bir master node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

kubectl drain <MASTER_NODE_NAME> --ignore-daemonsets 
POWERSHELL

Kurulumu gerçekleştirilen v1.20.4 sürümüne upgrade komutu ile Kubeadm'i yükseltiniz.

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

İşlemin başarılı olduğu belirten mesajı ekranda çıktı olarak görmelisiniz.

Node'u tekrar kullanılabilir hale getiriniz.

kubectl uncordon <MASTER_NODE_NAME>
POWERSHELL
Kubelet ve Kubectl Versiyon yükseltme
sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.20.4-00_amd64.deb
sudo dpkg -i kubectl_1.20.4-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL

Kubelet hizmetini yeniden başlatın.

systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Master (control-plane) olan node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

Versiyon  olarak upgrade işleminin başarılı olduğunu kontrol edin.

Worker Node için Yükseltme

Worker node'un versiyon yükseltmesi de benzer adımlarla gerçekleştirilir.

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Worker node'unuza alternatif bir node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek worker node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

Komut master(control-plane) sunucusunda çalıştırılır ve worker node için bakım ve pod boşaltma işlemini başlatır.

kubectl drain <WORKER_NODE_NAME> --ignore-daemonsets
POWERSHELL

Worker node'un bulunduğu sunucuya geçiş yapılır ve kubeadm yükseltme işlemini aşağıdaki komutlar ile gerçekleştirilir.

https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

sudo apt-mark unhold kubeadm
sudo dpkg -i kubeadm_1.20.4-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Worker node için yükseltme işlemini gerçekleştiriniz.

sudo kubeadm upgrade node
POWERSHELL

Kubelet ve Kubectl Versiyon yükseltme

sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.20.4-00_amd64.deb
sudo dpkg -i kubectl_1.20.4-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL


systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Aşağıdaki komutu master(control-plane) olan node'da çalıştırarak node'utekrar kullanıma açınız.

kubectl uncordon <WORKER_NODE_NAME> 
POWERSHELL

Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

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 yükseltme

1.24-1.30 versiyonları tek tek güncellenir.

Control Plane (Master) Node için Yükseltme

Master(control-plane) olan sunuya geçiş yapınız ve aşağıdaki adımları uygulayınız.

Yükseltme işlemine başlamadan önce kubeadm, kubelet ve kubectl versiyonlarını aşağıdaki komutlar ile kontrol ediniz.

kubeadm version
kubelet --version
kubectl version --client
POWERSHELL
Kubeadm Versiyon yükseltme

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

sudo apt-mark unhold kubeadm
CODE


https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

cd 1.24.3
CODE

İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.

sudo dpkg -i kubeadm_1.24.3-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Master (control-plane) node'unuza alternatif bir master node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

kubectl drain <MASTER_NODE_NAME> --ignore-daemonsets 
POWERSHELL

Kurulumu gerçekleştirilen v1.20.4 sürümüne upgrade komutu ile Kubeadm'i yükseltiniz.

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

İşlemin başarılı olduğu belirten mesajı ekranda çıktı olarak görmelisiniz.

Node'u tekrar kullanılabilir hale getiriniz.

kubectl uncordon <MASTER_NODE_NAME>
POWERSHELL
Kubelet ve Kubectl Versiyon yükseltme
sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.24.3-00_amd64.deb
sudo dpkg -i kubectl_1.24.3-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL

Kubelet hizmetini yeniden başlatın.

systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Master (control-plane) olan node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

Versiyon  olarak upgrade işleminin başarılı olduğunu kontrol edin.

Worker Node için Yükseltme

Worker node'un versiyon yükseltmesi de benzer adımlarla gerçekleştirilir.

Aşağıdaki drain komutu, belirtilen bir Kubernetes node'unu bakım durumuna alır ve podları diğer node'lara aktarır. Worker node'unuza alternatif bir node'a sahip değilseniz bu komut sistem kesintisine sebep olacaktır. Tek worker node'a sahip cluster'lar için bu işlemi uygulamayabilirsiniz.

Komut master(control-plane) sunucusunda çalıştırılır ve worker node için bakım ve pod boşaltma işlemini başlatır.

kubectl drain <WORKER_NODE_NAME> --ignore-daemonsets
POWERSHELL

Worker node'un bulunduğu sunucuya geçiş yapılır ve kubeadm yükseltme işlemini aşağıdaki komutlar ile gerçekleştirilir.

https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.

sudo apt-mark unhold kubeadm
sudo dpkg -i kubeadm_1.24.3-00_amd64.deb
sudo apt-mark hold kubeadm
CODE

Worker node için yükseltme işlemini gerçekleştiriniz.

sudo kubeadm upgrade node
POWERSHELL

Kubelet ve Kubectl Versiyon yükseltme

sudo apt-mark unhold kubelet kubectl
sudo dpkg -i kubelet_1.24.3-00_amd64.deb
sudo dpkg -i kubectl_1.24.3-00_amd64.deb
sudo apt-mark hold kubelet kubectl
POWERSHELL


systemctl daemon-reload
systemctl restart kubelet
POWERSHELL

Aşağıdaki komutu master(control-plane) olan node'da çalıştırarak node'utekrar kullanıma açınız.

kubectl uncordon <WORKER_NODE_NAME> 
POWERSHELL

Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.

kubectl get nodes
POWERSHELL

Küme Durumu Kontrolü:

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

kubectl cluster-info
kubectl get node -o wide
CODE