Kubernetes operatörleri: durum bilgisi olan uygulamaların nasıl çalıştırılacağı

Kubernetes'teki durum bilgisi olan uygulamalarla ilgili sorun

Vatansız olarak sınıflandırılan durumlar söz konusu olduğunda uygulama ve hizmetlerin yapılandırılması, başlatılması ve daha fazla ölçeklendirilmesi kolaydır; Verileri kaydetmeden. Bu tür hizmetleri Kubernetes'te standart API'leri kullanarak çalıştırmak uygundur, çünkü her şey "kutudan çıktığı gibi" gerçekleşir: standart yapılandırmalara göre, herhangi bir ayrıntı veya sihir içermeden.

Basitçe söylemek gerekirse, PHP/Ruby/Python'da arka ucun beş kopyasını daha bir kapsayıcı kümesinde başlatmak için, yalnızca 5 kez yeni bir sunucu kurmanız ve kaynakları kopyalamanız gerekir. Hem kaynak kodu hem de başlatma betiği görüntüde olduğundan, durum bilgisi olmayan bir uygulamanın ölçeklendirilmesi tamamen basit hale gelir. Konteynerleri ve mikro hizmet mimarisini sevenlerin iyi bildiği gibi, zorluk durum bilgisi olan uygulamalaryani veritabanları ve önbellekler gibi veri kalıcılığı ile (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Bu, hem bağımsız olarak bir çekirdek kümesi uygulayan yazılımlar (örneğin, Percona XtraDB ve Cassandra) hem de ayrı yönetim yardımcı programları gerektiren yazılımlar (Redis, MySQL, PostgreSQL... gibi) için geçerlidir.

Kaynak kodu ve hizmetin başlatılması artık yeterli olmadığı için zorluklar ortaya çıkıyor - birkaç adım daha uygulamanız gerekiyor. En azından verileri kopyalayın ve/veya kümeye katılın. Daha doğrusu, bu hizmetler, veri kaybı veya geçici kullanım dışı kalma olmadan bunların nasıl düzgün şekilde ölçeklendirileceği, güncelleneceği ve yeniden yapılandırılacağı konusunda bir anlayış gerektirir. Bu ihtiyaçların dikkate alınmasına “işlemsel bilgi” denir.

CoreOS Operatörleri

Operasyonel bilgiyi "programlamak" için geçen yılın sonlarında CoreOS projesi gönderilen Kubernetes platformu için "yeni bir yazılım sınıfı" - Operatörler (İngilizce "işlem", yani "işlem" kelimesinden gelir).

Kubernetes'in temel yeteneklerini kullanan ve genişleten operatörler (dahil. Durumsal Kümeler, aşağıdaki farka bakın) DevOps uzmanlarının uygulama koduna operasyonel bilgi eklemesine olanak tanır.

Operatörün Amacı — kullanıcıya, bir Kubernetes kümesindeki birden çok durum bilgisi olan uygulama varlığını, gizli planda ne olduğunu (hangi veriler ve bununla ne yapılacağı, kümeyi korumak için hangi komutların yürütülmesi gerektiği) düşünmeden yönetmenize olanak tanıyan bir API sağlar ). Aslında Operatör, küme içindeki uygulamayla çalışmayı mümkün olduğunca basitleştirmek ve daha önce manuel olarak çözülmesi gereken operasyonel görevlerin yürütülmesini otomatikleştirmek için tasarlanmıştır.

Operatörler Nasıl Çalışır?

Çoğaltma Setleri Kubernetes, istenen sayıda çalışan pod'u belirtmenize olanak tanır ve denetleyiciler, (pod'lar oluşturup silerek) bu sayının korunmasını sağlar. Operatör de benzer şekilde çalışır ve standart bir Kubernetes kaynağına ve denetleyicisine, gerekli sayıda uygulama varlığını desteklemek için ek eylemler gerçekleştirmenize olanak tanıyan bir dizi operasyonel bilgi ekler.

Bunun nesi farklı? Durumsal KümelerKümenin kendilerine veri depolama veya statik IP'ler gibi durum bilgisi olan kaynaklar sağlamasını gerektiren uygulamalar için mi tasarlandı? Bu tür uygulamalar için Operatörler şunları kullanabilir: Durumsal Kümeler (yerine Çoğaltma Setleri) temel olarak teklif ek otomasyon: çökme durumunda gerekli eylemleri gerçekleştirin, yedekleme yapın, yapılandırmayı güncelleyin vb.

Bu durumda, tüm bunlar nasıl çalışıyor? Operatör, aşağıdaki özelliklere sahip bir yönetici arka plan programıdır:

  1. Kubernetes'teki etkinlik API'sine abone olur;
  2. ondan sistem hakkında veri alır (onun hakkında Çoğaltma Setleri, Kapsüller, Hizmetler ve benzeri.);
  3. hakkında veri alır Üçüncü Taraf Kaynakları (aşağıdaki örneklere bakın);
  4. görünüşe/değişime tepki verir Üçüncü Taraf Kaynakları (örneğin, boyutu değiştirmek, sürümü değiştirmek vb. için);
  5. sistemin durumundaki değişikliklere tepki verir (onun hakkında Çoğaltma Setleri, Kapsüller, Hizmetler ve benzeri.);
  6. en önemli şey:
    1. İhtiyaç duyduğu her şeyi (yine kendi API'sini) oluşturmak için Kubernetes API'sini çağırır Çoğaltma Setleri, Kapsüller, Hizmetler...),
    2. biraz sihir gerçekleştirir (basitleştirmek gerekirse, Operatörün bölmelere kendisinin girdiğini ve örneğin bir kümeye katılmak veya bir sürümü güncellerken veri formatını yükseltmek için komutları çağırdığını düşünebilirsiniz).

Kubernetes operatörleri: durum bilgisi olan uygulamaların nasıl çalıştırılacağı
Aslında resimden de görülebileceği gibi Kubernetes'e ayrı bir uygulama ekleniyor (normal bir uygulama) açılma с Çoğaltma Kümesi), Operatör olarak adlandırılır. Sıradan bir bölmede (genellikle sadece bir tane) yaşar ve kural olarak yalnızca kendisinden sorumludur. Ad alanı. Bu operatör uygulaması API'sini - doğrudan olmasa da - aracılığıyla uygular Üçüncü Taraf Kaynakları Kubernetes'te.

Böylece, oluşturduktan sonra Ad alanı Operatör, buna ekleme yapabiliriz Üçüncü Taraf Kaynakları.

Etcd için örnek (ayrıntılar için aşağıya bakın):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Elasticsearch'e örnek:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Operatörler için Gereksinimler

CoreOS, mühendislerin Operatörler üzerinde çalışırken elde ettiği ana kalıpları formüle etti. Tüm Operatörlerin bireysel olmasına rağmen (kendi özellikleri ve ihtiyaçları olan belirli bir uygulama için yaratılmışlardır), bunların yaratılmaları aşağıdaki gereksinimleri dayatan bir tür çerçeveye dayanmalıdır:

  1. Kurulum tek bir cihaz üzerinden yapılmalıdır. açılma: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - ve ek işlem gerektirmez.
  2. Kubernetes'e Operatör yüklerken yeni bir üçüncü taraf türü oluşturulmalıdır (Üçüncü Taraf Kaynağı). Kullanıcı, uygulama örneklerini (küme örnekleri) başlatmak ve bunları daha fazla yönetmek (sürümleri güncelleme, yeniden boyutlandırma vb.) için bu türü kullanacaktır.
  3. Mümkün olduğunda Kubernetes'te yerleşik olarak bulunan temel öğeleri kullanmalısınız: Hizmetler и Çoğaltma Setleriİyi test edilmiş ve anlaşılır kod kullanmak.
  4. Operatörlerin geriye dönük uyumluluğunu ve kullanıcı tarafından oluşturulan kaynakların eski sürümlerinin desteklenmesini gerektirir.
  5. Operatör kaldırılırsa uygulamanın kendisi değişiklik yapılmadan çalışmaya devam etmelidir.
  6. Kullanıcılar istenen uygulama sürümünü tanımlayabilmeli ve uygulama sürümü güncellemelerini yönetebilmelidir. Yazılım güncellemelerinin eksikliği, operasyonel ve güvenlik sorunlarının yaygın bir kaynağıdır, dolayısıyla Operatörlerin bu konuda kullanıcılara yardımcı olması gerekir.
  7. Operatörler; bölmeler, yapılandırmalar ve ağdaki potansiyel arızaları tespit eden Chaos Monkey gibi bir araçla test edilmelidir.

vbd Operatörü

Operatör Uygulama Örneği -etcd Operatörü, hazır bu konseptin duyurulduğu gün. Etcd küme yapılandırması, çekirdeği koruma ihtiyacı, küme üyeliğini yeniden yapılandırma ihtiyacı, yedekleme oluşturma vb. nedenlerden dolayı karmaşık olabilir. Örneğin, bir etcd kümesini manuel olarak ölçeklendirmek, yeni bir küme üyesi için bir DNS adı oluşturmanız, yeni bir vbd varlığı başlatmanız ve kümeyi yeni üye hakkında uyarmanız gerektiği anlamına gelir (vbdctl üye ekleme). Operatör durumunda, kullanıcının yalnızca küme boyutunu değiştirmesi gerekecektir; geri kalan her şey otomatik olarak gerçekleşecektir.

Etcd de CoreOS'ta oluşturulduğundan, önce Operatörünün görünmesini görmek oldukça mantıklıydı. Nasıl çalışıyor? Operatör mantığı vb. üç bileşen tarafından belirlenir:

  1. Gözlemlemek. Operatör, Kubernetes API'yi kullanarak kümenin durumunu izler.
  2. Analiz. Mevcut durum ile istenilen durum arasındaki farkları bulur (kullanıcı konfigürasyonu tarafından tanımlanır).
  3. Aksiyon. Etcd ve/veya Kubernetes hizmet API'lerini kullanarak tespit edilen farklılıkları çözer.

Kubernetes operatörleri: durum bilgisi olan uygulamaların nasıl çalıştırılacağı

Bu mantığı hayata geçirmek için Operatörde fonksiyonlar hazırlanmıştır. Oluştur/Yok Et (etcd kümesi üyelerini oluşturma ve silme) ve Yeniden boyutlandırma (küme üyelerinin sayısındaki değişiklik). İşleminin doğruluğu, Netflix'ten Chaos Monkey'e benzer şekilde oluşturulan bir yardımcı program kullanılarak kontrol edildi, yani. Etcd bölmelerini rastgele öldürmek.

Etcd'nin tam çalışması için Operatör ek özellikler sağlar: yedek (kullanıcılar için otomatik ve görünmez yedek kopya oluşturma - yapılandırmada bunların ne sıklıkla oluşturulacağını ve kaç tane depolanacağını belirlemek ve ardından onlardan verilerin geri yüklenmesi yeterlidir) ve yükseltmek (etcd kurulumlarının kesinti olmadan güncellenmesi).

Bir Operatörle çalışmak neye benzer?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

Etcd Operatörünün mevcut durumu beta sürümdür ve çalışması için Kubernetes 1.5.3+ ve etcd 3.0+ gerektirir. Kaynak kodu ve belgeler (kullanım talimatları dahil) şu adreste mevcuttur: GitHub.

CoreOS'tan başka bir örnek uygulama oluşturuldu - Prometheus Operatörü, ancak hâlâ alfa sürümündedir (planlanan özelliklerin tümü uygulanmamıştır).

Durum ve beklentiler

Kubernetes Operatörlerinin duyurulmasının üzerinden 5 ay geçti. Resmi CoreOS deposunda hâlâ yalnızca iki uygulama mevcuttur (etcd ve Prometheus için). Her ikisi de henüz kararlı sürümlerine ulaşmadı ancak taahhütler günlük olarak gözlemleniyor.

Geliştiriciler, "kullanıcıların Kubernetes kümelerine Postgres Operatörleri, Cassandra Operatörleri veya Redis Operatörlerini yüklediği ve bu uygulamaların ölçeklenebilir varlıklarıyla, durum bilgisi olmayan web uygulamalarının kopyalarını dağıtırken olduğu kadar kolay bir şekilde çalışabileceği bir gelecek" tasavvur ediyor. Birinci Üçüncü taraf geliştiricilerin operatörleri gerçekten ortaya çıkmaya başladı:

Şubat 2017'de Brüksel'de gerçekleşen Avrupa'nın en büyük özgür yazılım konferansı FOSDEM'de CoreOS'tan Josh Wood, Operatörleri duyurdu. rapor (bağlantıda bir video mevcuttur!), Bu, bu kavramın daha geniş Açık Kaynak topluluğunda popülaritesinin artmasına katkıda bulunmalıdır.

PS Makaleye gösterdiğiniz ilgi için teşekkür ederiz! Merkezimize abone olunDevOps ve GNU/Linux sistem yönetimine ilişkin yeni materyalleri ve tarifleri kaçırmamak için bunları düzenli olarak yayınlayacağız!

Kaynak: habr.com

Yorum ekle