Kubernetes Mimarisi
1. Kubernetes Mimarisi
Kubernetes, container içerisine alınmış uygulama ve hizmet kümelerini yönetmek amacıyla tasarlanmış, açık kaynaklı bir platformdur. Bir Kubernetes Cluster’ı yönetebilmek için adminlerin Kubernetes mimarisini bilmelerinde fayda olacaktır. https://kubernetes.io/docs/concepts/architecture/
Kubernetes cluster mimarisi ve genel olarak konseptleri aşağıdaki gibi gösterebiliriz:
Resim: Kubernetes Örnek Mimari Anlatımı
Kubernetes mimarisi ve bileşenlerinde ilk olarak Master ve Worker Node’lardan bahsedebiliriz. Şimdi bu node’ların içeriğinde yer alan bileşenlere bakalım:
Master Nodes: Cluster’daki Node’larla ilgili Manage, Plan, Schedule, Monitor (control plane components) işlemlerini yapar. Etcd database de genellikle bu sunucuda bulunur.
- Kube API Server: Primary managementtan sorumludur. Cluster’daki tüm operasyonların orchestrate (yönetim) edilmesinden sorumludur. External kullanıcılar için cluster’ı yönetebilmeleri için Kubernetes API yayınlar.
- Kube Controller Manager: Node controller, Cluster ve Node durumundan sorumludur. Node’ların sağlık durumu, yeni node ilave edilmesi, silinmesi, problem yaşayıp yaşamadığı vb konularla ilgilenir. Replication controller ise, istenildiği kadar container replikasının çalışıp çalışmadığından, eksik varsa tamamlanmasından sorumludur.
- Kube Scheduler: İlgili worker’a kapasitesine göre (ram, cpu, disk, network vb) hangi container’ı kaç adet, hangi worker node üzerine, nasıl deploy edeceğine karar verir.
- ETCD: Cluster’daki işlemlerin ve gerekli bilgilerin tutulduğu, key/value tipinde database’dir.
Worker Nodes: Cluster’da çalışacak uygulamalara ait iş yükünü taşıyan sunuculardır.
- Kubelet: Worker’lar üzerindeki agenttır. Worker ile ilgili tüm bilgileri ve durumu, Master Node ile paylaşır.
- Kubeproxy: Worker’lar üzerindeki network iletişiminden ve yönetiminden sorumludur.
- Container Engine: Docker, Crio, Containerd, Rkt vb container engine’dir.
Resim: Örnek Mimari
1.1. API Erişimi
Kubernetes Api hizmetini; mimari içerisindeki kaynaklara erişim, bunların yönetilmesi, eklenip çıkarılması, bazı bilgilerin edinilmesi için Kubernetes’in bize sunduğu erişim hizmetleri olarak tanımlayabiliriz. Api erişimleri sayesinde adminlerin sistemi yönetebilmesi, 3rd party uygulama ve developerların da bu hizmeti kullanarak uzaktan kubernetes’e erişerek istedikleri işlemleri yapabilmeleri sağlanır. Ayrıca, farklı uygulama ve servisler de Kubernetes ile entegrasyonlarını da yine bu api hizmeti sayesinde yapabilmektedir.
Bunlara örnek olarak aşağıdaki işlemleri sayabiliriz:
- Authenticate User
- Validate Request
- Retrieve Data
- Update ETCD
- Operate Cluster vb.
Yaygın olarak kullanılan Kubernetes Api olarak https://:6443 url’sini verebiliriz.
1.2. High Availability & Planlama
Kubernetes Cluster yapısındaki node’lar tek node’lu control plane ve worker şeklinde çalışabilmektedir. Ancak single çalışan bir control plane veya worker rolündeki bir node problem yaşadığında Kubernetes Cluster’ın bir bölümü veya tamamı erişilemez hale gelebilir. Benzer şekilde, üzerinde çalışan uygulamalar da aynı riski taşıyor olacaktır.
Kubernetes sistemini ayakta tutan bileşenlerin HA yapıda planlanması ve kurulması önerilmektedir. Örneğin control plane node’larının 3 adet ve birlikte erişim problemi yaşamadan çalışmak üzere kurulması gerekmektedir. Control Plane içerisindeki bileşenler de benzer şekilde bu HA yapıya uyumlu şekilde çalışacaktır, örneğin Etcd, Kube-apiserver vb.
Cluster dizaynı yaparken Node’lar, kaynak ihtiyaçları, network ihtiyaçları gibi konular belirlenmelidir. Sistemin hangi amaçla kullanılacağı; örneğin, development ortamı için mi, prod mu, eğitim için mi, yoksa bu iş için bulut sağlayıcısından mı faydalanacağız. Hangi yükler ne derecede sisteme gelecek vs konular değerlendirilmelidir.
Aşağıda Kubernetes Cluster Dizaynında Belirlenecek Konular Sıralanmıştır:
- Purpose
- Education
- Development & Testing
- Hosting Production Applications
- Cloud or OnPrem?
- Workloads
- How many?
- What kind?
- Web
- Big Data/Analytics
- Application Resource Requirements
- CPU Intensive
- Memory Intensive
- Traffic
- Heavy traffic
- Burst Traffic
Not: Bu değerler versiyon, teknoloji ve donanım özelliklerine göre değişiklik gösterebilir.
Resim: Örnek HA Kubernetes Cluster Bileşenleri
Kubernetes Cluster’ı Onprem ortamımıza mı yoksa buluta mı kuracağız, buna tabi ki maliyetlerin karşılaştırılması ile karar verilecektir. Bunun yanında, aşağıdaki konulara da bakılmalıdır:
Platform ile ilgili:
- Onprem Ortamımızda: Kubeadm tool ile kurulum yaparız,
- GCP: Google Cloud Provider’da GCE (google cloud engine) tool’unu kullanırız,
- AWS: Amazon’da kops tool’unu kullanırız,
- Azure: Azure’da Kubernetes Service (AKS) kullanılır,
Storage Durumuyla ilgili:
- High Performance gereken durumlarda: SSD/NVME Storage seçilmeli,
- Multiple Concurrent connections gerekli ise: Network based storage seçilmeli,
- Persistent shared volumes for shared access across multiple PODs,
- Label nodes with specific disk types,
- Use Node Selectors to assign applications to nodes with specific disk types,
Node’larla ilgili:
- Virtual or Physical Machines
- Minimum of 4 Node Cluster (Size based on workload)
- Master vs Worker Nodes
- Linux X86_64 Architecture
- Master nodes can host workloads
- Best practice is to not host workloads on Master nodes (master node’a taint eklenerek worker gibi çalışması engellenebilir)
Master Node:
Büyük yapılarda control plane node bileşenlerinin hepsinin aynı sunucuda ve lokasyonda durmaması için bunlar ayrılabilir. Örneğin ETCD’nin farklı bir yerde host edilmesi gibi.
2. Linkler
https://kubernetes.io/docs/concepts/architecture/
Alpay Polat - Şubat 2024