giriiş
Helm, geliştiricilerin ve operatörlerin Kubernetes kümelerinde uygulamaları kolayca yapılandırmasına ve dağıtmasına olanak tanıyan bir Kubernetes paket yöneticisidir.
Helm paketlerine grafik adı verilir ve belirli uygulamaları minimum kullanıcı çabasıyla dağıtıp yapılandıran kaynak tanımları şablonları içerir. Şablonlar sayesinde, grafiği, ayarlarını ve davranışını, grafiğin kendisini değiştirmeden değişken tanımları geçirerek yönetebilirsiniz. Helm, özelleştirilmiş kaynak tanımlarını ve önceden dağıtılmış tanımlardaki değişiklikleri otomatik olarak yönetir. Olası özelleştirmelerle dağıtılan grafiğe sürüm denir.
Bu eğitimde, Helm 3'ü kuracak ve grafikleri ve sürümleri nasıl yükleyeceğinizi, yükselteceğinizi, geri yükleyeceğinizi ve yöneteceğinizi öğreneceksiniz. Ayrıca, kendi grafiklerinizi oluşturup paketlemeyi ve hemen yükleyebileceğiniz grafikleri barındıran grafik depoları oluşturmayı da öğreneceksiniz.
Ön koşullar
- Rol tabanlı erişim denetimi (RBAC) etkinleştirilmiş bir Kubernetes kümesi.
- Kubectl komut satırı aracı yerel makinenize yüklenir ve kümenize bağlanacak şekilde yapılandırılır.
- Bağlantınızı aşağıdaki komutla test edebilirsiniz:
kubectl cluster-info- Herhangi bir hata almıyorsanız, kümeye bağlısınız demektir. kubectl ile birden fazla kümeye erişiyorsanız, aşağıdaki komutu çalıştırarak doğru küme bağlamını seçtiğinizden emin olun:
kubectl config get-contexts- Çıktıda kullanılabilir ayarlar listelenir:
Output CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin- Burada, yıldız işareti (*), do-fra1-helm3-example kümesine bağlı olduğumuzu gösterir. Kümeler arasında geçiş yapmak için şunu çalıştırın:
kubectl config use-context context-name- Doğru kümeye bağlandıktan sonra Helm'i yüklemeye başlamak için 1. Adıma geçin.
Adım 1 – Helm 3'ü yükleyin
Bu bölümde Helm 3'ü resmi olarak sağlanan kabuk betiğini kullanarak yükleyeceksiniz.
Öncelikle /tmp dizinine gidin, kurulum betiğini şu komutu çalıştırarak bulabilirsiniz:
cd /tmpAşağıdaki komutla betiği indirin:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3Güvenli olduğundan emin olmak için get_helm.sh dosyasını metin düzenleyicinizde kontrol edebilirsiniz.
İzinlerini aşağıdaki şekilde ayarlayarak çalıştırılabilir hale getirin:
chmod u+x get_helm.shSon olarak Helm 3'ü kurmak için şunu çalıştırın:
./get_helm.shAşağıdakine benzer bir çıktı alacaksınız:
Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helmBilgisayarınıza Helm 3'ü kurdunuz. Şimdi grafik depoları ve bunların nasıl kullanılacağı hakkında bilgi edineceksiniz.
Adım 2 – Grafik depolarının kurulumu
Helm grafikleri, herkes tarafından barındırılabilen grafik depolarında saklanır. Varsayılan olarak, Helm 3 herhangi bir depoyla önceden yapılandırılmamıştır. Helm'in önceki sürümleri merkezi bir grafik deposu içeriyordu. Ancak, Helm 3'ün tasarımı, grafik geliştiricilerinin kendi depolarını yönetmelerine yönelik olarak, daha fazla özgürlük ve daha hızlı sürümler sağlayacak şekilde tasarlanmıştır. Bu, kullanmak istediğiniz her grafik için, barındırma deposunu Helm kurulumunuza eklemeniz gerektiği anlamına gelir.
Doğru depoyu bulmanıza yardımcı olması için, CNCF tarafından yönetilen ve Helm grafiklerini ve depolarını kataloglayan açık kaynaklı bir web sitesi olan ArtifactHub.io'yu kullanabilirsiniz. Ayrıca, diğer CNCF projelerinin kullandığı popüler ve kullanışlı grafikleri de takip eder, bu nedenle önceki Helm sürümlerinin çalıştığı kararlı depodan farklıdır. Nginx günlükleri veya izleme araçları gibi yaygın projeler için harika bir kaynaktır.
Yüklemek istediğiniz grafiği ana sayfadan arayabilirsiniz. Nginx araması, onunla ilgili tüm indekslenmiş grafikleri gösterecektir.
Kubernetes ekibi tarafından yönetilen topluluk sürümünü yükleyeceksiniz. Sonuçlarınızda ingress-nginx ifadesini bulmak için arama yapın. Sayfaya erişmek için seçin.

Her grafikte, görevi ayrıntılı olarak açıklayan bir açıklama ve grafik kurulumuna ve deposunun nasıl ekleneceğiyle ilgili talimatlar bulunmalıdır. Aksi takdirde, sayfanın sağ tarafındaki KURULUM düğmesine basarak gerekli talimatlara ulaşabilirsiniz.
Kopyalamak için komutun yanındaki mavi butona tıklayabilirsiniz. İlk komut için şunu yapın ve çalıştırın:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginxHelm'e bir depo eklemek için helm repo add komutunu çalıştırırsınız. Kabul ettiği parametreler deponun adı ve konumudur.
Çıktı şu şekilde olacaktır:
Output
"ingress-nginx" has been added to your repositoriesYeni bir depo eklediğinizde, Helm'e şu komutu çalıştırarak deponun ne içerdiğini bildirmeniz gerekir:
helm repo updateGüncellemenin başarılı olduğunu gösteren aşağıdaki çıktıyı alacaksınız:
Output
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈Bu noktada, ArtifactHub'ı ve sunduklarını öğrendiniz. Ayrıca Helm kurulumunuza yeni bir depo eklediniz. Ardından, Helm grafiğini kuracaksınız.
Adım 3 – Helm Chart Kurulumu
Önceki bölümde ingress-nginx grafik deposunu eklediniz. Şimdi bunu kümenize kuracaksınız.
Her grafiğin, davranışını değiştirmek için ayarlayabileceğiniz yapılandırma değişkenleri vardır. Bu değişkenler, grafiğin bir parçası olan values.yaml adlı bir dosyada saklanır. Grafiği cihazınıza indirmediyseniz, görüntülemek için aşağıdaki komutu çalıştırmanız gerekir:
helm show values chart_nameIngress-nginx için kullanılabilir değişkenleri görüntülemek için chart_name'i şu şekilde değiştirin:
helm show values ingress-nginx/ingress-nginxÇıktı uzun olacak ve ingress-nginx için values.yaml dosyasının içeriğini gösterecektir.
Tabloyu yüklemek için install komutunu kullanabilirsiniz:
helm install release_name repository/chart_nameBir sürüm, grafiğin dağıtılmış bir örneğidir ve burada buna ingress-nginx denir.
Bu komut, kümenizdeki değişkenler için varsayılan değerlerle grafiği yükleyecektir. Bazılarını değiştirmek isterseniz, –set komutunu kullanarak yeni değişken değerleri geçirebilirsiniz:
helm install ingress-nginx/ingress-nginx --set variable_name=variable_value
İhtiyacınız olan tüm değişkenler için –set komutunu tekrarlayabilirsiniz. Şimdilik özelleştirmeyeceğimiz için, şu komutu çalıştırarak olduğu gibi kurun:
helm install ingress-nginx ingress-nginx/ingress-nginxÇıktı aşağıdakine benzer olacaktır:
Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...NAME'in belirttiğiniz sürüm adıyla eşleştiğini unutmayın. Helm ayrıca sürüm durumu ve dağıtıldığı ad alanı gibi genel bilgileri de listeler. NOTLAR bölümü grafikler arasında değişiklik gösterir ve genellikle hızlı başlangıç ipuçları içerir veya grafik kaynaklarını kullanırken karşılaşılan bazı yaygın sorunlar hakkında uyarılar verir. Burada, Yük Dengeleyici'nin oluşturulmakta olduğu ve tamamlanmasının biraz zaman alabileceği belirtilir.
Dağıtılan grafikleri kontrol etmek için list komutunu kullanın:
helm listŞu anda dağıtılan tek grafiğin ingress-nginx olduğunu fark edeceksiniz:
Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0Aşağıdaki komutu çalıştırarak kümesinde bulunan servisleri bulabilirsiniz:
kubectl get servicesÇıktı şuna benzer olacaktır:
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83mArtık kümenize bir sürüm dağıttığınıza göre, dağıtım sırasında yapılandırmasını değiştireceksiniz.
Adım 4 – Bir sürümü yükseltin
Bir sürüm çalışmaya başladıktan sonra, yapılandırmasını değiştirmeniz gerektiğinde onu yok edip yeniden oluşturmanız gerekmez. Sürümü, grafiğin yeni bir sürümüyle yükseltmek veya yeni ayarlar yapmak için yükseltme komutunu kullanabilirsiniz.
Ingress-nginx diyagramı, dağıtılan denetleyici pod'larının sayısını kontrol eden controller.replicaCount değişkenini gösterir. Varsayılan olarak, kullanılabilir pod'ları listeleyerek doğrulayabileceğiniz bir değere ayarlanmıştır:
kubectl get podsSadece bir tane olduğunu fark edeceksiniz:
Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12mYedeklilik için daha fazlasının dağıtılmasını istiyorsanız (örneğin, üç), sürümü yükseltebilir ve değişkeni şu şekilde çalıştırarak 3 olarak ayarlayabilirsiniz:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-valuesAyrıca, Helm'e değişikliklerinizi dağıtılan sürümün üzerine yerleştirmesini ve önceki yapılandırmayı korumasını söyleyen --reuse-values komutunu da geçirirsiniz.
Çıktıda Helm, sürümün yükseltildiğini belirtmek için düzeltmeler yapar:
Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...Aşağıdakileri çalıştırarak kullanılabilir pod'ları listeleyebilirsiniz:
kubectl get podsBir yerine üç adet baklanın listelendiğini göreceksiniz:
Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18sDaha sonra değişiklikleri geri alıp yayını tamamen sileceksiniz.
Adım 5 – Bir kopyayı geri yükleyin ve silin
Bir sürümü yükselttiğinizde, revizyon numarası artar. Helm, bir sürümün tüm sürümlerini dahili olarak depolar ve gerektiğinde önceki bir sürüme geri dönmenize olanak tanır.
Pod sayısını tek bir sayıya geri döndürmek için, yükseltme komutunu tekrar çalıştırıp sayıyı manuel olarak ayarlayabilirsiniz; bu küçük bir değişikliktir. Ancak, çok sayıda değişken içeren daha büyük grafiklerle çalışırken, manuel geri dönüş mümkün değildir ve otomatik olmalıdır.
Bir sürümü geri yüklemek için restore komutunu kullanın:
helm rollback release_name release_revisionBunu ingress-nginx'te yaptığınız değişiklikleri geri almak için kullanabilirsiniz, sürüm 1'e geri dönerek:
helm rollback ingress-nginx 1İşlemin başarılı olduğunu gösteren aşağıdaki çıktıyı alacaksınız:
Output
Rollback was a success! Happy Helming!Güncel sürümü, sürümleri listeleyerek kontrol edebilirsiniz:
helm listRevizyonun artık 1 değil 3 olduğunu fark edeceksiniz:
Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0Helm, geri alma da dahil olmak üzere her değişikliği bir sürümdeki yeni bir revizyon olarak kabul eder. Dağıtılan pod sayısını şu şekilde kontrol edebilirsiniz:
kubectl get podsSadece bir tane olduğunu fark edeceksiniz:
Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41mBir sürümü ve tüm revizyonlarını silmek için helm delete komutunu kullanabilirsiniz:
helm delete release_nameArtık buna ihtiyacınız olmayacağından, aşağıdaki komutu çalıştırarak ingress-nginx'i kaldırın:
helm delete ingress-nginxÇıktı şu şekilde olacaktır:
Output
release "ingress-nginx" uninstalledHiçbirinin mevcut olmadığından emin olmak için sürümleri listeleyebilirsiniz:
helm listÇıktı tablosunda satır bulunmayacaktır:
Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Artık sürüm silindiğine göre, gelecekteki dağıtımlarda adını yeniden kullanabilirsiniz.
Adım 6 – (İsteğe bağlı) Özel Grafikler Oluşturun
Bu isteğe bağlı adımda, özel bir grafik oluşturmayı, kaynak tanımlarını nereye yerleştireceğinizi ve daha sonraki dağıtım için nasıl paketleyeceğinizi öğreneceksiniz.
sample-chart adında yeni bir grafik oluşturacaksınız. Oluşturmak için aşağıdaki komutu çalıştırın:
helm create example-chartBu, aşağıdaki dosyalar ve yapı ile example-chart adında yeni bir dizin oluşturacaktır:
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yamlGrafiğinizin hedef kümelere yüklediği kaynak tanımları şablon dizinindedir. Helm'in başlangıç noktası olarak oluşturduğu varsayılan tanımları bir Nginx giriş denetleyicisi dağıtır. Dosya uzantıları YAML olsa da, aktarabileceğiniz açık değişkenler aracılığıyla yapılandırılabilir kalmak için Go'nun biçimlendirme sözdizimini kullanırlar. service.yaml dosyasının içeriğini şu komutu çalıştırarak görüntüleyebilirsiniz:
cat example-chart/templates/service.yamlÇift parantezle çevrili değerleri üretmek için biçimlendirme talimatları olduğunu fark edeceksiniz:
OutputapiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "mychart.selectorLabels" . | nindent 4 }}Başvurulan değişkenler kullanıcıya sunulur ve values.yaml dosyasında tanımlanır. Helm NOTES metni, dağıtımdan sonra NOTES.txt dosyasında saklanır ve biçimlendirilir. Adı, sürümü ve dağıtılan yazılımın sürümü gibi grafik meta verileri Chart.yaml dosyasında belirtilir:
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"Helm'in neyi dağıttığını kontrol etmek için, chart dizinini işaret eden helm install komutuna –dry-run ve –debug komutlarını geçirebilirsiniz:
helm install example-chart --dry-run --debug ./example-chartÇıktı uzun olacak ve kümenize uygulanacak tüm son kaynak tanımlarını içerecektir. Grafiğiniz üzerinde çalışırken, yeni sürümleri Kubernetes'e yüklemek için upgrade komutunu kullanabilirsiniz.
Grafiği paylaşmayı bitirdiğinizde, şunu çalıştırarak dağıtıma hazır hale getirebilirsiniz:
helm package ./example-chartÇıktı şu şekilde olacaktır:
Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgzPaketlenmiş grafikler, eklenen depolardaki grafikler gibi kurulabilir:
helm install example-chart example-chart-0.1.0.tgzBu noktada, özel bir grafik oluşturup dağıttınız. Ayrıca, onu paketlediniz ve yapısına aşina oldunuz.
Sonuç
Artık Helm'i kullanarak Kubernetes kümenize dağıtılan yazılımları nasıl yükleyeceğinizi ve yükselteceğinizi biliyorsunuz. Grafik depoları eklediniz ve bunların neden önemli olduğunu ve ArtifactHub'ın bunları bulmanıza nasıl yardımcı olabileceğini öğrendiniz. Ayrıca yeni bir özel grafik oluşturdunuz ve sürüm revizyonlarını ve gerekirse nasıl geri alınacağını öğrendiniz.












