Kubernetes Nedir ve Neden Bu Kadar Önemli?
Öncelikle Kubernetes'i tanımak gerekir. Kubernetes, konteyner bazlı uygulamaların yönetilmesini, dağıtılmasını ve ölçeklendirilmesini sağlayan açık kaynaklı bir platformdur. Uygulamalarınızı ve servislerinizi bir arada tutarken, her bir konteynerin doğru şekilde çalışmasını garanti eder. Şimdi gelin, bu platformun temel yapı taşlarını daha yakından inceleyelim.
Pod Nedir ve Nasıl Yönetilir?
Kubernetes'in temel yapı taşı *Pod*'lardır. Pod, bir veya birden fazla konteyneri barındıran en küçük Kubernetes birimidir. Pod içinde yer alan konteynerler aynı IP adresini paylaşır ve birbirleriyle iletişim kurabilirler. Pod’lar, her zaman bir veya birden fazla konteyneri aynı anda çalıştırmak için kullanılır. Yani, bir uygulama farklı mikroservislerden oluşuyorsa, bu servisler aynı Pod içinde çalışabilir.
Kubernetes’te pod oluşturmak için aşağıdaki basit YAML konfigürasyon dosyasını kullanabiliriz:
apiVersion: v1
kind: Pod
metadata:
name: ornek-pod
spec:
containers:
- name: ornek-container
image: nginx:latest
Bu basit YAML dosyası, bir `nginx` konteyneri ile bir pod oluşturur. Pod’lar, genellikle bir uygulamanın çalışması için gerekli tüm bileşenleri (veritabanı, API servisleri vb.) bir arada tutacak şekilde tasarlanır.
Deployment: Uygulama Güncellemeleri ve Ölçeklenebilirlik
Pod’lar bir temel oluştururken, *Deployment* daha kapsamlıdır ve uygulamanın sürekli dağıtımını sağlar. Yani bir uygulamanın güncel sürümünü her zaman Kubernetes üzerinde tutmak istiyorsanız, Deployment tam size göre. Ayrıca, uygulamanızı ölçeklendirirken, her bir yeni pod için yeni bir Deployment oluşturabilirsiniz.
Deployment, yalnızca bir pod oluşturmakla kalmaz, aynı zamanda bu pod'un sağlıklı olup olmadığını kontrol eder ve gerekirse yeni bir pod oluşturur. Eğer bir pod hata verirse veya silinirse, Deployment otomatik olarak yenisini yaratır.
Bir Deployment oluşturmak için aşağıdaki YAML dosyasını kullanabilirsiniz:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ornek-deployment
spec:
replicas: 3
selector:
matchLabels:
app: ornek
template:
metadata:
labels:
app: ornek
spec:
containers:
- name: ornek-container
image: nginx:latest
Yukarıdaki YAML dosyasında, 3 replika (kopya) ile aynı container’ı çalıştıracak bir Deployment tanımlıyoruz. Kubernetes, her zaman 3 pod’un çalışmasını sağlamak için otomatik olarak ek pod’lar yaratır.
Service: Uygulama Erişimi ve Ağ Yönetimi
Pod’lar ve Deployment’lar uygulamanın iç işleyişine odaklanırken, *Service*’ler dış dünyaya erişimi sağlar. Kubernetes içinde, pod’lar birbirleriyle ağ üzerinden iletişim kurabilirler ancak dışarıdan erişim sağlayabilmek için bir servis tanımlanmalıdır.
Kubernetes Service, uygulamanızın dış dünyaya erişebilmesi için bir IP adresi veya DNS ismi atar. Böylece, pod’ların IP adresi değişse bile servis üzerinden ulaşılabilirlik sağlanır.
Bir Service tanımlamak için aşağıdaki YAML dosyasını kullanabilirsiniz:
apiVersion: v1
kind: Service
metadata:
name: ornek-service
spec:
selector:
app: ornek
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Yukarıdaki YAML dosyası, bir *LoadBalancer* türünde Service oluşturur. Bu, Kubernetes'in dış dünya ile iletişim kurmasını sağlar. Kubernetes, pod’ları arasındaki yükü dengeleyerek, uygulamanızın stabil çalışmasını sağlamak için bu servisi kullanır.
Pod, Deployment ve Service: Hepsi Bir Arada
Bir uygulamanın hayat döngüsünde en önemli olan şey, her bileşenin sorunsuz bir şekilde çalışmasıdır. Kubernetes, tüm bu bileşenleri birleştirerek, uygulamanızın sürekli çalışır durumda kalmasını sağlar. Pod’lar, uygulamanın iç işleyişini gerçekleştirirken; Deployment’lar, uygulamanın sağlıklı bir şekilde güncellenmesini ve ölçeklenmesini sağlarken; Servisler dış dünyaya uygulamanızın erişebilmesini sağlar.
Sonuç: Kubernetes ile Her Şey Kontrol Altında
Artık Kubernetes'in temel yapı taşlarını öğrendiniz ve nasıl kullanıldıklarına dair bir fikriniz var. Pod, Deployment ve Service yönetimi, uygulamanızın ölçeklenebilirliğini, erişilebilirliğini ve stabilitesini sağlamanızı kolaylaştırır. Bu araçları etkili bir şekilde kullanarak, yazılım geliştirme sürecinizi hızlandırabilir ve uygulamanızın her zaman sağlıklı bir şekilde çalışmasını garanti altına alabilirsiniz.