Kubernetes Cluster: Helm Integration
Kubernetes menyediakan berbagai opsi untuk mendeploy aplikasi. Salah satu metode paling umum adalah menggunakan manajer paket Helm. Jika Anda ingin menjalankan solusi yang populer atau cukup dikenal dalam cluster Kubernetes Anda, kemungkinan besar dapat ditemukan sebagai paket yang sudah dikonfigurasi yang dapat dipasang dalam beberapa menit. Helm membantu Anda menginstal aplikasi Kubernetes dari repositori jarak jauh serta membuat chart Helm lokal.
Helm tersedia di semua node control plane dari Kubernetes Cluster secara default dan tidak memerlukan konfigurasi tambahan. Cukup sambungkan ke node (misalnya melalui Web SSH), dan Anda dapat mulai bekerja dengan Helm. Versi pengelola paket ini secara otomatis diperbarui selama pembaruan cluster Kubernetes.
Helm bekerja dengan tiga konsep besar:
- Chart adalah paket Helm yang berisi semua definisi sumber daya yang diperlukan untuk menjalankan aplikasi, alat, atau layanan di dalam cluster Kubernetes.
- Repository adalah tempat di mana chart dapat dikumpulkan dan dibagikan.
- Release adalah instance dari sebuah chart yang berjalan dalam cluster Kubernetes. Satu chart dapat dipasang berkali-kali ke dalam cluster yang sama (dengan nama release uniknya), misalnya beberapa instance database.
Helm menginstal chart ke dalam Kubernetes, menciptakan release baru untuk setiap instalasi. Dan untuk menemukan chart baru, Anda dapat mencari di repository Helm.
Dalam panduan ini, kami akan mencakup semua tahap utama bekerja dengan Helm:
- mencari chart dan bekerja dengan repository
- memasang aplikasi Helm baru
- mengelola aplikasi yang sudah ada
Helm tidak hanya berguna untuk solusinya yang siap pakai, tetapi juga sebagai alat versioning dan standardisasi untuk pengembangan proyek. Awalnya, ketika Anda bekerja pada proyek kecil, pendekatan deployment yang ter-script dapat mencukupi untuk kebutuhan Anda. Namun, kompleksitas dapat meningkat dengan cepat, memerlukan lebih banyak penyesuaian pada file YAML Anda. Misalnya, bahkan untuk deployment di lingkungan staging dan produksi memerlukan penyesuaian seperti URL database. Pada titik tertentu, Anda mungkin merasa bahwa sulit untuk melacak interaksi dan ketergantungan komponen. Biasanya, ini berarti bahwa kompleksitas lingkungan Anda melebihi skrip deployment buatan sendiri. Dalam situasi seperti itu, mungkin ini adalah saat yang tepat untuk mempertimbangkan Helm sebagai solusi potensial yang akan menggantikan skrip buatan Anda.
Finding Helm Charts
Ada banyak solusi yang sudah dikonfigurasi yang dapat dipasang di dalam Kubernetes Cluster dalam beberapa menit. Manajer paket Helm memiliki pusat yang banyak solusi siap pakai. Selain itu, Anda dapat bekerja dengan repository kustom.
Helm dilengkapi dengan perintah search yang kuat yang dapat digunakan untuk mencari dua jenis sumber yang berbeda:
- helm search hub mencari di Artifact Hub (repository chart Helm komunitas terdistribusi), yang mencantumkan chart helm dari banyak repository
Misalnya, Anda dapat menemukan semua chart yang tersedia secara publik untuk WordPress dengan menjalankan:
helm search hub wordpress
- helm search repo mencari repository yang telah Anda tambahkan ke klien helm lokal Anda (dengan helm repo add). Pencarian ini dilakukan melalui data lokal, dan tidak memerlukan koneksi jaringan publik
Helm 3 (digunakan sejak Kubernetes 1.18.10) tidak lagi menyertakan repository chart bawaan. Anda dapat menggunakan perintah helm repo untuk menambah, mencantumkan, dan menghapus repository. Misalnya, tambahkan repository Bitnami yang populer:
helm repo add bitnami https://charts.bitnami.com/bitnami
Anda bisa melihat repository mana yang dikonfigurasi menggunakan perintah helm repo list:
helm repo list
Karena repository chart sering berubah, Anda bisa memastikan klien Helm Anda terbaru dengan menjalankan:
helm repo update
Installing Helm Package
Untuk memasang paket baru, gunakan perintah helm install. Secara sederhana, ini mengambil dua argumen:
- {name} - sebuah nama release yang Anda pilih (misal. mywordpress)
- {chart} - nama chart yang ingin Anda pasang (misal. bitnami/wordpress)
Selain itu, Anda dapat menyediakan opsi chart untuk menyesuaikan aplikasi (lihat lebih detail di bagian mengelola Helm). Misalnya, mari kita ubah nama blog dengan parameter --set wordpressBlogName='My Blog!'.
helm install --set wordpressBlogName='My Blog!' mywordpress bitnami/wordpress
Memasang chart menciptakan objek rilis baru. Jika Anda ingin helm menghasilkan nama untuk Anda, hilangkan nama rilis dan gunakan parameter --generate-name.
Selama instalasi, klien helm akan mencetak informasi berguna tentang sumber daya yang dibuat, status rilis, dan langkah konfigurasi tambahan. Mari ikuti langkah-langkah untuk memastikan bahwa instance WordPress kami bekerja dengan baik.
WordPress adalah solusi yang cukup kompleks yang membutuhkan komponen tambahan seperti Storage dan IP publik. Jika tidak disediakan selama instalasi Kubernetes Cluster, Anda dapat menambahkannya melalui dashboard platform.
Dapatkan URL WordPress dan kredensial admin dengan menjalankan perintah di bawah ini:
export SERVICE_IP=$(kubectl get svc --namespace default mywordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
printf "WordPress URL: http://$SERVICE_IP/\nWordPress Admin URL: http://$SERVICE_IP/admin\nUsername: user\nPassword: $(kubectl get secret --namespace default mywordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)\n"
Sekarang, gunakan data yang diperoleh untuk mengakses situs WordPress dan admin Anda.
Seperti yang Anda lihat, nama blog kustom kami (My Blog!) yang disediakan melalui parameter --set diterapkan secara otomatis.
Managing Helm Applications
Helm menyediakan beberapa perintah untuk bekerja dengan chart yang sudah dipasang. Daftar tindakan termasuk upgrade dan pemulihan rilis, pemeriksaan status dan nilai, dll.
Untuk informasi lebih lanjut tentang perintah, lihat bantuan bawaan Helm - helm help. Untuk melihat deskripsi dari perintah tertentu dan benderanya, jalankan helm {command} --help.
1. Untuk melacak status rilis atau membaca ulang informasi konfigurasi, Anda dapat menggunakan helm status:
helm status mywordpress
2. Sering kali, Anda ingin menyesuaikan chart untuk menggunakan konfigurasi yang Anda inginkan. Ini dapat dilakukan dengan menyediakan nilai yang diperlukan melalui bendera --values (-f) atau --set selama prosedur instalasi dan upgrade. Yang pertama meneruskan nilai kustom dalam file YAML terpisah, sedangkan yang kedua - langsung dari command line (misalnya --set a=b,c=d atau --set outer.inner=value).
Anda dapat menentukan bendera ini beberapa kali dengan --set memiliki prioritas lebih tinggi. Dalam kasus kontradiksi, prioritas diberikan ke penggantian terakhir (paling kanan).
Anda dapat memeriksa daftar nilai default untuk paket dengan perintah berikut (utilitas less membantu menavigasi melalui respons dengan nyaman):
helm show values bitnami/wordpress | less
3. Anda dapat menggunakan perintah helm upgrade untuk meningkatkan rilis ke versi chart baru atau mengubah konfigurasi rilis Anda. Selama prosedur, Helm mencoba melakukan upgrade yang paling tidak invasif dengan hanya memperbarui hal-hal yang telah diubah sejak rilis terakhir.
Jika diperlukan, Anda dapat menggunakan perintah upgrade dengan bendera --reset-values untuk mengatur ulang nilai kustom apa pun dan menggunakan yang terpasang dalam chart.
Karena spesifik dari chart WordPress kami dari bagian penginstalan, Anda harus menyediakan kata sandi saat ini saat meningkatkan rilis. Mari tambahkan nilai-nilai ini ke variabel yang sesuai untuk kenyamanan:
export WORDPRESS_PASSWORD=$(kubectl get secret --namespace "default" mywordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
export MARIADB_ROOT_PASSWORD=$(kubectl get secret --namespace "default" mywordpress-mariadb -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
export MARIADB_PASSWORD=$(kubectl get secret --namespace "default" mywordpress-mariadb -o jsonpath="{.data.mariadb-password}" | base64 --decode)
Sekarang, Anda dapat menyediakan kata sandi melalui bendera --set:
helm upgrade --set wordpressPassword=$WORDPRESS_PASSWORD,mariadb.auth.rootPassword=$MARIADB_ROOT_PASSWORD,mariadb.auth.password=$MARIADB_PASSWORD mywordpress bitnami/wordpress
Saat Anda perlu menyediakan banyak parameter kustom, mungkin lebih nyaman untuk menentukannya dalam file YAML terpisah. Contohnya untuk WordPress, Anda dapat menyiapkan file values-template.yaml berikut:
wordpressPassword: %WP_PASS%
mariadb:
auth:
rootPassword: %DB_ROOT_PWD%
password: %DB_PWD%
Lalu Anda bisa mengganti placeholder dengan nilai password aktual (yang telah diekspor ke variabel dalam langkah ini sebelumnya).
cat values-template.yaml | sed "s/%WP_PASS%/$WORDPRESS_PASSWORD/g" | sed "s/%DB_ROOT_PWD%/$MARIADB_ROOT_PASSWORD/g" | sed "s/%DB_PWD%/$MARIADB_PASSWORD/g" > values.yaml
Kemudian Anda dapat meneruskan file dengan konfigurasi yang diperlukan (values.yaml) dalam perintah helm upgrade atau helm install dengan bendera --values(-f). Langkah-langkah sederhana ini akan menghemat Anda dari keharusan menentukan kata sandi secara manual untuk setiap operasi upgrade WordPress.
helm upgrade -f values.yaml mywordpress bitnami/wordpress
4. Perintah helm get adalah alat yang berguna untuk melihat rilis dalam cluster. Misalnya, untuk melihat nilai yang digunakan untuk menghasilkan rilis:
helm get values mywordpress
Seperti yang Anda lihat, nilai kata sandi kami bertahan melalui upgrade.
5. Selain itu, mudah untuk kembali ke rilis sebelumnya jika ada sesuatu yang tidak berjalan sesuai rencana.
Perintah helm rollback yang sesuai memerlukan dua parameter - nama release target dan nomor revision yang diperlukan. Instalasi awal selalu merupakan revisi pertama. Nomor ini dinaikkan satu untuk setiap instalasi, peningkatan, atau operasi rollback.
Anda dapat menggunakan helm history untuk melihat nomor revisi untuk suatu rilis tertentu.
helm history mywordpress
helm rollback mywordpress 1
6. Untuk menghapus rilis dari cluster, gunakan perintah berikut:
helm uninstall mywordpress
Jika Anda ingin menyimpan catatan penghapusan rilis, gunakan bendera --keep-history.
Setelah penghapusan, Anda dapat memeriksa rilis yang sedang dideploy dengan perintah helm list.