Kubernetes Sürüm Yükseltme
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
Node durumu NotReady ise aşağıdaki komut ile ilgili sunucudaki loglara bakınız.
journalctl -xeu kubelet
Çö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
Kubeadm Versiyon yükseltme
Kubeadm, için paket sabitlemesini kaldıralım.
sudo apt-mark unhold kubeadm
https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.
cd 1.19.3
İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.
sudo dpkg -i kubeadm_1.19.3-00_amd64.deb
sudo apt-mark hold kubeadm
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
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
İş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>
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
Kubelet hizmetini yeniden başlatın.
systemctl daemon-reload
systemctl restart kubelet
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
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
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
Worker node için yükseltme işlemini gerçekleştiriniz.
sudo kubeadm upgrade node
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
systemctl daemon-reload
systemctl restart kubelet
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>
Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.
kubectl get nodes
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
Kubeadm Versiyon yükseltme
Kubeadm, için paket sabitlemesini kaldıralım.
sudo apt-mark unhold kubeadm
https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.
cd 1.20.4
İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.
sudo dpkg -i kubeadm_1.20.4-00_amd64.deb
sudo apt-mark hold kubeadm
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
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
İş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>
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
Kubelet hizmetini yeniden başlatın.
systemctl daemon-reload
systemctl restart kubelet
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
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
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
Worker node için yükseltme işlemini gerçekleştiriniz.
sudo kubeadm upgrade node
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
systemctl daemon-reload
systemctl restart kubelet
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>
Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.
kubectl get nodes
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*
Containerd versiyonu ve kurulu olup olmadığı kontrol edilir.
containerd --version
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
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
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
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
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
Kubeadm Versiyon yükseltme
Kubeadm, için paket sabitlemesini kaldıralım.
sudo apt-mark unhold kubeadm
https://fss.apinizer.com adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidiniz.
cd 1.24.3
İçerisinde bulunan .deb uzantılı kubeadm dosyasını indirelim.
sudo dpkg -i kubeadm_1.24.3-00_amd64.deb
sudo apt-mark hold kubeadm
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
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
İş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>
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
Kubelet hizmetini yeniden başlatın.
systemctl daemon-reload
systemctl restart kubelet
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
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
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
Worker node için yükseltme işlemini gerçekleştiriniz.
sudo kubeadm upgrade node
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
systemctl daemon-reload
systemctl restart kubelet
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>
Worker node'un versiyonunu görüntülemek için aşağıdaki komutu çalıştırınız.
kubectl get nodes
Küme Durumu Kontrolü:
Aşağıdaki komutlar ile yeni küme bilgilerinizi görebilirsiniz.
kubectl cluster-info
kubectl get node -o wide