☸️ Kubernetes: Temel Kavramlar ve Bileşenler
Kubernetes Service Nedir? 🔗
Kubernetes Service, Kubernetes ortamında çalışan pod’ların 🌍 dış dünya veya diğer pod’larla iletişimini sağlayan bir kaynak türüdür. Pod’lar dinamik yapıya sahip olduğundan, IP adresleri değişebilir ve bu da sürekli erişim sağlamayı zorlaştırabilir. Kubernetes Service, pod’lara sabit bir 📍 IP adresi ve DNS adı sağlar, bu sayede uygulamaların sürekli olarak birbirleriyle iletişim kurmasını kolaylaştırır. Servisler farklı tiplerde olabilir: ClusterIP (yalnızca iç iletişim), NodePort (dış erişim) ve LoadBalancer (⚖️ yük dengeleme) gibi. Ayrıca, ExternalName adında bir başka servis türü de mevcuttur ve bu servis, DNS adı kullanarak başka bir hizmete yönlendirme yapar.
Kubernetes Service, farklı bileşenler arasında iletişim kurmayı ve trafiği yönlendirmeyi mümkün kılar. Örneğin, frontend ve backend uygulamalarını ayrı pod’larda çalıştıran bir sistemde, Kubernetes Service, frontend’in backend ile kesintisiz iletişim kurmasını sağlayarak dağıtık uygulama bileşenlerini birbirine bağlar. Bu yaklaşım, esnekliği artırır ve karmaşık sistemlerin yönetimini kolaylaştırır.
Kubernetes Namespace Nedir? 📂
Kubernetes Namespace, Kubernetes ortamındaki kaynakları mantıksal olarak izole etmek için kullanılan bir bölümlendirme yöntemidir. Büyük Kubernetes cluster’larında, farklı proje veya ekiplerin kaynaklarını izole etmek, düzenli ve güvenli bir yönetim sağlamak amacıyla Namespace’ler kullanılır. Bu sayede farklı uygulamalar aynı cluster içinde birbirleriyle çakışmadan çalışabilir. Örneğin, “dev”, “test” ve “prod” gibi farklı ortamlar için farklı Namespace’ler oluşturulabilir.
Namespace kullanımı sayesinde, aynı cluster üzerinde birden fazla ekip 👥 çalışabilir ve her bir ekip kendi kaynaklarını izole bir şekilde yönetebilir. Bu, kaynakların organizasyonunu ve erişim kontrollerini daha iyi yönetmeyi sağlar. Ayrıca, Namespace kullanarak belirli bir projenin kaynaklarına yalnızca ilgili kişilerin erişimini sağlamak mümkün olur, bu da güvenliği artırır.
Kubernetes Volume Nedir ve Nasıl Kullanılır? 💾
Kubernetes Volume, pod içerisindeki konteynerlere kalıcı veya geçici depolama alanı sağlamak için kullanılır. Normalde, bir pod yeniden başlatıldığında konteynerlerin içindeki veriler kaybolur. Ancak, Kubernetes Volume’ler sayesinde bu veri kaybı önlenebilir. Volume’ler, pod’un yaşam süresi boyunca veri saklar ve konteynerler yeniden başlasa bile veri kaybını engeller. Kubernetes, çeşitli volume türlerini destekler: hostPath, NFS, PersistentVolume (PV) ve PersistentVolumeClaim (PVC) gibi. Volume’ler, veritabanı veya başka kritik veri saklama senaryolarında kullanışlıdır.
Kubernetes Volume, farklı depolama çözümlerine kolayca entegre edilebilir. Örneğin, ☁️ Amazon EBS, Google Persistent Disk veya Azure Disk gibi bulut tabanlı depolama çözümleri, Kubernetes Volume olarak kullanılabilir. Ayrıca, StatefulSet adı verilen özel bir Kubernetes kaynağı, durumsal uygulamaların (örneğin veritabanlarının) kalıcı depolama ihtiyaçlarını karşılamak için Volume’lerle birlikte kullanılır. Bu sayede veri tutarlılığı sağlanır ve uygulamanın dayanıklılığı artırılır.
Kubernetes ConfigMap Nedir ve Nasıl Kullanılır? 🗂️
ConfigMap, Kubernetes’te yapılandırma bilgilerini pod’lara aktarmak için kullanılır. ConfigMap, pod’ların ve konteynerlerin çalışması için gereken yapılandırma ayarlarını içerir ve bu bilgileri koddan ayırarak yönetilebilir hale getirir. Örneğin, bir veritabanı bağlantı bilgisi veya uygulama yapılandırması ConfigMap kullanılarak pod’a aktarılabilir. Bu sayede uygulamaların farklı ortamlarda kolayca yapılandırılması ve aynı imajı kullanarak farklı konfigürasyonlarla çalışması sağlanır.
ConfigMap, uygulama yapılandırmasını dinamik olarak değiştirme imkanı sunar. Örneğin, bir uygulamanın log seviyesi ConfigMap üzerinden ayarlanabilir ve bu değişiklik, uygulama yeniden başlatılmadan etkili olabilir. Bu esneklik, uygulamanın çevresel değişikliklere hızla adapte olmasını sağlar ve yönetimi kolaylaştırır.
Kubernetes Secret Nedir ve Nasıl Kullanılır? 🔑
Kubernetes Secret, hassas bilgileri (🔒 şifreler, API anahtarları gibi) güvenli bir şekilde saklamak ve bu bilgileri pod’lara iletmek için kullanılır. Secret, bilgilerin şifrelenmiş bir şekilde saklanmasını ve yalnızca yetkili pod’lara erişim sağlanmasını garanti eder. Bu sayede hassas bilgiler güvende tutulur ve yanlış ellere geçmesi önlenir. Secret’lar ConfigMap’lere benzer şekilde yapılandırılabilir ve pod’lara çevresel değişkenler veya volume olarak bağlanabilir.
Secret, uygulamaların güvenli bir şekilde çalıştırılmasını sağlar. Örneğin, bir veritabanı bağlantı şifresi veya API erişim anahtarı gibi bilgileri Secret olarak saklamak, bu bilgilerin yanlış kişilerin eline geçmesini engeller. Ayrıca, Kubernetes API ile Secret’lara erişim kısıtlaması yapılabilir, böylece yalnızca belirli pod’ların bu bilgilere erişimi sağlanır. Secret’lar, genellikle CI/CD süreçlerinde de kullanılır ve otomatik dağıtım işlemlerinde güvenliği artırır.
Kubernetes Scaling Nedir ve Nasıl Yapılır? 📈
Kubernetes Scaling, uygulamaların yük durumuna göre pod sayısının artırılması veya azaltılması işlemidir. Kubernetes, yatay ölçeklendirme (horizontal scaling) yaparak mevcut pod sayısını artırabilir veya azaltabilir. “kubectl scale” komutu kullanılarak manuel olarak ölçeklendirme yapılabileceği gibi, Horizontal Pod Autoscaler (HPA) kullanılarak otomatik ölçeklendirme de yapılabilir. HPA, CPU kullanımı gibi metriklere göre pod sayısını otomatik olarak ayarlar ve bu sayede yoğunluk artışı durumunda uygulamanın performansının düşmesini önler.
Kubernetes ayrıca Vertical Pod Autoscaler (VPA) ile dikey ölçeklendirme de yapabilir. VPA, bir pod’un ihtiyaç duyduğu kaynakları (🧠 CPU ve 💾 bellek) artırarak veya azaltarak uygulamanın performansını optimize eder. Bu iki ölçeklendirme yöntemi bir arada kullanılarak, uygulamalar hem kaynak kullanımı hem de iş yüküne göre esnek bir şekilde yönetilebilir. Bu esneklik, kaynakların verimli kullanılmasını ve maliyetlerin düşürülmesini sağlar.
Kubernetes Rolling Update Nedir ve Nasıl Yapılır? 🔄
Kubernetes Rolling Update, mevcut pod’ları yeni sürümlerle kesinti olmadan güncellemek için kullanılan bir yöntemdir. Bu yöntem sayesinde eski pod’lar yavaş yavaş kapatılırken yeni pod’lar devreye alınır. Böylece uygulamanın erişilebilirliği kesintisiz bir şekilde devam eder. Rolling Update işlemi, “kubectl apply” komutu kullanılarak veya Kubernetes Deployment’ları üzerinden yapılabilir. Bu yöntem, özellikle büyük ve karmaşık uygulamalarda güncelleme işlemlerini daha güvenli hale getirir.
Rolling Update sürecinde, güncelleme sırasında hata meydana gelirse Kubernetes, otomatik olarak geri alma işlemi (rollback) gerçekleştirir. Bu sayede uygulamanın eski ve kararlı bir sürümde kalması sağlanır ve kesinti yaşanmaz. Ayrıca, güncelleme hızını kontrol etmek ve kullanıcı deneyimini iyileştirmek amacıyla “maxUnavailable” ve “maxSurge” gibi parametreler kullanılarak güncelleme süreci yapılandırılabilir.
Kubernetes Load Balancing Nedir ve Nasıl Yapılır? ⚖️
Kubernetes Load Balancing, uygulamanın farklı pod’larına gelen trafiğin dengeli bir şekilde dağıtılmasını sağlar. Kubernetes, her pod’a gelen iş yükünü dengelemek için yerleşik yük dengeleyici mekanizmalar sunar. ClusterIP, NodePort ve LoadBalancer gibi farklı servis türleri kullanılarak yük dengeleme yapılabilir. Load Balancer, özellikle bulut sağlayıcıları tarafından sunulan hizmetlerle entegre edilerek dış dünyadan gelen trafiği Kubernetes cluster’ındaki pod’lara dengeli bir şekilde yönlendirir.
Kubernetes ayrıca Ingress kaynakları kullanarak daha gelişmiş yük dengeleme ve yönlendirme senaryolarını destekler. Ingress, HTTP ve HTTPS trafiğini cluster içindeki servislere yönlendirir ve bu sayede daha karmaşık kurallar tanımlanabilir. Örneğin, belirli bir URL yolu veya ana makine adına (host) göre trafiğin farklı servislere yönlendirilmesi mümkündür. Bu, Kubernetes’in web tabanlı uygulamaları yönetmek için çok güçlü bir araç olmasını sağlar.
Kubernetes Logging Nedir ve Nasıl Yapılır? 📋
Kubernetes Logging, pod’larda çalışan uygulamaların ve Kubernetes bileşenlerinin günlük kayıtlarını 📜 toplama işlemidir. Bu loglar, uygulamanın durumunu ve hata ayıklama süreçlerini anlamak için çok önemlidir. Kubernetes, “kubectl logs” komutu ile pod loglarını görüntüleme imkanı sunar. Daha büyük ve karmaşık projelerde ise merkezi log yönetimi için Elasticsearch, Fluentd ve Kibana (EFK) gibi çözümler kullanılabilir. Bu sayede tüm loglar merkezi bir yerde toplanır ve analiz edilebilir.
Kubernetes’te merkezi loglama için Prometheus ve Grafana gibi araçlar da yaygın olarak kullanılır. Prometheus, sistem ve uygulama metriklerini toplarken, Grafana bu verileri görselleştirerek sistemin durumunu anlamayı kolaylaştırır. Ayrıca Fluentd gibi log toplayıcılar, logları farklı hedeflere (örneğin Elasticsearch veya Amazon S3) yönlendirerek logların saklanmasını ve analiz edilmesini sağlar. Bu araçlar sayesinde Kubernetes ortamında meydana gelen olaylar kolayca izlenebilir ve olası sorunlara hızlıca müdahale edilebilir.


