Home TürkçeKubernetes Kubernetes Operator’leri ve Operator Framework

Kubernetes Operator’leri ve Operator Framework

by Fatih Boy
0 comment

Kubernetes tasarımını her zaman lego’ya benzetirim. Uygun parçaların bir araya getirilmesi ile bir bütün oluşuyor. Bu tasarım, zaman içerisinde eskiyen bileşenlerin yerine daha modern mimarilerin eklenmesine olanak vermesi yanında yeni bileşenlerin eklenmesine de olanak vermekte. Makalemin konusu olan Operator’ler bu tasarımın getirisinin en güzel kanıtı. Makalemin devamında Kubernetes Operator’lerinin ve Operator Framework’ün ne olduğunu, nasıl bir mimariye sahip olduğunu ve nasıl kullanmaya başlayabileceğinizi öğrenebilirsiniz.

Operator Deseni

Kubernetes’in 1.7 sürümü ile birlikte Custom Controllers özelliği karşımıza çıktı. Bu özellik, geliştiricilerin Kubernetes fonksiyonlarını genişleterek yeni yetenekler kazandırmalarının önünü açmıştır. Custom Controller’lar bir adım öteye giderek mevcut yönetim görevlerinin otomasyonu yapmaya, hatta kube-proxy gibi Kubernetes bileşenlerinin yerini almaya başlamıştır.

Custom Controller’lar, en basit haliyle Kubernetes’in prensiplerinden kontrol döngüsünü gerçeğe dönüştürmektedirler. Mevcut Kubernetes durumunu okur, alınması gereken aksiyonları alır, gerekli yeni durum bilgisini diğer bileşenlerin aksiyon alması için Kubernetes’e iletir. Tasarımları gereği Kubernetes Cluster’ını düzenli olarak izlerler ve gerektiğinde yeni duruma uygun aksiyon alırlar.

Tasarımlarının kafanızda daha net canlanması adına konuyu bir örnekle inceleyelim. Kubernetes’te bir Kafka Cluster’ı ayağa kaldırmak istediğinizi varsayalım. Kafka Cluster’ı zookeeper ve broker bileşenlerinden oluşmaktadır. Kafka Cluster’ında ilk ayağa kalkması gereken bileşen zookeeper’dır. İlk zookeeper örneği ayağa kalktıktan sonra paralel olarak diğer zookeeper’lar başlatılabilir. Broker’lar ancak Zookeeper’ların hizmet verir durumda olması ardından başlatılabilir. Belirli bir düzende takip edilmesi gereken bu kurulum, tahmin edeceğiniz gibi Helm ile yapılamayacak kadar karışıktır. Helm için karışık olan bu akış bir Custom Controller ile kolaylıkla (teşbihte hata olmazmış) gerçekleştirilebilir.

Bir önceki paragrafta örneklediğim akış Kubernetes dünyasında Operator Deseni olarak kabul edilmektedir. Operator deseni, Kubernetes üzerinde Custom Controller’lar vasıtasıyla uygulamaları ve bileşenleri kolayca yönetmemize imkan sağlamaktadır. Operator deseni Kubernetes Cluster’ını yöneten yöneticilerin, gerçek operator’lerin, asıl görevlerinden sapmadan uygulamaları kolayca yönetebilmelerine imkan vermektedir. Bu desen sayesinde Kubernetes yöneticisi bir Kafka Cluster’ını, operasyonel detaylarına girmeden, kolayca çalışır hale getirebilmektedir.

Örneğimize devam ederek Custom Controller ve operator desenini biraz daha açalım. Bu yaklaşımın daha da kubernetes-native olmasının yolu uygulama ve bileşenlerinin de Kubernetes kaynağı olarak görülmesi ve yönetilmesinden geçmektedir. Tam da bu noktada karşımıza Custom Resource Definitions (CRDs / Özel Kaynak Tanımları) çıkmaktadır. CRD’ler Kubernetes’in temel bileşenlerince tanınmamakta ve varsayılanda bunlar için bir aksiyon alınmamaktadır. Esnekliklerinin bir nedeni de aslında budur. CRD’leri kağıda yazılmış dilekçeler gibi düşünebilirsiniz. Gereğini yerine getiren bir merci yoksa hiç bir aksiyon alınmayacaktır. Oluşturulan bir CRD, veritabanında okunmayı bekleyen bir tablodur. Custom Controller’lar kendilerini ilgilendiren CRD’leri düzenli olarak sorgular, Kubernetes Cluster’ının mevcut durumunu CRD ile karşılaştırır, varsa gerekli aksiyonları alırlar. Yani dilekçelerin gereğini yerine getirirler.

Kafanızda Custom Controller ve CRD’lerin birleşimiyle Kubernetes’in kazandığı gücü netleştirebildiğimi umuyorum. Bu güçle Kubernetes yöneticisi, olmasını istediği durumu tarifler ve operator bunun gerçelleşmesini sağlar. Kafka örneğimizden devam edersek, Kubernetes yöneticisi kaç zookeeper ve operator kurulması gerektiğini, yetkilendirmenin nasıl olacağı belirten CRD’yi oluşturur ve Kafka Cluster’ı ayağa kalkar. Bir adım daha ileri gidelim. Kafka Cluster’ında oluşturulacak topic’leri de CRD olarak tanımladığınızı düşünün. Bu durumda Kubernetes yöneticinin Kafka Cluster’ında nasıl bir topic oluşturabileceğini bilmesini dahi gerek kalmayacaktır. Hatta bir adım daha ileri gidelim ve Kafka Cluster’ında programlarla uzaktan/api’ler ile oluşturulan topic’leri Custom Controller tarafından farkedildiğini ve güncel duruma dair topic CRD’sinin oluşturulduğunu düşünün…

Operator deseni ve bu desenin gerçekleşmiş hali olan Operator’ler workload’ların çalıştırılmasını ve yaygınlaştırılmasını otomatize ederler. Bu şekilde, Kubernetes kaynak koduna müdahale edilmeden, Kubernetes yaklaşımıyla, çalışması ve yetenekleri geliştirilmiş olur. Gerçek insanların operasyonel bilgisinin kod üzerine aktarılmış halidir. Kubernetes Cluster’ınızda kullandığınız uygulamanın geliştirme ya da destek ekibinden birinin Cluster içerisinde 7/24 yaşayıp uygulamayı yönetmesi olarak canlandırılabilir. Toparlamak gerekirse; Operator, bir uygulamamın paketlenmesi, kurulumu, yaygınlaştırması ve yönetimi süreçlerinden sorumludur.

Operator Framework’ü

Bir önceki bölümde paylaştığım Operator Deseni farklı programlama dillerin ve farklı yöntemlerle oluşturulan Custom Controller’lar yardımıyla gerçekleştirilmiş olur. Teknik olarak, en basit şekliyle, Operator’ler Kubernetes API’sini dinleyerek/kullanarak CRD’ler ile tariflenen durumun gerçekleşmesini sağlarlar.

Eğer Kubernetes API’si ile çok içli-dışlı olmadıysanız sıfırdan bir Operator yazmak sizi hırpalayabilir. Özellikle de bu konuda yeniyseniz… Tam da bu noktada sahneye Operator Framework’ü çıkıyor. CoreOS ekibince açık kaynak kodlu olarak geliştirilen Operator Framework’ü, hızlıca bir operator geliştirmek için ihtiyacımız olan geliştirme ve çalıştırma zamanı araçları sunmaktadır. Operator Framework’ü 3 temel bileşenden oluşmaktadır;

  • Operator SDK : Operator geliştirme için ihtiyaç duyulan geliştirme kit’i
  • Operator Lifecycle Manager : Operasyonel olarak kullanımda olan Operator’ün Kubernetes Cluster’ında kurulum, güncelleme ve yönetimi gibi yaşam döngüsü süreçlerini denetler
  • Operator Metering : Operator kullanımını raporlar

Operator Lifecycle Manager

Eğer aktif olarak operator geliştiren bir ekipte yer almıyorsanız, yukarıda saydığım bileşenlerden ilk ihtiyaç duyacağınız bileşen Operator Lifecycle Manager olacaktır. Defakto olan Operator Lifecycle Manager yardımıyla Kubernetes Cluster’ınıza yeni operatorleri kolaylıkla kurabilir, güncelleyebilir, operasyonel işlemler yapabilirsiniz. Operator’lere kolay ulaşım ve katolog hizmeti için OperatorHub‘ı kullanabilirsiniz.

Operator Lifecycle Manager kurulumu için aşağıdaki komutları sırasıyla çalıştırmanız yeterli olacaktır.

export OLM_RELEASE=$(curl -s https://api.github.com/repos/operator-framework/operator-lifecycle-manager/releases/latest | grep tag_name | cut -d '"' -f 4)
curl -L https://github.com/operator-framework/operator-lifecycle-manager/releases/download/$OLM_RELEASE/install.sh -o install.sh
chmod +x install.sh
./install.sh $OLM_RELEASE

Kurulum işlemi aşağıdaki komutla kontrol edilebilir;

kubectl get pods --all-namespaces | grep olm

Bu komutlar hem operator lifecycle manager ve bileşenlerini kuracak, hem de aşağıda sıraladığım CRD’leri tanımlayacaktır;

KaynakKısa AdıAçıklama
ClusterServiceVersioncsvOperator adı, versiyonu, ikonu, kullandığı kaynaklar v.b. meta verileri
InstallPlanipBir CVS’nin kurulumu ya da güncellemesi için oluşturulması gerekli hesaplanmış kaynak listesi
CatalogSourcecatsrcUygulamayı tanımlayan CSV’ler, CRD’ler ve paketlerin deposu
SubscriptionsubBir kanalı (güncel/beta v.b.) takip ederek CSV’nin güncel olmasını sağlar
OperatorGroupogAynı namespace’de yaygınlaştırılmış Operator’lerin Custom Resource’larını (CR) izlemek üzere oluşturulmuş nesne

Diğer CRD’lerde olduğu gibi yukarıdaki tabloda yer alan CRD’lerde listelenebilir, düzenlenebilir, silinebilir ve yenileri oluşturulabilir.

Şu Yazıları da Sevebilirsiniz

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi