Bu makalede, Kubernetes’in anahtar kavramlarını, bileşenlerini ve mimarisini ele alacağım. İşte Kubernetes dünyasına giriş yapmanızı sağlayacak temel kavramlar.
- Kubernetes Master: Kubernetes Master, bir Kubernetes kümesinin kontrol merkezidir. Master, kümedeki tüm kaynakları yönetir ve kümenin durumunu izler. Temel olarak üç ana bileşenden oluşur: API Sunucusu, Kontrolör Yöneticisi ve Etcd. API Sunucusu, diğer bileşenlerin ve kullanıcıların Kubernetes ile etkileşime geçmesini sağlar. Kontrolör Yöneticisi, kümenin durumunu izler ve kaynakları istenen durumda tutmak için gereken aksiyonları yürütür. Etcd ise kümenin durumunu ve yapılandırmasını depolayan dağıtılmış bir veritabanıdır.
- Kubernetes Node: Kubernetes Node, kümedeki iş yüklerini çalıştıran fiziksel veya sanal makinelerdir. Bir Node, pod’ları (konteyner grupları) çalıştırmak için gerekli olan kaynakları sağlar. Her Node, Kubernetes Agent (kubelet) tarafından kontrol edilir ve Kubernetes Master ile iletişim kurar. Bir kümede birden çok Node olabilir ve bu şekilde yük dengesi ve yedeklilik elde edilebilir.
- Kubernetes Pod: Kubernetes Pod, en küçük dağıtım birimidir ve bir veya birden fazla konteyneri içerir. Pod, aynı Node üzerinde birlikte çalışan konteynerlerin mantıksal bir gruplamasını sağlar. Konteynerler, aynı Pod içinde paylaşılan kaynaklara (örneğin ağ veya disk) erişebilirler. Pod, çalıştığı Node üzerindeki IP adresini paylaşır ve birlikte çalışan konteynerler arasında iletişimi kolaylaştırır.
- İmperatif ve Deklaratif Yönetim: Kubernetes, iki yönetim yaklaşımını destekler: İmperatif ve Deklaratif. İmperatif yönetim, komutlar aracılığıyla doğrudan Kubernetes API’sini kullanarak durumu yönetmeyi içerir. Deklaratif yönetim ise YAML veya JSON dosyalarını kullanarak kaynakların istenen durumunu tanımlar ve Kubernetes’e bu durumu sağlama görevini verir. Kubernetes, deklaratif yaklaşımı teşvik eder ve sistem durumunu sürekli olarak belirtilen hedefe yaklaştırmak için otomatik olarak aksiyon alır.
- Label ve Selector: Label ve Selector, Kubernetes’te kaynakları (pod’lar, servisler, vb.) tanımlamak ve gruplamak için kullanılan önemli kavramlardır. Bir Label, bir anahtar-değer çiftidir ve bir kaynağa (örneğin bir pod’a) iliştirilebilir. Selector, bu etiketleri kullanarak kaynakları filtrelemek veya belirli bir kaynağa erişmek için sorgular oluşturmak için kullanılır. Bu, kaynakları kategorilere ayırmanın ve dinamik olarak gruplama yapmanın güçlü bir yoludur.
- Namespace: Namespace, Kubernetes kümesinde kaynakların mantıksal bir gruplamasını sağlar. Her namespace, birbirinden izole edilmiş bir çalışma ortamı sunar ve kaynak adları arasında çakışmayı önler. Bu, farklı ekiplerin veya projelerin kendi alanlarında çalışmasını sağlar. Namespace’ler, kaynakları daha iyi organize etmeyi ve güvenlik politikalarını uygulamayı kolaylaştırır.
- Desired State ve Actual State: Kubernetes, uygulamaların ve kaynakların istenen durumunu (desired state) tanımlamanıza olanak tanır. Desired state, bir kaynağın nasıl olması gerektiğini belirtir (örneğin, belirli bir sayıda pod çalışmalıdır). Kubernetes, bu istenen durumu takip eder ve gerektiğinde otomatik olarak kaynakların gerçek durumunu (actual state) istenen duruma yaklaştırır. Böylece, hedef durumu sürekli koruyarak sürekli çalışmayı sağlar.
- Kubernetes Service: Kubernetes Service, bir grup pod’a erişimi sağlayan istemci tarafı bir servis noktasıdır. Servisler, pod’ların IP adreslerini ve durumlarını takip eder ve bunları birleştirerek dış dünyaya veya diğer pod’lara erişimi kolaylaştırır. Servisler, yük dengelemesini ve kaynakları dinamik olarak keşfetmeyi içeren ileri düzey ağ yeteneklerini sağlar.
- Kubernetes Network: Kubernetes kümesindeki pod’lar arasındaki iletişim, ağlar arası birlikte çalışabilirlik ve ağ politikalarını sağlayan Kubernetes Network kavramı tarafından desteklenir. Kubernetes, farklı ağ sağlayıcılarına (örneğin, Kubernetes ağı, Cilium, Flannel) uyum sağlar ve pod’ların iletişimini güvenli ve ölçeklenebilir hale getirir.