
Artikel ini adalah kelanjutan logis dari
publikasi terbaru kami tentang sejarah manajer paket untuk Kubernetes -
Helm . Kali ini kita akan membahas lagi masalah perangkat dan fungsi Helm saat ini (
versi 2.x ), serta grafik dan repositori yang dikelola, setelah itu kita akan beralih ke praktik pemasangan Helm di kluster Kubernetes dan menggunakan grafik.
Entri
Helm adalah alat manajemen grafik.Bagan menjelaskan set data yang diperlukan untuk membuat instantiate aplikasi di cluster Kubernetes. Ini dapat memiliki bagan tersemat dan dapat digunakan baik untuk menggambarkan layanan penuh, terdiri dari banyak sumber daya dependen, dan untuk menggambarkan masing-masing komponen independen. Sebagai contoh, grafik
stable / gitlab-ce menjelaskan solusi lengkap
menggunakan grafik redis independen dan postgresql.
Bagan dapat ditetapkan jumlah kali yang tidak terbatas di cluster yang sama. Dengan demikian, deskripsi logika roll-out dari aplikasi di lingkungan yang berbeda dapat dan harus disimpan pada grafik yang sama.
Sisi klien Helm bertanggung jawab untuk membuat bagan dan meneruskan parameter pengguna ke komponen Tiller yang terletak di kluster Kubernetes. Pada gilirannya, Tiller bertanggung jawab atas siklus hidup dari contoh bagan yang diluncurkan, rilis.
(Untuk berjaga-jaga, izinkan saya mengingatkan Anda bahwa pembaruan besar berikutnya untuk Helm - versi 3 - tidak lagi menggunakan Tiller.)Dan sekarang - hal pertama yang pertama.
Instalasi dan Peningkatan
Helm mengharuskan Kubernetes bekerja. Anda dapat menggunakan
Minikube yang diinstal secara lokal
(lihat juga โ Memulai Kubernet menggunakan Minikube โ) atau cluster lain yang tersedia.
Mari kita mulai dengan instalasi klien: pilih
rilis , unduh dan bongkar arsip untuk sistem Anda, transfer file yang dapat dieksekusi ...
$ curl https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz | tar -zxv $ sudo mv linux-amd64/helm /usr/local/bin/helm
Selanjutnya, instal Tiller di kluster. Secara default, Tiller dipasang di
kubectl
konteks kubectl
(
kubectl config current-context
), di
namespace kube-system
, tetapi ini dapat diubah menggunakan opsi dan variabel lingkungan yang sesuai - mereka dijelaskan dalam bantuan (
helm init --help
). Mari kita selesaikan instalasi dan lihat sumber daya yang dibuat di kluster:
$ helm init $HELM_HOME has been configured at /home/habr/.helm. (Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.) Happy Helming! $ kubectl get all --selector=name=tiller --namespace kube-system NAME READY STATUS RESTARTS AGE po/tiller-deploy-df4fdf55d-h5mvh 0/1 Running 0 5s NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/tiller-deploy 10.107.191.68 <none> 44134/TCP 5s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/tiller-deploy 1 1 1 0 5s NAME DESIRED CURRENT READY AGE rs/tiller-deploy-df4fdf55d 1 1 0 5s
Sekarang Tiller dipasang di cluster dan siap untuk manajemen rilis, interaksi dengan API Kubernetes.
Catatan : Selama instalasi dan peningkatan (opsi --upgrade
) Tiller, Anda dapat menentukan gambar tertentu daripada menggunakan rilis stabil terbaru secara default. Nama gambar sewenang-wenang ditentukan oleh opsi --tiller-image
, dan dengan opsi --canary-image
, --canary-image
akan digunakan ketika Tiller diluncurkan. Gambar kenari memungkinkan Anda untuk menggunakan anakan, yang versinya sesuai dengan cabang utama.Data layanan disimpan dalam sebuah cluster dalam sumber daya khusus,
ConfigMaps
, sehingga menghapus dan menginstal ulang Tiller tidak menyebabkan hilangnya data dari rilis yang diinstal sebelumnya.
Bagan Gudang
Chart Repository - Server HTTP untuk menyimpan dan mendistribusikan grafik. Informasi tentang grafik dalam repositori disimpan dalam file
index.yaml
. Ini juga menunjukkan dari mana setiap bagan dapat diambil. Paling sering, grafik disimpan dengan file
index.yaml
, tetapi tidak ada yang mencegah mereka ditempatkan di server lain. Biasanya struktur file turun ke bentuk datar:
. โโโ index.yaml โโโ artifactory-7.3.0.tgz โโโ docker-registry-1.5.2.tgz ... โโโ wordpress-2.1.10.tgz
Secara default, Helm menggunakan
repositori grafik Kubernetes resmi . Ini berisi bagan terkini yang dirancang dengan cermat untuk memecahkan banyak masalah yang diterapkan. Repositori ini disebut
stable :
$ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com
Jika perlu,
membuat repositori Anda sendiri tidak akan menjadi masalah. Persyaratan server minimal, jadi, seperti kebanyakan repositori bagan publik, ini dapat di-host di Halaman GitHub. Anda dapat membaca lebih lanjut tentang alat dan langkah-langkah yang diperlukan untuk ini dalam
dokumentasi .
Saat menggunakan repositori grafik, mereka dapat ditambahkan dan dihapus. Agar versi bagan menjadi terbaru, Anda harus memperbarui indeks secara berkala. Saya akan memberikan contoh untuk repositori
bitnami publik, yang sebagian besar grafiknya digunakan dalam repositori Helm resmi:
$ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories $ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "bitnami" chart repository ...Successfully got an update from the "stable" chart repository Update Complete. Happy Helming! $ helm repo remove bitnami "bitnami" has been removed from your repositories
Berikutnya -
cari melalui repositori. Panggilan
helm search
tanpa argumen menunjukkan semua grafik yang tersedia:
$ helm search NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.0 2.1.1 Scales worker nodes within agent pools stable/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes stable/anchore-engine 0.2.1 0.2.4 Anchore container analysis and policy evaluation engine s... stable/apm-server 0.1.0 6.2.4 The server receives data from the Elastic APM agents and ... stable/ark 1.2.1 0.9.1 A Helm chart for ark stable/artifactory 7.3.0 6.1.0 Universal Repository Manager supporting all major packagi... ... stable/weave-cloud 0.2.2 0.2.0 Weave Cloud is a add-on to Kubernetes which provides Cont... stable/weave-scope 0.9.3 1.6.5 A Helm chart for the Weave Scope cluster visualizer. stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. stable/xray 0.4.1 2.3.0 Universal component scan for security and license invento... stable/zeppelin 1.0.1 0.7.2 Web-based notebook that enables data-driven, interactive ... stable/zetcd 0.1.9 0.0.3 CoreOS zetcd Helm chart for Kubernetes
Di bidang
keywords
opsional di
Chart.yaml
pengembang menentukan tag yang digunakan untuk menyederhanakan pencarian di repositori grafik:
$ helm search web NAME CHART VERSION APP VERSION DESCRIPTION stable/cerebro 0.3.1 0.8.1 A Helm chart for Cerebro - a web admin tool that replaces... stable/chronograf 0.4.5 1.3 Open-source web application written in Go and React.js th... stable/jasperreports 2.0.4 7.1.0 The JasperReports server can be used as a stand-alone or ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/kubernetes-dashboard 0.7.2 1.8.3 General-purpose web UI for Kubernetes clusters stable/odoo 2.0.7 11.0.20180815 A suite of web based open source business apps. stable/phabricator 2.1.9 2018.34.0 Collection of open source web applications that help soft... stable/redmine 4.1.0 3.4.6 A flexible project management web application. stable/rethinkdb 0.1.4 0.1.0 The open-source database for the realtime web stable/schema-registry-ui 0.1.0 v0.9.4 This is a web tool for the confluentinc/schema-registry i... stable/superset 0.1.2 0.24.0 Apache Superset (incubating) is a modern, enterprise-read... stable/testlink 2.0.3 1.9.17 Web-based test management system that facilitates softwar... stable/tomcat 0.1.0 7 Deploy a basic tomcat application server with sidecar as ... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. ... $ helm search cms blog NAME CHART VERSION APP VERSION DESCRIPTION stable/drupal 1.1.3 8.5.6 One of the most versatile open source content management ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites
Catatan: Saat menggunakan perintah helm search
, Anda mungkin menghadapi operasi beberapa filter yang tidak stabil: ketersediaan hasilnya tergantung pada urutan indikasi dan jumlah filter.Setelah lingkaran pencarian mempersempit ke beberapa opsi, Anda dapat melanjutkan ke analisis yang lebih rinci dari grafik - menggunakan perintah
helm inspect
. Ini menampilkan isi file grafik
Chart.yaml
,
values.yaml
dan
README.md
. Setiap bagian dapat ditampilkan secara individual dengan argumen yang sesuai:
chart
,
values
dan
readme
.
Dalam repositori resmi, bagan didokumentasikan dengan indah dan berisi contoh penggunaan, dan beberapa bagan bahkan memiliki konfigurasi siap pakai untuk
produksi . Sebagai contoh,
readme
baik disediakan oleh
stable / wordpress (untuk outputnya di konsol, lihat helm inspect readme stable/wordpress
) .
Pencarian adalah cara yang baik untuk menemukan paket yang terjangkau. Setelah paket ditemukan, Anda dapat menggunakannya untuk menginstal aplikasi di cluster.
Aplikasi pertama
Misalnya, bagan
stabil / wordpress yang sudah disebutkan dipilih.
Ini menggunakan parameter yang dijelaskan dalam file
values.yaml
. Anda dapat mengganti parameter dalam file YAML dan kemudian mentransfer file ini selama instalasi (opsi
-f
,
--values
). Selain itu, mereka dapat diganti secara langsung pada baris perintah (opsi
--set
,
--set-string
dan
--set-file
). Semua opsi tersedia untuk digunakan beberapa kali secara sewenang-wenang; pada saat yang sama, mengesampingkan pada baris perintah didahulukan dari file dengan parameter.
Saat mengatur grafik, Anda dapat mengatur nama rilis dengan opsi
--name
atau menggunakan nama acak yang dihasilkan oleh Helm.
Atur bagan
konfigurasi untuk produksi , ubah nama blog, nonaktifkan penyimpanan data WordPress di
PersistentVolumeClaim
(untuk informasi lebih lanjut tentang penyimpanan persisten, lihat dokumentasi Kubernetes ) :
$ curl https://raw.githubusercontent.com/helm/charts/master/stable/wordpress/values-production.yaml --output values-production.yaml $ helm install --name habr --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress NAME: habr LAST DEPLOYED: Fri Aug 31 15:17:57 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 0s habr-wordpress Opaque 2 0s ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 0s habr-mariadb 1 0s habr-mariadb-tests 1 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 0s habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 0s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 3 3 0 0s ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 0s ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-7955b95fd-hh7b9 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-tgsxk 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-xjz74 0/1 ContainerCreating 0 0s habr-mariadb-0 0/1 ContainerCreating 0 0s NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Jika Anda bekerja dengan kluster yang lengkap, Anda dapat mengikuti rekomendasi dari blok
CATATAN di atas. Jika Anda memiliki Minikube, buka situs di browser sebagai berikut:
$ minikube service habr-wordpress Waiting, endpoint for service is not ready yet... Opening kubernetes service default/habr-wordpress in default browser...
Selamat, aplikasi ini ada di cluster!

Grafik terperinci dengan WordPress muncul di daftar semua rilis Helm:
$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 1 Fri Aug 31 15:17:57 2018 DEPLOYED wordpress-2.1.10 4.9.8 default
Langkah selanjutnya adalah memperbarui rilis kami dan mengubah gambar dengan blog. Sebagai contoh, tag lain dari repositori Docker yang sama (
4.9.8-ol-7
) akan digunakan:
$ helm upgrade habr --set "image.tag=4.9.8-ol-7" --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress Release "habr" has been upgraded. Happy Helming! LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 3m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 3m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 0 3m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 3m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 3m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 0s habr-wordpress-66f4fd6b74-mf6vj 0/1 Pending 0 0s habr-wordpress-7955b95fd-hh7b9 1/1 Running 2 3m habr-wordpress-7955b95fd-tgsxk 1/1 Running 2 3m habr-wordpress-7955b95fd-xjz74 0/1 Terminating 2 3m habr-mariadb-0 1/1 Running 0 3m ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 3m habr-wordpress Opaque 2 3m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 3m habr-mariadb 1 3m habr-mariadb-tests 1 3m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Harap dicatat bahwa
ketika memperbarui Anakan membandingkan bagan yang diterima dengan parameter dengan yang terakhir disimpan dan melakukan permintaan yang sesuai di Kubernetes API, dan status
saat ini dari sumber daya rilis tidak diperhitungkan . Penting untuk memahami fitur ini dan tidak membuat kesalahan:
- Pembaruan tidak berbeda dari instalasi: klien Helm mengirimkan grafik Tiller bersama dengan parameter, jadi Anda harus berhati-hati dan ingat untuk menentukan parameter dan file dengan parameter yang ditetapkan selama instalasi (atau selama pembaruan sebelumnya) dan yang tidak boleh diabaikan. Pada contoh di atas, ini adalah
--set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml
--set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml
. - Aplikasi yang diluncurkan menggunakan Helm hanya boleh dilayani menggunakan Helm: perubahan manual yang dibuat menggunakan
kubectl
tidak akan diperhitungkan oleh Helm dan dapat menyebabkan konsekuensi yang tidak dapat diubah.
Oleh karena itu kesimpulan logis:
proses harus otomatis , dan perubahan harus dilakukan hanya melalui komit ke repositori Git, mengubah file grafik dan file konfigurasi CI.
Status komponen rilis aplikasi dalam sebuah cluster selalu dapat diperiksa sebagai berikut:
$ helm status habr LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 4m habr-wordpress Opaque 2 4m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 4m habr-mariadb 1 4m habr-mariadb-tests 1 4m ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 4m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 4m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 3 4m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 4m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 4m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 1m habr-wordpress-66f4fd6b74-mf6vj 1/1 Running 0 1m habr-wordpress-7955b95fd-hh7b9 1/1 Running 3 4m habr-wordpress-7955b95fd-tgsxk 1/1 Running 3 4m habr-mariadb-0 1/1 Running 1 4m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Helm memungkinkan Anda
memutar kembali ke revisi rilis spesifik . Saat ini ada dua revisi:
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 DEPLOYED wordpress-2.1.10 Upgrade complete
Kembalikan aplikasi ke keadaan semula:
$ helm rollback habr 1 Rollback was a success! Happy Helming!
Sekarang riwayat revisi telah diisi ulang dengan satu catatan:
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DEPLOYED wordpress-2.1.10 Rollback to 1
Artikel hampir berakhir dan tidak diperlukan lagi?
$ helm delete habr release "habr" deleted
Apakah itu benar-benar dihapus? ..
Perintah menghapus sumber daya Kubernetes yang terkait dengan rilis, tetapi bukan rilis itu sendiri . Semua informasi tentang rilis tetap tersedia, termasuk riwayatnya:
$ helm list --all NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 4.9.8 default
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 Deletion complete
Catatan : Sesuai rencana, rilis jarak jauh dapat diputar kembali ke versi sebelumnya, tetapi dalam versi terbaru fitur ini tidak berfungsi - lihat edisi # 3722 untuk detailnya.Untuk menghapus rilis sepenuhnya, gunakan opsi
--purge
:
$ helm delete --purge habr release "habr" deleted
Meringkas
Artikel ini berbicara tentang arsitektur dasar Helm 2, komponen dan fungsinya, serta primitif dasar, bagan, rilis dan repositori bagan. Kami memasang Helm di kluster Kubernetes dan memperoleh pemahaman tentang siklus hidup rilis dan perintah dasar untuk bekerja dengannya.
Materi berikut dari seri ini akan dikhususkan untuk topik
membuat bagan Anda sendiri - di dalamnya saya akan berbicara tentang struktur bagan, standardisasi dan alat debugging.
DIPERBARUI : Artikel baru tersedia di
tautan ini .
PS