YAML şablonu kullanımına dair soru işaretleri
- YAML şablonu kullanımının ne zamandan beri genel olarak kabul görmeye başladığı ve bunun nasıl kabul edilebilir hale geldiği sorgulanıyor.
- cfgmgmtcamp 2019'da Kubernetes yapılandırma yönetimi ihtiyacı ve kr8 çözümü hakkında bir sunum yapıldı.
- Sunum sırasında YAML şablonlarıyla ilgili sorular gündeme getirilince çevrimiçi ortamda ve konferansta canlı tartışmalar yaşandı.
Yapılandırma sorunu
- Uygulamalar ve altyapı belirli bir ölçeğin üzerine çıktığında yapılandırma karmaşıklığı sorunuyla karşı karşıya kalınır.
- Farklı ortamlarda (geliştirme, staging, production) veya bölgelerde (Avrupa, Kuzey Amerika) dağıtılan uygulamaların yapılandırmaları birbirinden farklı olabilir.
- Sistem yöneticileri ve DevOps mühendisleri yapılandırma yönetiminin karmaşıklığını iyi bilir; çeşitli araçlar bu sorunu YAML kullanarak çözmeye çalışır.
Geriye mi gittik?
- Bulut bilişimle birlikte sektörün ihtiyaçları değiştikçe yeni araçlar ortaya çıktı.
- CloudFormation ve Helm gibi araçlar güçlü yapılandırma araçları olsa da, YAML şablonları tasarlanırken sektör genelinde bir hata yapıldığına inanılıyor.
- Bunu açıklamak için Helm chart'larının özelleştirilebilir parametreler almasına ilişkin bir örnek veriliyor.
Helm chart'ları
- Helm chart'ları,
values.yaml dosyası üzerinden dış parametreler alarak chart'ı render eder.
- Basit string parametrelerden başlayıp isteğe bağlı alanlar, diziler ve map'ler yapılandırılırken ortaya çıkan karmaşıklık anlatılıyor.
- YAML'in katı girinti kuralları ve şablon sisteminin sınırlamaları eleştiriliyor.
JSON, Jsonnet ve YAML
- YAML, JSON'un bir üst kümesidir ve iki biçim arasında dönüşüm yapmak kolaydır.
- Jsonnet, JSON yapılandırmaları üretmeyi amaçlayan bir veri şablonlama dilidir.
Jsonnet ekolü
- Jsonnet, Kubernetes topluluğu dışında çok bilinmeyen yeni bir dildir.
- Jsonnet kullanarak dış değişkenleri kullanan JSON yapılandırmalarını kolayca üretmek mümkündür.
- İsteğe bağlı alanları, map'leri ve parametreleri ele alma yöntemleri ile Jsonnet'in ek özellikleri açıklanıyor.
Kr8
- Kr8, birden fazla Kubernetes kümesinin yapılandırmasını kolay ve basit biçimde oluşturmak ve yönetmek için burada anlatılan tüm yöntemlerden yararlanır.
- Burada anlatılan fikirlere katılıyorsanız Kr8'e göz atmanız öneriliyor.
GN⁺ görüşü
- YAML şablonlarının karmaşıklığı: Bu yazı, YAML şablonlarının karmaşıklığına ve sınırlamalarına dikkat çekerek yapılandırma yönetiminde sektörün karşı karşıya olduğu sorunları net biçimde ortaya koyuyor.
- Jsonnet'in avantajları: Jsonnet, YAML şablonlarına alternatif olarak sunuluyor; kullanım kolaylığı ve esnekliğinin vurgulanması, yeni araçlara yönelik ilgiyi artırıyor.
- Yapılandırma yönetiminin geleceği: Bu yazı, yapılandırma yönetiminin geleceğine dair içgörüler sunarken DevOps ve sistem yöneticilerine yeni yaklaşımlar arama fırsatı veriyor.
1 yorum
Hacker News yorumları
YAML yapılandırma dosyalarıyla ilgili çok fazla şikayet var. GitHub Actions'ta da en kötü kısım olarak görülüyor ve diğer tescilli yapılandırma dilleri (HCL, ASL vb.) için de benzer bir his var. Bildirimsel API'ler iyi, ancak bildirimlerin programatik olarak üretilebilmesine yönelik bir talep bulunuyor.
Yapılandırmayı kodla tanımlayıp üretmek daha iyi bir deneyim sunuyor. AWS CDK bunu tam olarak doğru kavrıyor; tür güvenli diller ve IDE desteği sayesinde yapılandırma ile bulut altyapısının bildirimsel tanımları yazılabiliyor.
YAML şablonlamasının mantıksız olduğuna katılıyor ve karmaşık mantık gerektiğinde YAML/JSON vb. üretmek için gerçek bir programlama dili kullanılması gerektiğini savunuyor. Bunun birçok sorunu çözebileceğini söylüyor.
Kubernetes üzerine bir tartışma vardı; Kubernetes API'si sezgisel ve iyi tanımlanmış bir JSON şemasına sahip olmasına rağmen insanlar Helm chart'larının nasıl kullanılacağını öğrenmek için çok zaman harcıyor. Jsonnet, Ksonnet, Nu, CUE büyük popülerlik kazanmadı; çoğu kişinin
kubectliçine gömülü Kustomize'ı kullandığı görülüyor.Geliştiricilerin yapılandırmanın doğru şekilde nasıl ele alınması gerektiği konusunda yeterince düşünmediği belirtiliyor. Aslında tüm programlamanın bir bakıma yapılandırma sorunu olduğu, tüm yapılandırmaların sonunda bir fonksiyonun parametreleri olarak aktarıldığı söyleniyor. Yapılandırmayı merkezi bir veritabanında saklamak daha iyi olabilir.
CI/CD'de YAML'in neredeyse bir programlama dili gibi kullanıldığı durumlar var; bunun çok ayrıntılı, sezgisel olmayan ve düzgün tanımlanmamış, üreticiye özgü bir dil olduğu düşünülüyor.
Helm'in kazanmış olmasından üzüntü duyuluyor. Helm chart'larıyla çalışmak çok rahatsız edici; editör yardımcı olamıyor ve tüm verileri
indent 4ile doğru hizalamak gerekiyor. Helm'in Kubernetes'in sonunu getireceği yönünde bir öngörü var.String interpolation kullanarak makinenin okuyacağı kod üretmenin arzu edilir olmadığı yönünde kişisel bir felsefe dile getiriliyor. SQL injection ve cross-site scripting gibi sorunların ortaya çıkmaya devam edeceği söyleniyor. HTML üretmek için şablon dosyaları kullanılmaması gerektiği savunuluyor.
YAML'ı seçen kişilerin sorunun farkında değilmiş gibi göründüğü belirtiliyor. İnsan merkezli veri gösterimi ile bilgisayar merkezli veri gösterimi arasında doğrudan bir çatışma var. YAML ve JSON aslında birbirinden farklı veri formatları.
YAML'ı sevdiğini ama Helm chart'larıyla çalışırken her gün lanet okuduğunu söyleyen bir görüş var. Helm'den nefret etse de herkes kullandığı için kendisinin de kullanmaya devam edeceğini belirtiyor.
cuelang'e geçmeyi düşündüğünü, bunun Jsonnet'ten daha iyi tasarlandığını düşündüğünü söylüyor. Kubernetes'te zaten durum uzlaştırma işlevi var; sadece silme işlevinin eklenmesi gerekiyor.