Giriş
Günümüz yazılım dünyasında, mikro hizmet mimarisi ve kapsayıcı (container) tabanlı uygulamalar hızla yaygınlaşmaktadır. Ancak, bu kapsayıcıların yönetimi, ölçeklenmesi ve otomasyonu karmaşık bir süreçtir. İşte bu noktada Kubernetes devreye girer. Google tarafından geliştirilmiş ve şu an Cloud Native Computing Foundation (CNCF) tarafından yönetilen Kubernetes, kapsayıcı tabanlı uygulamaların dağıtımını, yönetimini ve ölçeklenmesini kolaylaştıran açık kaynaklı bir platformdur.
Kubernetes Nedir?
Kubernetes, genellikle “K8s” olarak kısaltılan, kapsayıcılaştırılmış uygulamaların otomatikleştirilmiş dağıtımı, ölçeklendirilmesi ve yönetimini sağlayan bir orkestrasyon aracıdır. Docker ve benzeri konteyner teknolojileri ile oluşturulmuş uygulamaların daha verimli çalışmasını sağlar.
Kubernetes’in temel amacı, yazılım ekiplerinin büyük ölçekli uygulamaları yönetmesini kolaylaştırmak ve sürekli entegrasyon/sürekli dağıtım (CI/CD) süreçlerini hızlandırmaktır. Uygulamaları farklı ortamlarda çalıştırarak esneklik sağlar ve sistem kaynaklarının verimli kullanılmasını mümkün kılar.
Kubernetes’in Temel Bileşenleri
Birden fazla bileşenden oluşur. İşte temel bileşenleri:
1. Pod
Pod, Kubernetes’in en küçük dağıtım birimidir. Genellikle tek bir uygulama bileşeni içerir ve bir veya birden fazla konteyner barındırabilir.
2. Node
Kubernetes kümesinde (cluster) çalışan fiziksel veya sanal bir makinedir. İki tür node bulunur:
- Master Node: Kubernetes kümesini yönetir.
- Worker Node: Uygulamaların çalıştırıldığı sunuculardır.
3. Cluster
Birden fazla node’un bir araya gelerek oluşturduğu ortamdır.
4. Deployment
Uygulamaların yönetilmesini ve ölçeklenmesini sağlayan nesnedir. Yeni versiyonları yönetmek için kullanılır.
5. Service
Ağ üzerinden pod’lara erişimi sağlayan bileşendir.
6. Namespace
Kaynakların organizasyonu için kullanılan mantıksal bir ayrım mekanizmasıdır.
7. ConfigMap ve Secret
Uygulama yapılandırmalarını ve hassas bilgileri güvenli bir şekilde saklamak için kullanılır.
Kubernetes’in Avantajları
Kubernetes’in sağladığı başlıca avantajlar şunlardır:
1. Otomatik Ölçeklendirme
Trafik arttığında otomatik olarak yeni pod’lar başlatarak ölçeklendirme yapabilir.
2. Kendi Kendini İyileştirme
Eğer bir pod çökerse, otomatik olarak onu yeniden başlatır.
3. Kolay Güncelleme ve Rollback
Uygulamaları kesinti olmadan güncelleyebilir ve hatalı güncellemeleri geri alabilir.
4. Kaynak Verimliliği
Sistem kaynaklarını en iyi şekilde kullanarak maliyetleri düşürür.
5. Çoklu Bulut Desteği
AWS, Azure, Google Cloud gibi farklı bulut platformlarında çalışabilir.
Kubernetes Nasıl Çalışır?
Temel olarak aşağıdaki adımlarla çalışır:
- Uygulamanın Tanımlanması: YAML veya JSON dosyaları aracılığıyla uygulamaları tanımlar.
- Pod’ların Dağıtılması: Pod’ları worker node’lara yerleştirir.
- Servis Yönetimi: Pod’ların birbirleriyle ve dış dünyayla nasıl iletişim kuracağını belirler.
- Ölçeklendirme: Trafiğe bağlı olarak pod sayısını artırır veya azaltır.
- Güncelleme ve Geri Alma: Yeni sürümleri uygulamaya ve gerekirse eski sürüme dönmeye olanak tanır.
Kubernetes Kullanım Alanları
Kubernetes birçok sektörde ve kullanım senaryosunda tercih edilmektedir:
1. Mikro Hizmet Mimarisi
Mikro hizmetlerin yönetimi ve ölçeklenmesi için idealdir.
2. Sürekli Entegrasyon ve Dağıtım (CI/CD)
Otomatik kod dağıtımı ve test süreçlerinde kullanılır.
3. Makine Öğrenimi ve Büyük Veri
Veri analitiği ve yapay zeka modellerinin dağıtımı için kullanılır.
4. Hibrit ve Çoklu Bulut Stratejileri
Birden fazla bulut sağlayıcısında çalışan sistemler için uygundur.
Kubernetes ve Docker İlişkisi
Docker ve Kubernetes sık sık birlikte anılır. Docker, kapsayıcıları oluştururken kullanılırken, Kubernetes bu kapsayıcıları yönetir. Docker dışında başka kapsayıcı çalıştırma ortamlarını da destekler.
Kubernetes Kurulumu
Kubernetes’i kullanmaya başlamak için aşağıdaki yollar izlenebilir:
- Minikube: Lokal ortam oluşturur.
- Kubeadm: Manuel olarak Kubernetes kümesi kurmayı sağlar.
- Bulut Tabanlı Çözümler: AWS EKS, Google GKE, Azure AKS gibi yönetilen hizmetleri tercih edilebilir.
Kubernetes Komutları
Yaygın olarak kullanılan komutlar:
kubectl get pods
→ Çalışan pod’ları listeler.kubectl describe pod <pod_adı>
→ Pod hakkında detaylı bilgi verir.kubectl delete pod <pod_adı>
→ Bir pod’u siler.kubectl apply -f <dosya_adı>.yaml
→ YAML dosyasındaki değişiklikleri uygular.
Sonuç
Modern uygulama geliştirme süreçlerinde büyük bir devrim yaratmıştır. Otomatik ölçeklendirme, yüksek erişilebilirlik, kaynak verimliliği ve hata toleransı gibi avantajları sayesinde büyük ölçekli uygulamalar için vazgeçilmez hale gelmiştir. Eğer mikro hizmet mimarisi kullanıyorsanız ve konteynerlerinizi verimli bir şekilde yönetmek istiyorsanız, Kubernetes kullanımı sizin için büyük bir kolaylık sağlayacaktır.