Menggunakan werf untuk meluncurkan grafik Helm yang kompleks



Artikel ini dikhususkan untuk pengembangan grafik Helm untuk Kubernetes menggunakan solusi yang sudah jadi dari repositori grafik. Dengan pendekatan ini, pengguna menerapkan resep komunitas atau resepnya sendiri, memastikan pembaruan tepat waktu dari komponen standar semua proyeknya dan kenyamanan mempertahankan solusi secara umum.

Fitur nyaman seperti itu sekarang dibangun ke dalam utilitas GitOps werf kami, yang seharusnya menyederhanakan seluruh proses pengoperasian infrastruktur untuk aplikasi yang dirakit dan diluncurkan ke Kubernetes.

Helm built-in


Mungkin keberhasilan utama Helm - "manajer paket untuk Kubernetes" - dikaitkan tidak banyak dengan fungsinya seperti dengan repositori grafik resmi dan dukungan untuk repositori pada umumnya. Pengaturan resep dan bagan disertai oleh komunitas besar. Spesialis mendukung solusi terkini yang dibutuhkan oleh pengguna akhir. Setiap bagan dari repositori resmi distandarisasi dan didokumentasikan dengan baik.

Dalam kasus sepele, pengguna bahkan tidak perlu membuat bagan untuk meluncurkan aplikasi: ia hanya menemukan solusi yang sudah jadi, membaca dokumentasi, menyiapkan pengaturan dan menggunakan bagan resmi.

Untuk waktu yang lama, kami telah secara aktif menggunakan Helm di dalam werf untuk meluncurkan infrastruktur aplikasi dan sekarang kami melangkah lebih jauh. Dimulai dengan versi v1.0.4-alpha.10 , perintah untuk bekerja dengan dependensi dan repositori bagan telah ditambahkan ke werf untuk sepenuhnya meninggalkan klien Helm.

Perintah utama untuk ini:

  • werf helm repo

     add Add a chart repository fetch Download a chart from a repository and (optionally) unpack it in local directory init Init default chart repositories configuration list List chart repositories remove Remove a chart repository search Search for a keyword in charts update Update information of available charts locally from chart repositories 
  • werf helm dependency

     build Rebuild the charts/ directory based on the requirements.lock file list List the dependencies update Update charts/ based on the contents of requirements.yaml 

Plus, dukungan untuk referensi grafik telah ditambahkan ke perintah werf helm deploy-chart .

Dan di sini adalah bagaimana semua sihir ini terlihat beraksi - lebih tepatnya, di sini kami menunjukkan perbandingan peluncuran grafik yang sama di werf (kiri) dan di Helm (kanan):

gambar

Lebih banyak latihan


Kembali ke kenyamanan menggunakan solusi siap pakai untuk meluncurkan seluruh aplikasi - contoh yang biasa dengan WordPress . Meluncurkan bagan Helm-nya ke kluster Kubernetes menggunakan werf mungkin terlihat seperti ini:

 $ cat << EOF > values.yaml wordpressBlogName: flant wordpressUsername: admin wordpressPassword: password mariadb: mariadbRootPassword: password EOF $ werf helm deploy-chart --values values.yaml stable/wordpress my-web-app 

Demonstrasi dalam asciicinema .

Karena repositori berisi banyak solusi , Anda dapat membangun aplikasi Anda sendiri dari mereka sebagai kubus, di mana kubus akan menjadi berbagai bagan Helm di mana seluruh sistem bergantung. Kemungkinan besar, Anda hanya perlu mengkonfigurasi komponen dengan benar sesuai kebutuhan Anda.

Misalnya, aplikasi web memerlukan antrian, cache, dan penyimpanan data. Bagaimana kita menyebarkan komponen-komponen ini melalui werf?

Untuk memulai - mari percepat pencarian untuk semua yang Anda butuhkan menggunakan CLI:

 $ werf helm repo search queue NAME CHART VERSION APP VERSION DESCRIPTION stable/rabbitmq 6.4.1 3.7.17 Open source message broker software that implements the A... stable/rabbitmq-ha 1.31.0 3.7.15 Highly available RabbitMQ cluster, the open source messag... 

Dengan analogi, kita akan menemukan komponen yang tersisa untuk semua repositori bagan terdaftar (daftar repositori yang digunakan dapat dilihat dengan menjalankan perintah werf helm repo list ).

Setelah semuanya ditemukan, tinggal menambahkannya ke bagan. Ada beberapa cara untuk melakukan ini: tambahkan diagram komponen ke direktori grafik atau buat file requirements.yaml dan jelaskan dependensinya, lalu berinteraksi dengan mereka menggunakan perintah khusus werf helm dependency build|list|update .

Ilustrasi jalur kedua:

 $ cat << EOF > .helm/requirements.yaml dependencies: - name: mysql version: 0.3.4 repository: "@stable" - name: redis version: 1.1.11 repository: "@stable" - name: rabbitmq version: 0.6.16 repository: "@stable" EOF $ werf helm dependency build $ werf deploy --env test 

Demonstrasi dalam asciicinema .

Selama proses peluncuran, werf akan membuat semua dependensi dan melacaknya bersama dengan sumber daya lainnya - tidak diperlukan tindakan tambahan.

Akibatnya, dengan mempertimbangkan keahlian komunitas yang berpengalaman, Anda secara signifikan menghemat waktu dalam pengembangan dan pemeliharaan grafik. Namun, tidak ada yang membatasi Anda untuk menggunakan bagan publik: Anda dapat menggelar bagan Anda dengan kesuksesan yang sama, konfigurasi yang disiapkan dengan mempertimbangkan spesifikasi yang diperlukan.

Dokumentasi tentang perintah repositori dan dependensi di werf disajikan di sini . Anda mungkin juga tertarik membaca dokumentasi untuk detail lebih lanjut tentang peluncuran ke werf dan perbedaan utama dari Helm .

Kesimpulan


Tidak adanya fitur yang penting bagi kami dalam solusi Open Source yang ada memaksa kami untuk membuat kapabilitas, binding, dan integrasi yang sesuai. Proyek werf dibuat dan didukung, pertama-tama, untuk menyelesaikan tugas sehari-hari para insinyur DevOps kami.

Sebagai contoh, kami telah bekerja untuk waktu yang lama (tahun kedua!) Sehingga proposal kami untuk melacak sumber daya di Helm diterima sebagai mode alternatif di basis kode utama proyek (hulu). Masyarakat menerima dan mendukung gagasan itu, seperti banyak yang membutuhkan kesempatan ini. Namun, kemajuan ke arah ini dimulai di Helm 3 dan baru sekarang ...

Hingga saat ini, penerapan ide ini di Helm telah diblokir oleh pengembang. Namun, selama ini kami telah mengembangkan fungsi yang sesuai untuk melacak sumber daya di pustaka Open Source yang terpisah - kubedog - dan kami sudah menggunakannya di werf. Dan dilihat dari aktivitas di GitHub, perpustakaan menemukan minat di antara pengguna Kubernet / Helm lainnya, yang sangat menyenangkan.

Anda dapat mendukung ide kami (dan implementasi) dengan menempatkan bintang pada proyek kubedog di GitHub dan / atau acungan jempol dalam masalah asli di Helm. Terima kasih

PS


Baca juga di blog kami:

Source: https://habr.com/ru/post/id468049/


All Articles