Kubernetes, karmaşık uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için tasarlanmış bir açık kaynaklı konteyner orkestrasyon platformudur. Bu teknoloji, bir dizi önemli kavram ve bileşeni içerir. İşte Kubernetes teknolojisinde yer alan bazı temel kavramlar:
Pod: Kubernetes'te en küçük ve en basit birimdir. Bir veya birden fazla konteyneri içerebilir.
Node: Kubernetes'te pod'ların çalıştırıldığı fiziksel veya sanal makinalardır.
Service: Pod'ların ağ üzerinde nasıl erişileceğini tanımlayan bir abstraksiyon katmanıdır. Dış dünyadan veya iç ağdan erişim sağlar.
Deployment: Pod'ların ve ReplicaSet'lerin nasıl oluşturulacağını ve ölçeklendirileceğini tanımlar.
ReplicaSet: Belirli bir pod kopyasının belirli bir sayıda çoğaltılmasını sağlar.
Namespace: Kaynakların gruplandırılmasını ve izolasyonunu sağlayan bir yol sunar.
Volume: Pod'lara kalıcı veri depolama imkanı sağlar.
ConfigMap ve Secret: Uygulama yapılandırmasını ve hassas verileri saklamak için kullanılır.
Ingress: Dış trafik için giriş noktalarını yönetir.
StatefulSet: Durumlu uygulamalar için pod yönetimini sağlar.
DaemonSet: Her node üzerinde belirli pod'ların çalıştırılmasını sağlar.
Job ve CronJob: Tek seferlik veya zamanlanmış görevlerin çalıştırılmasını sağlar.
Resource Quota ve LimitRange: Kaynak kullanımını sınırlamak ve yönetmek için araçlar sunar.
Horizontal Pod Autoscaler (HPA): Otomatik olarak pod'ların ölçeklendirilmesini sağlar.
ClusterRole ve RoleBinding: Erişim kontrolü ve yetkilendirme için kullanılır.
Affinity ve Anti-Affinity: Pod'ların belirli node'larda tercih edilerek veya tercih edilmeyerek yerleştirilmesini sağlar.
Taint ve Tolerations: Belirli node'lara sadece belirli toleransları olan pod'ların yerleştirilmesine izin verir.
Persistent Volume (PV) ve Persistent Volume Claim (PVC): Kalıcı veri depolama çözümlerini yönetir. PV, depolama kaynağını temsil ederken, PVC bu kaynağa erişim talebini temsil eder.
StatefulSet: Durum bilgisi olan uygulamaların yönetimi için özel bir API nesnesidir. Özellikle veritabanları gibi durum bilgisi taşıyan uygulamalar için kullanılır.
Horizontal Pod Autoscaler (HPA): Otomatik ölçeklendirme mekanizması, pod'ların CPU kullanımına veya diğer seçilen metriklere göre ölçeklendirilmesini sağlar.
Network Policy: Pod'lar arası ağ trafiğini kontrol etmek için kullanılır.
Role-Based Access Control (RBAC): Kubernetes kaynaklarına erişimi, roller ve rollerle ilişkilendirilmiş izinler üzerinden düzenler.
Custom Resource Definitions (CRD): Kubernetes API'sini genişletmek için kullanılır, böylece özel kaynak türleri oluşturabilir ve kullanabilirsiniz.
Operator: Kubernetes üzerinde çalışan ve belirli bir uygulama veya hizmetin yaşam döngüsünü yöneten bir yazılım uzantısıdır.
Helm: Kubernetes için paket yöneticisi, uygulamaların dağıtımını ve yönetimini kolaylaştırır.
Kubelet: Her bir node üzerinde çalışan ve pod'ların çalıştığını kontrol eden bir ajan.
Kube-Proxy: Her node'da çalışan ağ proxy'si, Kubernetes servis abstraksiyonunu gerçekleştirmek için ağ kurallarını yönetir.
Kube-Scheduler: Yeni oluşturulan pod'lar için uygun node'ları seçer.
Etcd: Tüm cluster konfigürasyonlarının ve durumlarının saklandığı hafif, dağıtık bir anahtar-değer deposudur.
Kube-Controller-Manager: Kubernetes'in çeşitli kontrol döngülerini çalıştıran bileşendir.
Bu kavramlar, Kubernetes'in esnekliğini, ölçeklenebilirliğini ve çeşitliliğini ortaya koyar ve bu teknolojinin neden modern yazılım dağıtım ve yönetimi için tercih edilen bir çözüm olduğunu gösterir. Kubernetes, bu bileşenler sayesinde karmaşık uygulama altyapılarını yönetmeyi kolaylaştırır ve otomatikleştirir.
SSS ve cevapları
Kubernetes teknolojisiyle ilgili sıkça sorulan sorular (SSS) ve cevapları, bu karmaşık ve çok yönlü platformu daha iyi anlamanıza yardımcı olabilir. İşte bazı yaygın sorular ve onların cevapları:
1. Pod Nedir?
Cevap: Pod, Kubernetes'te en temel dağıtım birimidir. Bir veya birden fazla konteyneri içerebilir. Bu konteynerler aynı pod içinde kaynakları ve ağ alanını paylaşır.
2. Deployment ve Service Arasındaki Fark Nedir?
Cevap: Deployment, uygulamanızın pod'larının nasıl oluşturulacağını ve ölçeklendirileceğini tanımlar. Service ise bu pod'lara sabit bir adres üzerinden erişim sağlayan bir abstraksiyondur. Deployment, uygulamanın çalışma şeklini yönetirken, Service ağ erişimini yönetir.
3. StatefulSet ve Deployment Arasındaki Fark Nedir?
Cevap: Her ikisi de Kubernetes'te pod'ları yönetir, ancak StatefulSet, durum bilgisi olan uygulamalar için tasarlanmıştır (örneğin, veritabanları). StatefulSet, pod'lara benzersiz, sabit kimlikler ve depolama sağlar. Deployment ise durumsuz uygulamalar için daha uygun olup, pod'ları hızlı ve esnek bir şekilde ölçeklendirir.
4. Kubernetes'te Node Nedir?
Cevap: Node, pod'ların çalıştırıldığı fiziksel veya sanal makinalardır. Bir Kubernetes cluster'ı, birden fazla node'dan oluşabilir ve bu node'lar kaynakları (CPU, bellek) pod'lara sağlar.
5. Horizontal Pod Autoscaler (HPA) Nasıl Çalışır?
Cevap: HPA, belirlenen metriklere (örneğin, CPU kullanımı) dayanarak pod'ların sayısını otomatik olarak ayarlar. Bu, yük artışına veya azalışına göre ölçeklendirmeyi sağlar, böylece kaynak kullanımı optimize edilir.
6. Persistent Volume (PV) ve Persistent Volume Claim (PVC) Arasındaki İlişki Nedir?
Cevap: PV, cluster içindeki bir depolama kaynağını temsil eder. PVC ise bu depolama kaynağına erişmek için kullanılan bir taleptir. Pod'lar PVC aracılığıyla PV'lara bağlanır ve böylece kalıcı veri depolaması sağlanır.
7. Kubernetes'te Ingress Ne İşe Yarar?
Cevap: Ingress, dışarıdan gelen HTTP ve HTTPS trafiğini yönetmek için kullanılır. Kurallar tanımlayarak, dış trafiği belirli pod'lara yönlendirir ve böylece dış dünyadan gelen isteklere yanıt verme yeteneği kazandırır.
8. Kubernetes'te Namespace Ne Amaçla Kullanılır?
Cevap: Namespace'ler, kaynakları ve izolasyonları gruplamak için kullanılır. Farklı projeler, takımlar veya müşteriler arasında kaynakları ayırmak ve yönetmek için kullanışlıdır.
9. Kubernetes'teki Rol Tabanlı Erişim Kontrolü (RBAC) Nedir?
Cevap: RBAC, Kubernetes kaynaklarına erişimi yönetmek için kullanılan bir sistemdir. Kullanıcılara ve gruplara roller atanır, bu roller belirli izinlerle ilişkilendirilir, böylece kimin ne yapabileceği kontrol altında tutulur.
10. Kubernetes'in Ölçeklenebilirliği Nasıl İşler?
Cevap: Kubernetes, pod'ları otomatik olarak ölçeklendirerek ve dağıtarak yerek yükü yönetir. Bu, hem Horizontal Pod Autoscaler (HPA) ile CPU kullanımı gibi metriklere dayalı otomatik ölçeklendirme, hem de manuel ölçeklendirme yoluyla gerçekleşebilir. Ayrıca, farklı node'larda pod'ların çalıştırılması yükü dengeler ve yüksek kullanılabilirlik sağlar.
11. Kubernetes'te Taint ve Tolerations Ne İşe Yarar?
Cevap: Taint'ler, belirli node'lara pod'ların atanmasını engellemek için kullanılır. Tolerations ise bir pod'un bu taint'leri "tolere" edebilmesini, yani bu taint'li node'lara yerleştirilebilmesini sağlar. Bu, daha hassas pod yerleştirme kontrolü için kullanılır.
12. Network Policy Nedir ve Neden Önemlidir?
Cevap: Network Policy, pod'lar arası ve pod'larla dış dünya arasındaki ağ trafiğini kontrol eden kuralları tanımlar. Bu, güvenliği artırır ve istenmeyen ağ erişimini engeller.
13. Custom Resource Definitions (CRD) Nasıl Kullanılır?
Cevap: CRD'ler, Kubernetes API'sini genişleterek yeni kaynak türleri oluşturmanıza olanak tanır. Bu, özel ihtiyaçlarınıza uygun kaynaklar yaratmanıza ve Kubernetes ekosistemi içinde yönetmenize imkan verir.
14. Kubernetes Operator Nedir?
Cevap: Operator, Kubernetes API'sini genişleten ve belirli bir uygulamanın veya servisin yaşam döngüsünü yöneten bir uzantıdır. Otomasyon ve yönetim görevlerini kolaylaştırır.
15. Helm Kubernetes'te Nasıl Kullanılır?
Cevap: Helm, Kubernetes için bir paket yöneticisidir. Uygulamaları ve bağımlılıklarını tanımlayan 'chart'lar aracılığıyla karmaşık Kubernetes dağıtımlarını basitleştirir ve tekrarlanabilir hale getirir.
16. Kubelet, Kube-Proxy ve Kube-Controller-Manager Arasındaki Farklar Nelerdir?
Cevap:
Kubelet: Her node'da çalışır ve pod'ların düzgün bir şekilde çalıştığından sorumludur.
Kube-Proxy: Ağ trafiğini yönetir ve Kubernetes servislerine erişimi sağlar.
Kube-Controller-Manager: Çeşitli kontrol döngülerini (örneğin, node durumu, pod replikasyonu) yönetir.
17. Etcd'nin Kubernetes'teki Rolü Nedir?
Cevap: Etcd, tüm Kubernetes cluster'ının durumunu ve konfigürasyon bilgilerini saklayan bir dağıtık anahtar-değer deposudur. Güvenilir ve hızlı veri saklama sağlar ve cluster durumunun tutarlılığı için kritik öneme sahiptir.
18. Kubernetes Namespace'lerin İzolasyon Seviyesi Nedir?
Cevap: Namespace'ler, Kubernetes kaynaklarını (pod'lar, servisler vb.) mantıksal olarak ayırmak için kullanılır. Bununla birlikte, tam anlamıyla güvenlik bazlı izolasyon sağlamazlar. Namespace'ler özellikle birden fazla takım veya proje arasında kaynakları bölüştürmek ve organizasyonel sınırlar oluşturmak için kullanışlıdır. Ancak güvenlik izolasyonu için Network Policy gibi araçlar ve RBAC kullanılmalıdır.
19. Kubernetes'te Resource Quota Nedir?
Cevap: Resource Quota, bir namespace içinde oluşturulabilecek kaynakların (CPU, bellek, pod sayısı vb.) maksimum sınırlarını belirler. Bu, kaynakların adil kullanımını sağlamak ve bir kullanıcının veya takımın tüm cluster kaynaklarını tüketmesini önlemek için önemlidir.
20. DaemonSet Nedir ve Ne Zaman Kullanılır?
Cevap: DaemonSet, her Kubernetes node'unda bir kopyasının çalıştırılmasını garantileyen bir pod türüdür. Genellikle log toplama, izleme gibi node düzeyinde servisler için kullanılır.
21. Kubernetes'te Job ve CronJob Arasındaki Fark Nedir?
Cevap: Job, tek seferlik görevler için kullanılırken, CronJob zamanlanmış, tekrarlayan görevler için kullanılır. Örneğin, bir Job bir veritabanı yedeklemesi yapabilirken, CronJob her gece otomatik olarak bu yedeklemeyi gerçekleştirebilir.
22. Kubernetes Cluster'ı Nasıl Ölçeklendiririm?
Cevap: Kubernetes cluster'ını ölçeklendirmek için iki ana yol vardır:
Dikey Ölçeklendirme (Vertical Scaling): Mevcut node'ların kaynaklarını (CPU, bellek) artırmak.
Yatay Ölçeklendirme (Horizontal Scaling): Cluster'a daha fazla node eklemek. Bu, genellikle yüksek kullanılabilirlik ve yük dağılımı için tercih edilir.
23. Kubernetes'te Etkin Güvenlik Uygulamaları Nelerdir?
Cevap: Kubernetes güvenliği, RBAC ile erişim kontrolü, Network Policy ile ağ izolasyonu, Secrets ile hassas verilerin güvenli saklanması, pod güvenlik politikaları ve düzgün bir IAM (Identity and Access Management) stratejisi uygulamayı içerir.
24. Kubernetes Manifest Dosyası Nedir?
Cevap: Kubernetes manifest dosyası, YAML veya JSON formatında, Kubernetes kaynaklarını (pod'lar, servisler, volumeler vb.) tanımlar. Bu dosyalar, kaynakların nasıl oluşturulacağını, yapılandırılacağını ve ölçeklendirileceğini belirtir.
25. Kubernetes'te Canary Deployment Nedir?
Cevap: Canary deployment, yeni bir sürümü küçük bir kullanıcı grubuna sunarak riski azaltma yöntemidir. Bu, yeni sürümdeki hataları tespit etmek ve geniş çaplı sorunları önlemek için kullanılır. Kubernetes, bu tür dağıtımları yönetmek için esnek yapılandırmalar sağlar.