Kubernetes Notları
Konteynerler
Konteyner, kodu ve ona bağlı tüm bileşenleri paketleyen standart bir yazılım birimidir. Amacı uygulamanın farklı işletim ortamlarında hızlı ve güvenilir bir şekilde çalışmasıdır. Konteynerleri, masaüstü bilgisayarlardan daha çok laptoplara benzetebiliriz. Masaüstü bilgisayarları kullanmak için birçok aletin birleşimine ihtiyaç duyarız. Kasa, ekran, klavye, fare vb. gibi. Taşınabilir değildir. Laptopta ise ihtiyaç duyduğumuz herşey bir cihazda toplanmıştır ve onu istediğimiz yere taşıyabiliriz. Konteynerlerde bunun gibidir. Yazılımın ihtiyaç duyduğu herşeyi taşınabilir bir paket içerisine koyar. Bunların arasında işletim sistemi dosyaları, konfigürasyon dosyaları, uygulama kodu vb. gibi elemanlar bulunur. Konteynerin avantajları; taşınabilir olması, tutarlı olması ve sanal makine gibi teknolojilerden daha az kaynak kullanması olarak özetlenebilir. Konteyner runtime, onu bir makinede çalıştırmak için kullanılan yazılıma verilen isimdir.
Kubernetes
Kubernetes; konteyner haline getirilmiş uygulamaların yönetilmesi, ölçeklenmesi, dağıtımının otomatize edilmesi gibi görevleri yerine getiren açık kaynak bir sistemdir. Kubernetes, konteynerleri server gibi işletim kaynaklarına dağıtmaya (deploy) yardımcı olur. Uygulamanızın replikalarını (aynısı) çoklu sunucular arasında dağıtabilirsiniz. Replikaları arttırıp azaltabilirsiniz. Kubernetes konteynerlerin ağ iletişimlerini kontrol etmek için bir çerçeve sağlar. Daha güvenli uygulamalar için birçok özellik sunar ve konfigürasyon veri yönetimine yardımcı olur.
Kubernetes Cluster (Küme)
Kubernetes cluster, konteynerleri çalıştıran iş makinaları toplamına verilen isimdir.
Control Plane (Kontrol Düzlemi)
Kümeyi kontrol eden servisleri işaret eder. Kullanıcılar bu düzlemi kullanarak küme ile etkileşime girerler. Control plane kümenin durumunu izler. Birbirinden bağımsız birçok kısımdan oluşur. Herhangi bir yerde çalışabilirler. Yüksek erişilebilirlik için çoklu instance çalıştırabilirsiniz.
Node (Bağlantı Ucu / Düğüm)
Cluster içinde konteynerleri çalıştıran bir makinenin temsilidir. Node’daki konteynerleri çalıştırır. Konteynerlerin durumunu izler ve Control Plane’e raporlar.
Worker Nodes (İşçi Node’lar)
Worker node’lar, yönetim için bir konteyner runtime’a ihtiyaç duyar. Bu bileşene “kubelet” denir. Kubelet, node’da bulunan kubernetes aktivitesini yönetmeye yarar.
Kubernetes API
Kubernetes control plane’in temeli API sunucusudur.
- Kubernetes API, temel http API’dir.
- Kullanıcı arayüzü ile API; objeleri sorgular, manipüle eder ve dolayısı ile cluster’ı kontrol eder.
- Merkezi bir kontrol noktasıdır. Kubernetes’in çeşitli bileşenleri API’yi kullanarak iletişim kurarlar.
- API; kullanıcılar ile cluster arasında bir arayüz gibi hareket eder.
Kubernetes Objeleri
Objeler, kubernetes tarafından saklanan kalıcı veri elemanlardır. Cluster’ın durumunu temsil ederler. Uygulamaları dağıtabilir, konfigüre edebilir, konteyner çalıştırabilir, cluster davranışını, objeleri oluşturarak, silerek modifiye edebilirsiniz. Tüm bunlar, Kubernetes API aracılığı ile gerçekleşir.
Pods
Birçok farklı tipte kubernetes objesi bulunur. En önemlisine pod adı verilir. Pod’lar konteynerleri çalıştırmak ve yönetmek için kullanılır.
Süreç genel olarak şöyle işler: Kullanıcılar API’leri kullanarak obje oluşturabilir ve onları manipüle edebilir. Bir pod objesi oluştururlar. Daha sonra control plane, obje tarafından temsil edilen durumu uygulamak için çalışır ve node üzerinde bir konteyner çalıştırır. Worker node’lar, her konteynerin durumunu, API’ye sürekli haber verir. Kullanıcılar ise durumu kontrol etmek için objeleri görüntüleyebilirler.
YAML
Kubernetes objeleri genellikle YAML verisi olarak temsil edilir. Aşağıdaki örnek, bir konteyner içerisinde nginx sunucusunu çalıştıran basit bir pod’u gösterir:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
— name: nginx
image: nginx
apiVersion’u YAML verisinin hangi kubernetes API versiyonu ile uyumlu olduğunu gösterir.
kubectl
Bir kubernetes komut satırı aracıdır. Kubernetes cluster’ında komutlar çalıştırmanıza olanak sağlar. Kubectl’ı uygulama dağıtmak, cluster kaynaklarını incelemek ve loglara bakmak için kullanabilirsiniz.
Kubectl, kubernetes objelerini oluşturma, görüntüleme, modifiye etme, silme gibi işlemleri yapmak için kullanılır. Kubectl kubernetes API ile arka planda komutlarınızı yerine getirmek için iletişim kurar.
Pod’lar ile Konteyner Yönetimi
Pod, bir ya da daha fazla konteynerden oluşan, aynı depolama ve ağ kaynaklarını kullanan, konteynerlerin nasıl çalıştırılacağına dair özellikleri barındıran bir bileşendir.
Pod, cluster içinde birbiriyle yakın bağlantıda olan bir yada daha fazla konteynerden oluşan bir objedir.
Pod Özellikleri
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
— name: nginx
image: nginx
kind — obje tipini belirtir.
metadata.name — pod objesinin ismi.
spec.containers — pod’da yer alan bir ya da daha fazla konteynerin listesini sağlar.
spec.containers[].image — çalıştırmak istediğiniz yazılımı içeren konteyner imajının adını belirtir.
Bulutta Kubernetes
Birçok bulut sağlayıcı, birkaç klik ile cluster oluşturabileceğiniz yönetilen bir kubernetes platformunu barındırır.
Amazon Web Services
Amazon EKS — Elastic Kubernetes Service: Yönetilen bir kubernetes altyapısıyla kolayca uygulamalarınızı çalıştırmanıza olanak sağlar.
Amazon EC2 — Elastic Compute Cloud: Sanal makinelerle, kendi kubernetes cluster’ınızı kurabilir ve yönetebilirsiniz.
Amazon ECR — Elastic Container Registry: Bulutta, konteyner imajlarınızı güvenli bir şekilde saklayabilir ve yönetebilirsiniz.
Azure
Microsoft’un ise Azure Kubernetes Service (AKS) çözümü vardır. Ayrıca AKS, Azure’un continuous integration / continuous delivery (CI/CD) gibi devops özellikleri ile entegredir.
Google Kubernetes Engine (GKE) ile kendi çözümünü sunar. GKE, çoklu-alan (multi-zone) ve bölgesel (region) cluster’lar ile yüksek erişilebilirlikli bazı kullanışlı özellikler sunar.
Kaynak:
Diğer yazılarıma ulaşmak için: