Kubernetes Deployment Stratejisi Bölüm 1: Recreate

Kubernetes, uygulamalarınızı güvenilir ve ölçeklenebilir bir şekilde dağıtmak ve yönetmek için bir dizi farklı strateji sunar. Bu makalede, “Recreate” adlı bir dağıtım stratejisine odaklanacağız. Recreate stratejisi, mevcut bir Replication Controller veya Deployment’ı (Yeniden Çoğaltma Denetleyici veya Dağıtım) güncellediğinizde kullanılan bir yöntemdir.

Recreate Stratejisi Nedir?

Recreate stratejisi, mevcut bir ReplicaSet’i veya Pod’ları silip, tamamen yeni bir set oluşturur. Bu, uygulamanızın yeni bir sürümünü dağıtırken, önceki sürümü temizlemek ve ardından yeni sürümü başlatmak için kullanılır. Yani, eski sürümde çalışan Pod’ları sonlandırır ve yeni sürümü başlatır.

Avantajları:

  1. Basit ve Güvenilir: Recreate stratejisi, eski sürümü tamamen sonlandırır ve yeni sürümü başlatır. Bu, uygulama güncellemelerini kolay ve güvenilir hale getirir.
  2. Sıfır Downtime: Eski sürüm Pod’ları silinirken yeni sürüm başlatıldığından, bu strateji sıfır veya çok kısa süreli kesintilere neden olabilir.

Dezavantajları:

  1. Kaynak İhtiyacı: Recreate stratejisi, hem eski sürüm hem de yeni sürüm aynı anda çalıştığı için ek kaynaklara ihtiyaç duyar.
  2. Hızlı Değişiklikler: Büyük ölçekli uygulamalar için, her güncelleme sırasında tüm Pod’ları yeniden başlatmak zaman alabilir.

Nasıl Kullanılır?

Recreate stratejisi, bir Kubernetes Deployment ya da Replication Controller’da belirtilir. YAML dosyasında strategy bölümünde type: Recreate olarak ayarlanır.

Öncelikle podları ve replika setleri izlemeyi açın.
watch kubectl get pods
watch kubectl get replicaset

recrate-v1.yaml adında bir yaml dosyası oluşturun.
nano recrate-v1.yaml

Verdiğim URL’deki yaml içeriğini, kendi yaml dosyanıza yapıştırın.
https://raw.githubusercontent.com/celenksercan/K8S-Full/main/DeploymentStrategies/1-%20Recreate/recreate-v1.yaml

Yaml’ı kubernetes’e göndermek için apply edin.
kubectl apply -f recreate-v1.yaml

Recreate için servis oluşturulması gerekiyor. Önce yaml dosyasını oluşturun.
nano recreate-service.yaml

Verdiğim URL’deki yaml içeriğini, kendi yaml dosyanıza yapıştırın.
https://raw.githubusercontent.com/celenksercan/K8S-Full/main/DeploymentStrategies/1-%20Recreate/recreate-service.yaml

Yaml’ı kubernetes’e göndermek için apply edin.
kubectl apply -f recreate-service.yaml

İzleme modunda açtığınız podlar ve replika setlerine baktığınızda, deployment’ın gerçekleştiğini göreceksiniz.

Public IP’ye expose edin. Ardından port yönlendirmesini yapın.
kubectl port-forward svc/nginx -n default 80:80 --address='0.0.0.0'

App’in düzgün çalıştığını kontrol etmek için, tarayıcınızdan KubernetesMakinesiPublicIPsi:80 gidin.

Şimdi yeni deployment için, recreate-v2.yaml adında bir yaml oluşturun.
nano recreate-v2.yaml

Verdiğim URL’deki yaml içeriğini, kendi yaml dosyanıza yapıştırın.
https://raw.githubusercontent.com/celenksercan/K8S-Full/main/DeploymentStrategies/1-%20Recreate/recreate-v2.yaml

Yaml’ı kubernetes’e göndermek için apply edin.
kubectl apply -f recreate-v2.yaml

İzleme modunda açtığınız podlar ve replika setlerine baktığınızda, yeni deployment’tan önce mevcut deploymentı terminate ettiğini göreceksiniz.

Terminate etme işlemi bittikten sonra, yeni deployment sorunsuz olarak gerçekleşecektir.

Public IP’ye expose edin. Ardından port yönlendirmesini yapın.
kubectl port-forward svc/nginx -n default 80:80 --address='0.0.0.0'

Tekrar browser’dan kontrol ettiğinizde app’in sorunsuz bir şekilde ayağa kalktığı görülecektir.