> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kubernetes Sürüm Yükseltme

> Linux işletim sistemi üzerinde çalışan Kubernetes kümesinin sürümünü yükseltebilir. Kubernetes 1.18'den 1.30'a kadar olan sürüm yükseltme işlemlerini gerçekleştirebilir, Docker'dan Containerd'e geçiş yapabilir ve gerekli dosyaları yönetebilir.

<Warning>
  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.
</Warning>

<Info>
  **Kubernetes:** v1.18 → Mevcut versiyon, v1.30 → Hedeflenen versiyon
</Info>

## Gerekli Dosyalar

<CardGroup cols={3}>
  <Card title="Kubernetes Dosyaları" icon="download">
    v1.18 - v1.30 → Kubectl, kubeadm, kubelet dosyaları

    [İndir](http://fss.apinizer.com/index.php/s/uWP0ewA2sf2rS02)
  </Card>

  <Card title="Kubernetes CNI" icon="network-wired">
    Kubernetes 1.18'den 1.19'e geçerken bir kere kurmak yeterlidir. 1.19 ve üstü versiyonlarda kurulmasına gerek yoktur.
  </Card>

  <Card title="Containerd" icon="server">
    Kubernetes 1.24 versiyonuna geçerken containerd kullanımına geçilmeli. Containerd 1.6+ üstü olmalı ve docker kaldırılmalıdır.

    [İndir](http://fss.apinizer.com/index.php/s/TSlg6gWm6Aq4LJy)
  </Card>
</CardGroup>

## Versiyon Yükseltme

Versiyon yükseltme işlemi **"1.18-1.19", "1.20-1.23" ve "1.24-1.30"** 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

<Warning>
  **Çok Önemli**

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

  ```bash theme={null}
  kubectl get nodes
  ```

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

  ```bash theme={null}
  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.

  ```bash theme={null}
  scp /opt/cni/bin/flannel <USERNAME>@<NODE_IP>:/opt/cni/bin
  ```

  Node durumunu kontrol ettiğinizde **"READY"** olduğunu görmelisiniz.
</Warning>

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

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

<Steps>
  <Step title="Mevcut versiyonları kontrol edin">
    Yükseltme işlemine başlamadan önce kubeadm, kubelet ve kubectl versiyonlarını kontrol edin:

    ```bash theme={null}
    kubeadm version
    kubelet --version
    kubectl version --client
    ```
  </Step>

  <Step title="Kubeadm versiyonunu yükseltin">
    Kubeadm için paket sabitlemesini kaldırın:

    ```bash theme={null}
    sudo apt-mark unhold kubeadm
    ```

    [fss.apinizer.com](https://fss.apinizer.com) adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidin:

    ```bash theme={null}
    cd 1.19.3
    ```

    İçerisinde bulunan .deb uzantılı kubeadm dosyasını yükleyin:

    ```bash theme={null}
    sudo dpkg -i kubeadm_1.19.3-00_amd64.deb
    sudo apt-mark hold kubeadm
    ```
  </Step>

  <Step title="Node'u bakım durumuna alın">
    <Warning>
      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.
    </Warning>

    ```bash theme={null}
    kubectl drain <MASTER_NODE_NAME> --ignore-daemonsets
    ```
  </Step>

  <Step title="Kubeadm upgrade işlemini gerçekleştirin">
    Kurulumu gerçekleştirilen v1.19.3 sürümüne upgrade komutu ile Kubeadm'i yükseltin:

    ```bash theme={null}
    # 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ğunu belirten mesajı ekranda çıktı olarak görmelisiniz.
  </Step>

  <Step title="Node'u tekrar kullanılabilir hale getirin">
    ```bash theme={null}
    kubectl uncordon <MASTER_NODE_NAME>
    ```
  </Step>

  <Step title="Kubelet ve Kubectl versiyonlarını yükseltin">
    ```bash theme={null}
    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
    ```
  </Step>

  <Step title="Kubelet hizmetini yeniden başlatın">
    ```bash theme={null}
    systemctl daemon-reload
    systemctl restart kubelet
    ```
  </Step>

  <Step title="Versiyon kontrolü yapın">
    Master (control-plane) olan node'un versiyonunu görüntülemek için:

    ```bash theme={null}
    kubectl get nodes
    ```

    Versiyon olarak upgrade işleminin başarılı olduğunu kontrol edin.
  </Step>
</Steps>

#### Worker Node için Yükseltme

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

<Steps>
  <Step title="Worker node'u bakım durumuna alın">
    <Warning>
      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.
    </Warning>

    ```bash theme={null}
    kubectl drain <WORKER_NODE_NAME> --ignore-daemonsets
    ```
  </Step>

  <Step title="Worker node sunucusuna geçiş yapın">
    Worker node'un bulunduğu sunucuya geçiş yapılır ve kubeadm yükseltme işlemi gerçekleştirilir.

    [fss.apinizer.com](https://fss.apinizer.com) adresi üzerinden indirdiğiniz dosyayı çıkarttığınız klasöre gidin:

    ```bash theme={null}
    sudo apt-mark unhold kubeadm
    sudo dpkg -i kubeadm_1.19.3-00_amd64.deb
    sudo apt-mark hold kubeadm
    ```
  </Step>

  <Step title="Worker node için yükseltme işlemini gerçekleştirin">
    ```bash theme={null}
    sudo kubeadm upgrade node
    ```
  </Step>

  <Step title="Kubelet ve Kubectl versiyonlarını yükseltin">
    ```bash theme={null}
    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
    ```
  </Step>

  <Step title="Kubelet hizmetini yeniden başlatın">
    ```bash theme={null}
    systemctl daemon-reload
    systemctl restart kubelet
    ```
  </Step>

  <Step title="Node'u tekrar kullanıma açın">
    Aşağıdaki komutu master(control-plane) olan node'da çalıştırarak node'u tekrar kullanıma açınız:

    ```bash theme={null}
    kubectl uncordon <WORKER_NODE_NAME>
    ```
  </Step>

  <Step title="Versiyon kontrolü yapın">
    Worker node'un versiyonunu görüntülemek için:

    ```bash theme={null}
    kubectl get nodes
    ```
  </Step>
</Steps>

### 1.2) 1.20'den 1.23'e Yükseltme

1.20-1.23 versiyonları tek tek güncellenir. Her bir versiyon için yukarıdaki adımlar tekrarlanır.

### 1.3) 1.24'ten 1.30'a Yükseltme

<Warning>
  **Çok Önemli**

  Kubernetes 1.24 versiyonuna geçerken Docker yerine Containerd kullanımına geçilmeli. Containerd 1.6+ üstü olmalı ve docker kaldırılmalıdır.
</Warning>

1.24-1.30 versiyonları tek tek güncellenir. Her bir versiyon için yukarıdaki adımlar tekrarlanır. Ancak 1.24'e geçerken containerd kurulumu yapılmalıdır.

## Containerd Kurulumu (Kubernetes 1.24 için)

Kubernetes 1.24 versiyonuna geçerken Docker yerine Containerd kullanımına geçilmelidir.

<Card title="Containerd Kurulumu" icon="server">
  Containerd kurulumu için [gerekli dosyayı indirebilirsiniz](http://fss.apinizer.com/index.php/s/TSlg6gWm6Aq4LJy).

  Containerd kurulumu ve Docker'dan geçiş işlemleri için ilgili dokümantasyon sayfalarına bakınız.
</Card>
