Helm3パッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールする方法
序章
Helm は、Kubernetesのパッケージマネージャーであり、開発者とオペレーターがKubernetesクラスターでアプリケーションをより簡単に構成およびデプロイできるようにします。
Helmパッケージはchartsと呼ばれ、ユーザーの最小限の労力で特定のアプリをデプロイおよび構成するリソース定義のテンプレートが含まれています。 テンプレートを使用すると、実際のグラフを変更せずに変数定義を渡すことで、グラフ、その設定、および動作を管理できます。 カスタマイズされたリソース定義、およびすでにデプロイされている定義への変更により、Helmは自動的に管理します。 カスタマイズ可能な展開されたチャートは、リリースと呼ばれます。
このチュートリアルでは、Helm 3をセットアップし、チャートとリリースをインストール、アップグレード、ロールバック、および管理する方法を学習します。 また、独自のグラフを作成してパッケージ化する方法や、すぐにインストールできるグラフをホストするグラフリポジトリを設定する方法についても学びます。
前提条件
-
ロールベースのアクセス制御(RBAC)が有効になっているKubernetesクラスター。 リリースの詳細については、ヘルムリリースページを確認してください。
-
The
kubectl
ローカルマシンにインストールされ、クラスターに接続するように構成されたコマンドラインツール。 インストールについてもっと読むことができますkubectl
公式ドキュメント。次のコマンドを使用して、接続をテストできます。
- kubectl cluster-info
エラーが発生しない場合は、クラスターに接続しています。 で複数のクラスターにアクセスする場合
kubectl
、以下を実行して、正しいクラスターコンテキストを選択したことを確認してください。- kubectl config get-contexts
出力には、使用可能な構成が一覧表示されます。
OutputCURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminここでは、アスタリスク(
*
)は、に接続されていることを示しますdo-fra1-helm3-example
集まる。 クラスタを切り替えるには、次を実行します。- kubectl config use-context context-name
正しいクラスターに接続したら、ステップ1に進んでHelmのインストールを開始します。
ステップ1—Helm3をインストールする
このセクションでは、公式に提供されているシェルスクリプトを使用して Helm3をインストールします。
に移動することから始めます /tmp
、次を実行してインストールスクリプトを保存します。
- cd /tmp
次のコマンドでスクリプトをダウンロードします。
- curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
あなたは調べることができます get_helm.sh
安全を確保するためにテキストエディタで。
アクセス許可を次のように設定して、実行可能にします。
- chmod u+x get_helm.sh
最後に、それを実行してHelm3をインストールします。
- ./get_helm.sh
次のような出力が表示されます。
OutputDownloading 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/helm
マシンにHelm3がインストールされています。 次に、チャートリポジトリとその使用方法について学習します。
ステップ2—チャートリポジトリの設定
ヘルムチャートは、誰でもホストできるチャートリポジトリに保存されます。 デフォルトでは、Helm3にはリポジトリが事前構成されていません。 Helmの以前のバージョンには、中央のキュレートされたチャートリポジトリが含まれていました。 ただし、Helm 3の設計は、独自のリポジトリを管理するチャート開発者に意図的に進化し、より多くの自由とより迅速なリリースを可能にしました。 つまり、使用するチャートごとに、ホスティングリポジトリをHelmインストールに追加する必要があります。
適切なリポジトリを見つけるために、Helmチャートとそのリポジトリをカタログ化するCNCFによって管理されるオープンソースWebサイトであるArtifactHub.ioを使用できます。 また、他のCNCFプロジェクトが使用する人気のある便利なチャートを追跡するため、 stable
以前のバージョンのHelmが機能していたリポジトリ。 Nginxの侵入や監視ツールなどの一般的なプロジェクトの場合、これは優れた情報源です。
ホームページからインストールしたいチャートを検索できます。 探している nginx
それに関連するすべてのインデックス付きチャートが表示されます。
Kubernetesチームが管理するコミュニティエディションをインストールします。 検索する ingress-nginx
結果でそれを見つけるために。 そのページにアクセスするには、それを選択します。
各チャートには、そのリポジトリをインストールに追加してチャートをインストールするためのコマンドと組み合わせて、その機能の詳細を説明する必要があります。 そうでない場合でも、ページの右側にある INSTALL ボタンを押すと、必要なコマンドを取得できます。
コマンドの横にある青いボタンをクリックして、コマンドをコピーできます。 最初のコマンドに対してこれを行い、それを実行します。
- helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Helmにリポジトリを追加するには、次のコマンドを実行します helm repo add
. 受け入れるパラメータは、リポジトリの名前とその場所です。
出力は次のようになります。
Output"ingress-nginx" has been added to your repositories
新しいリポジトリを追加するときは、次のコマンドを実行して、リポジトリに何が含まれているかをHelmに通知する必要があります。
- helm repo update
更新が成功したことを示す次の出力が表示されます。
OutputHang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
このステップでは、ArtifactHubとその機能について学習しました。 Helmのインストールに新しいリポジトリも追加しました。 次のステップでは、ヘルムチャートをインストールします。
ステップ3—ヘルムチャートのインストール
前のセクションでは、のリポジトリを追加しました ingress-nginx
チャート。 これで、クラスターにインストールします。
各チャートには、動作を変更するために設定できる構成変数があります。 これらの変数は、というファイルに保存されます values.yaml
それはチャートの一部です。 チャートをマシンにダウンロードしていない限り、チャートを表示するには次のコマンドを実行する必要があります。
- helm show values chart_name
の利用可能な変数を表示するには ingress-nginx
、 交換 chart_name
:
- helm show values ingress-nginx/ingress-nginx
出力は長くなり、内容が表示されます values.yaml
為に ingress-nginx
.
チャートをインストールするには、次を使用できます helm install
:
- helm install release_name repository/chart_name
リリースはチャートのデプロイされたインスタンスであり、ここではそれを呼び出しています ingress-nginx
.
このコマンドは、変数のデフォルト値を使用してチャートをクラスターにインストールします。 それらのいくつかを変更したい場合は、を使用して新しい変数値を渡すことができます --set
:
- helm install ingress-nginx/ingress-nginx --set variable_name=variable_value
繰り返すことができます --set
必要な数の変数に対して。 今はカスタマイズしないので、次のコマンドを実行してそのままインストールします。
- helm install ingress-nginx ingress-nginx/ingress-nginx
出力は次のようになります。
OutputNAME: 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
指定したリリースの名前に対応します。 Helmには、リリースステータスやデプロイされた名前空間などの一般的な情報も一覧表示されます。 The NOTES
セクションはチャートによって異なり、通常、チャートのリソースを使用する際のクイックスタートガイダンスまたはいくつかの一般的な落とし穴についての警告が含まれています。 ここでは、ロードバランサーが作成中であり、完了するまでに時間がかかる場合があることに注意してください。
展開されたチャートを確認するには、 helm list
:
- helm list
あなたはそれを見つけるでしょう ingress-nginx
現時点で展開されている唯一のチャートです。
OutputNAME 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.0
次のコマンドを実行すると、クラスター内にあるサービスを見つけることができます。
- kubectl get services
出力は次のようになります。
OutputNAME 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 83m
クラスタにリリースをデプロイしたので、デプロイ中にその構成を変更します。
ステップ4—リリースのアップグレード
リリースがデプロイされると、構成を変更する必要があるときに、リリースを破棄して完全に再デプロイする必要はありません。 あなたは使用することができます helm upgrade
チャートの新しいバージョンでリリースをアップグレードするか、新しい設定を設定するコマンド。
The ingress-nginx
チャートは controller.replicaCount
デプロイされたコントローラーポッドの数を制御する変数。 デフォルトでは1に設定されています。これは、使用可能なポッドを一覧表示することで確認できます。
- kubectl get pods
次の1つしかないことがわかります。
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
冗長性のためにさらに展開したい場合(たとえば、3つ)、次のことができます。 upgrade
リリースし、変数をに設定します 3
実行することによって:
- helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values
あなたもパスインします --reuse-values
、これは、展開されたリリースに基づいて変更を行い、以前の構成を保持するようにHelmに指示します。
出力では、Helmはリビジョンをバンプして、リリースがアップグレードされたことを示します。
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
次のコマンドを実行して、使用可能なポッドを一覧表示できます。
- kubectl get pods
1つではなく3つのポッドがリストされています。
OutputNAME 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 18s
次に、変更をロールバックし、リリースを完全に削除します。
ステップ5—リリースのロールバックと削除
あなたが upgrade
リリースの場合、そのリビジョン番号が増加します。 内部的には、Helmはリリースのすべてのリビジョンを保存し、必要に応じて以前のリビジョンに戻すことができます。
ポッドの数を1つに戻すには、次のコマンドを実行します。 helm upgrade
小さな変更なので、もう一度手動で番号を設定します。 ただし、多くの変数を含む大きなグラフを操作する場合、手動で元に戻すことは不可能であり、自動化する必要があります。
リリースをロールバックするには、 helm rollback
:
- helm rollback release_name release_revision
これを使用して、行った変更を元に戻すことができます ingress-nginx
リビジョンにロールバックする 1
:
- helm rollback ingress-nginx 1
アクションが成功したことを示す次の出力が表示されます。
OutputRollback was a success! Happy Helming!
リリースを一覧表示することで、現在のリビジョンを確認できます。
- helm list
リビジョンが今であることがわかります 3
、ではなく 1
:
OutputNAME 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.0
Helmは、ロールバックを含むすべての変更をリリースの新しいリビジョンと見なします。 そのリビジョンを確認できます 3
次のコマンドを実行してデプロイされたポッドの数を確認することにより、最初のポッドと同じになります。
- kubectl get pods
次の1つしかないことがわかります。
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
リリースとそのすべてのリビジョンを削除するには、次を使用できます helm delete
:
- helm delete release_name
もう必要ないので削除 ingress-nginx
次のコマンドを実行します。
- helm delete ingress-nginx
出力は次のようになります。
Outputrelease "ingress-nginx" uninstalled
リリースをリストして、リリースがないことを確認できます。
- helm list
出力テーブルには行がありません。
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
リリースが削除されたので、将来の展開でその名前を再利用できます。
ステップ6—(オプション)カスタムチャートの作成
このオプションの手順では、カスタムチャートを作成する方法、リソース定義を配置する場所、およびさらに配布するためにパッケージ化する方法を学習します。
と呼ばれる新しいグラフを作成します example-chart
. 次のコマンドを実行して作成します。
- helm create example-chart
これにより、という新しいディレクトリが作成されます example-chart
次のファイルと構造を使用します。
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml
チャートがターゲットクラスターにインストールするリソース定義は、 templates
ディレクトリ。 開始点としてHelmが作成したデフォルトのものは、Nginx入力コントローラーをデプロイします。 ファイル拡張子はYAMLですが、Goのテンプレート構文を使用して、渡すことができる公開変数を介してカスタマイズ可能な状態を維持します。 内容を表示して確認できます service.yaml
実行することによって:
- cat example-chart/templates/service.yaml
二重中括弧で囲まれた値を生成するためのテンプレートディレクティブがあることがわかります。
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 }}
参照される変数はユーザーに公開され、で定義されます values.yaml
. The NOTES
テキストHelmは、展開がに保存された後に表示されます NOTES.txt
、およびテンプレート化されています。 展開されているソフトウェアの名前、バージョン、バージョンなどのチャートメタデータは、 Chart.yaml
:
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"
Helmが展開するものを確認するには、渡すことができます --dry-run
と --debug
に helm install
チャートディレクトリを指す:
- helm install example-chart --dry-run --debug ./example-chart
出力は長くなり、クラスターに適用されるすべての最終的なリソース定義が含まれます。 チャートで作業している間、次を使用できます helm upgrade
新しいバージョンをKubernetesにプッシュします。
完成したチャートを共有するときは、次のコマンドを実行して配布用にパッケージ化できます。
- helm package ./example-chart
出力は次のようになります。
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
パッケージ化されたチャートは、追加されたリポジトリのチャートと同じようにインストールできます。
- helm install example-chart example-chart-0.1.0.tgz
このステップでは、カスタムチャートを作成し、それを展開しました。 また、パッケージ化して、その構造について学習しました。
結論
これで、Helmを使用してKubernetesクラスターにデプロイされたソフトウェアをインストールおよびアップグレードする方法をマスターしました。 グラフリポジトリを追加し、それらが重要である理由と、ArtifactHubがそれらを見つけるのにどのように役立つかを学びました。 また、新しいカスタムチャートを作成し、リリースリビジョンと、必要に応じてロールバックする方法について学習しました。
カスタムチャートの作成の詳細については、公式ガイドをご覧ください。