Kubernetes kümesi hazırlamak kolay ve kullanışlı mı? Eklenti operatörü duyurusu

Kubernetes kümesi hazırlamak kolay ve kullanışlı mı? Eklenti operatörü duyurusu

Izleyen kabuk operatörü ağabeyini sunuyoruz - eklenti operatörü. Bu, sistem bileşenlerini eklenti olarak adlandırılabilecek bir Kubernetes kümesine yüklemek için kullanılan Açık Kaynaklı bir projedir.

Neden herhangi bir ekleme var?

Kubernetes'in hazır hepsi bir arada ürün olmadığı ve "yetişkinlere yönelik" bir küme oluşturmak için çeşitli eklemelere ihtiyaç duyulacağı bir sır değil. Eklenti operatörü bu eklentileri kurmanıza, yapılandırmanıza ve güncel tutmanıza yardımcı olacaktır.

Kümede ek bileşenlere duyulan ihtiyaç şu şekilde açıklanmıştır: rapor Meslektaşlarım Dryuşa. Kısacası, Kubernetes'teki durum şu anda öyle ki, basit bir "oynatma" kurulumu için kutudan çıkan bileşenlerle idare edebilirsiniz, geliştiriciler ve testler için Ingress'i ekleyebilirsiniz, ancak tam kurulum için, bunun hakkında "Üretiminiz hazır" diyebilirsiniz, bir düzine farklı eklenti eklemeniz gerekir: izleme için bir şey, günlüğe kaydetme için bir şey, girişi ve sertifika yöneticisini unutmayın, düğüm gruplarını seçin, ağ politikaları ekleyin, sezon sysctl ve pod otomatik ölçekleyici ayarlarıyla ...

Kubernetes kümesi hazırlamak kolay ve kullanışlı mı? Eklenti operatörü duyurusu

Onlarla çalışmanın özellikleri nelerdir?

Uygulamada görüldüğü gibi, mesele tek bir kurulumla sınırlı değildir. Kümeyle rahatça çalışmak için eklentilerin güncellenmesi, devre dışı bırakılması (kümeden kaldırılması) gerekir ve bunları üretim kümesine yüklemeden önce bazılarını test etmek isteyeceksiniz.

Peki Ansible burada yeterli olabilir mi? Belki. Ancak Genel olarak, tam teşekküllü eklentiler ayarlar olmadan yaşamaz. Bu ayarlar küme çeşidine (aws, gce, azure, bare-metal, do, ...) bağlı olarak farklılık gösterebilir. Bazı ayarlar önceden belirtilemez; bunların kümeden alınması gerekir. Ve küme statik değildir: bazı ayarlar için değişiklikleri izlemeniz gerekecektir. Ve burada Ansible zaten eksik: bir kümede yaşayan bir programa ihtiyacınız var, yani. Kubernetes Operatörü.

İş yerinde deneyenler kabuk operatörüeklentileri kurma, güncelleme ve ayarları izleme görevlerinin tamamen çözülebileceğini söyleyecekler kancalar kabuk operatörü için. Koşullu yapacak bir komut dosyası yazabilirsiniz kubectl apply ve örneğin ayarların saklanacağı ConfigMap'i izleyin. Bu yaklaşık olarak eklenti operatöründe uygulanan şeydir.

Bu eklenti operatöründe nasıl organize edilir?

Yeni bir çözüm oluştururken aşağıdaki ilkelerden yola çıktık:

  • Eklenti yükleyicisinin desteklemesi gerekir şablonlama ve bildirimsel yapılandırma. Eklenti yükleyen sihirli komut dosyaları yapmıyoruz. Eklenti operatörü, eklentileri yüklemek için Helm'i kullanır. Yüklemek için bir grafik oluşturmanız ve yapılandırma için kullanılacak değerleri seçmeniz gerekir.
  • Ayarlar şunlar olabilir: kurulumda oluştur, yapabilirsiniz kümeden alVeya güncellemeleri al, küme kaynaklarının izlenmesi. Bu işlemler kancalar kullanılarak gerçekleştirilebilir.
  • Ayarlar şunlar olabilir: bir kümede depolamak. Ayarları kümede saklamak için bir ConfigMap/addon operatörü oluşturulur ve Addon operatörü bu ConfigMap'te yapılan değişiklikleri izler. Eklenti operatörü, basit kuralları kullanarak kancalara ayarlara erişim sağlar.
  • Ekleme ayarlara bağlıdır. Ayarlar değiştiyse, Eklenti operatörü Helm grafiğini yeni değerlerle kullanıma sunar. Dümen grafiğinin kombinasyonunu, bunun değerlerini çağırdık ve bir modül bağladık (daha fazla ayrıntı için aşağıya bakın).
  • Evreleme. Sihirli sürüm komut dosyaları yok. Güncelleme mekanizması normal bir uygulamaya benzer; eklentileri ve eklenti operatörlerini bir görüntüde toplayın, etiketleyin ve kullanıma sunun.
  • Sonuç kontrolü. Eklenti operatörü Prometheus için ölçümler sağlayabilir.

Eklenti operatöründe dolgu nedir?

Ekleme, kümeye yeni işlevler ekleyen herhangi bir şey olarak değerlendirilebilir. Örneğin, Ingress'i yüklemek eklentiye harika bir örnektir. Bu, kendi CRD'sine sahip herhangi bir operatör veya denetleyici olabilir: prometheus-operatör, sertifika-yönetici, kube-kontrolör-yönetici vb. Veya küçük ama kullanımı daha kolay bir şey - örneğin, kayıt defteri sırlarını yeni ad alanlarına kopyalayan gizli kopyalayıcı veya yeni düğümlerde sysctl parametrelerini yapılandıran sysctl ayarlayıcı.

Eklentileri uygulamak için Addon operatörü çeşitli kavramlar sağlar:

  • Dümen tablosu kümeye çeşitli yazılımlar yüklemek için kullanılır - örneğin Prometheus, Grafana, nginx-ingress. Gerekli bileşenin bir Dümen grafiği varsa, onu Addon operatörü kullanarak kurmak çok basit olacaktır.
  • Değer depolama. Dümen grafikleri genellikle zamanla değişebilecek birçok farklı ayara sahiptir. Eklenti operatörü bu ayarların saklanmasını destekler ve Helm grafiğini yeni değerlerle yeniden yüklemek için değişiklikleri izleyebilir.
  • Kancalar Addon operatörünün olaylar üzerinde çalıştırdığı ve değerler deposuna erişen yürütülebilir dosyalardır. Kanca, kümedeki değişiklikleri izleyebilir ve değerler deposundaki değerleri güncelleyebilir. Onlar. Kancaları kullanarak başlangıçta veya bir zamanlamaya göre kümeden değer toplamak için keşif yapabilir veya kümedeki değişikliklere göre kümeden değer toplayarak sürekli keşif yapabilirsiniz.
  • Modül Helm grafiği, değerler deposu ve kancaların birleşimidir. Modüller etkinleştirilebilir veya devre dışı bırakılabilir. Bir modülün devre dışı bırakılması, tüm Helm grafiği sürümlerinin silinmesi anlamına gelir. Modüller kendilerini dinamik olarak etkinleştirebilirler; örneğin ihtiyaç duydukları tüm modüller etkinleştirildiyse veya keşif kancalarda gerekli parametreleri bulduysa bu, yardımcı bir etkinleştirilmiş komut dosyası kullanılarak yapılır.
  • Küresel kancalar. Bunlar "kendi başına" kancalardır, modüllere dahil edilmezler ve değerleri modüllerdeki tüm kancalar tarafından kullanılabilen küresel bir değerler deposuna erişimleri vardır.

Bu parçalar birlikte nasıl çalışır? Belgelerdeki resme bakalım:

Kubernetes kümesi hazırlamak kolay ve kullanışlı mı? Eklenti operatörü duyurusu

İki çalışma senaryosu vardır:

  1. Küresel kanca bir olay tarafından tetiklenir; örneğin, kümedeki bir kaynak değiştiğinde. Bu kanca değişiklikleri işler ve yeni değerleri global değerler deposuna yazar. Eklenti operatörü global depolamanın değiştiğini fark eder ve tüm modülleri başlatır. Her modül, kancalarını kullanarak etkinleştirilmesi gerekip gerekmediğini belirler ve değer deposunu günceller. Modül etkinleştirilirse, Eklenti operatörü Helm grafiğinin kurulumunu başlatır. Bu durumda Helm grafiğinin modül deposundaki ve global depolama alanındaki değerlere erişimi vardır.
  2. İkinci senaryo daha basittir: Bir modül kancası bir olay tarafından tetiklenir ve modülün değer deposundaki değerleri değiştirir. Eklenti operatörü bunu fark eder ve Helm grafiğini güncellenmiş değerlerle başlatır.

Ekleme, tek bir kanca veya tek bir Dümen şeması olarak uygulanabilir veya birkaç bağımlı modül olsa bile - bu, kümeye yüklenen bileşenin karmaşıklığına ve istenen yapılandırma esnekliği düzeyine bağlıdır. Örneğin, depoda (/örnekler) hem kancalı hem de Helm grafiği olan basit bir modül olarak uygulanan ve ConfigMap'i düzenleyerek ayarları eklemeyi mümkün kılan değerler deposunu kullanan bir sysctl-tuner eklentisi vardır.

Güncellemelerin teslimi

Addon operatörünün yüklediği bileşen güncellemelerini organize etme hakkında birkaç kelime.

Addon operatörünü bir kümede çalıştırmak için ihtiyacınız olan eklemelerle bir resim oluştur kanca ve Helm grafik dosyaları biçiminde bir ikili dosya ekleyin addon-operator ve kancalar için ihtiyacınız olan her şey: bash, kubectl, jq, python vesaire. Daha sonra bu görüntü normal bir uygulama olarak kümeye aktarılabilir ve büyük olasılıkla bir veya daha fazla etiketleme şeması düzenlemek isteyeceksiniz. Az sayıda küme varsa uygulamalardakiyle aynı yaklaşım uygun olabilir: yeni sürüm, yeni sürüm, tüm kümelere gidin ve Pod'ların görüntüsünü düzeltin. Ancak önemli sayıda kümeye yayılım yapılması durumunda, bir kanaldan kendi kendini güncelleme konsepti bizim için daha uygun oldu.

İşte bunu nasıl yapıyoruz:

  • Kanal aslında herhangi bir şeye (örneğin dev/stage/ea/stable) ayarlanabilecek bir tanımlayıcıdır.
  • Kanal adı resim etiketidir. Güncellemeleri bir kanala yaymanız gerektiğinde yeni bir resim oluşturulur ve kanal adıyla etiketlenir.
  • Kayıt defterinde yeni bir görüntü göründüğünde, Addon operatörü yeniden başlatılır ve yeni görüntüyle başlatılır.

Bu, yazıldığı gibi en iyi uygulama değildir. Kubernet belgeleri. Bunu yapmanız önerilmez, ancak bahsediyoruz aynı kümede yaşayan normal bir uygulama. Eklenti operatörü durumunda, bir uygulama kümelere dağılmış çok sayıda Dağıtımdan oluşur ve kendi kendini güncelleme çok yardımcı olur ve hayatı kolaylaştırır.

Kanallar yardım ve testte: Yardımcı küme varsa kanala göre yapılandırabilirsiniz stage ve güncellemeleri kanallara sunmadan önce buna aktarın ea и stable. Kanalda bir küme varsa ea bir hata oluştu, bunu şu şekilde değiştirebilirsiniz: stable, bu kümeyle ilgili sorun araştırılırken. Küme aktif desteğin dışına alınırsa "dondurulmuş" kanalına geçer; örneğin, freeze-2019-03-20.

Kancaları ve Dümen çizelgelerini güncellemeye ek olarak, güncelleme ve üçüncü taraf bileşeni. Örneğin, koşullu düğüm dışa aktarıcıda bir hata fark ettiniz ve hatta onu nasıl düzelteceğinizi anladınız. Daha sonra PR'yi açtınız ve yeni sürümün tüm kümelerden geçmesini ve görüntünün sürümünü artırmasını bekliyorsunuz. Süresiz olarak beklememek için, node-exporter'ınızı oluşturabilir ve PR'yi kabul etmeden önce ona geçebilirsiniz.

Genel olarak, bu, Addon operatörü olmadan yapılabilir, ancak Addon operatörü ile düğüm dışa aktarıcıyı kurmaya yönelik modül tek bir depoda görünür olacak, görüntünüzü oluşturmak için Docker dosyası tam orada tutulabilir, tüm katılımcılar için daha kolay hale gelir. ne olduğunu anlama süreci... Ve eğer birden fazla küme varsa, o zaman hem PR'nizi test etmek hem de yeni bir sürümü kullanıma sunmak daha kolay hale gelir!

Bu bileşen güncelleme organizasyonu bizim için başarılı bir şekilde çalışıyor, ancak başka herhangi bir uygun plan da uygulanabilir - sonuçta bu durumda Eklenti operatörü basit bir ikili dosyadır.

Sonuç

Addon operatöründe uygulanan ilkeler, normal uygulamaların geliştirme süreçlerine benzer şekilde, bir kümede eklentilerin oluşturulması, test edilmesi, kurulması ve güncellenmesi için şeffaf bir süreç oluşturmanıza olanak tanır.

Eklenti operatörü için modül formatındaki eklentiler (Dümen şeması + kancalar) kamuya açık hale getirilebilir. Biz Flant şirketi olarak yaz aylarında bu tür eklemeler şeklinde geliştirmelerimizi yayınlamayı planlıyoruz. GitHub'daki geliştirmeye katılın (kabuk operatörü, eklenti operatörü), buna göre kendi eklemenizi yapmaya çalışın örnekler и belgeleme, Habré ve bizim haberlerimizi bekleyin Youtube kanalı!

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle