序章

Helm は、Kubernetesのパッケージマネージャーであり、開発者とオペレーターがKubernetesクラスターでアプリケーションをより簡単に構成およびデプロイできるようにします。

Helmパッケージはchartsと呼ばれ、ユーザーの最小限の労力で特定のアプリをデプロイおよび構成するリソース定義のテンプレートが含まれています。 テンプレートを使用すると、実際のグラフを変更せずに変数定義を渡すことで、グラフ、その設定、および動作を管理できます。 カスタマイズされたリソース定義、およびすでにデプロイされている定義への変更により、Helmは自動的に管理します。 カスタマイズ可能な展開されたチャートは、リリースと呼ばれます。

このチュートリアルでは、Helm 3をセットアップし、チャートとリリースをインストール、アップグレード、ロールバック、および管理する方法を学習します。 また、独自のグラフを作成してパッケージ化する方法や、すぐにインストールできるグラフをホストするグラフリポジトリを設定する方法についても学びます。

前提条件

  • ロールベースのアクセス制御(RBAC)が有効になっているKubernetesクラスター。 リリースの詳細については、ヘルムリリースページを確認してください。

  • The kubectl ローカルマシンにインストールされ、クラスターに接続するように構成されたコマンドラインツール。 インストールについてもっと読むことができます kubectl 公式ドキュメント

    次のコマンドを使用して、接続をテストできます。

    1. kubectl cluster-info

    エラーが発生しない場合は、クラスターに接続しています。 で複数のクラスターにアクセスする場合 kubectl、以下を実行して、正しいクラスターコンテキストを選択したことを確認してください。

    1. kubectl config get-contexts

    出力には、使用可能な構成が一覧表示されます。

    Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin

    ここでは、アスタリスク(*)は、に接続されていることを示します do-fra1-helm3-example 集まる。 クラスタを切り替えるには、次を実行します。

    1. kubectl config use-context context-name

正しいクラスターに接続したら、ステップ1に進んでHelmのインストールを開始します。

ステップ1—Helm3をインストールする

このセクションでは、公式に提供されているシェルスクリプトを使用して Helm3をインストールします。

に移動することから始めます /tmp、次を実行してインストールスクリプトを保存します。

  1. cd /tmp

次のコマンドでスクリプトをダウンロードします。

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

あなたは調べることができます get_helm.sh 安全を確保するためにテキストエディタで。

アクセス許可を次のように設定して、実行可能にします。

  1. chmod u+x get_helm.sh

最後に、それを実行してHelm3をインストールします。

  1. ./get_helm.sh

次のような出力が表示されます。

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/helm

マシンにHelm3がインストールされています。 次に、チャートリポジトリとその使用方法について学習します。

ステップ2—チャートリポジトリの設定

ヘルムチャートは、誰でもホストできるチャートリポジトリに保存されます。 デフォルトでは、Helm3にはリポジトリが事前構成されていません。 Helmの以前のバージョンには、中央のキュレートされたチャートリポジトリが含まれていました。 ただし、Helm 3の設計は、独自のリポジトリを管理するチャート開発者に意図的に進化し、より多くの自由とより迅速なリリースを可能にしました。 つまり、使用するチャートごとに、ホスティングリポジトリをHelmインストールに追加する必要があります。

適切なリポジトリを見つけるために、Helmチャートとそのリポジトリをカタログ化するCNCFによって管理されるオープンソースWebサイトであるArtifactHub.ioを使用できます。 また、他のCNCFプロジェクトが使用する人気のある便利なチャートを追跡するため、 stable 以前のバージョンのHelmが機能していたリポジトリ。 Nginxの侵入や監視ツールなどの一般的なプロジェクトの場合、これは優れた情報源です。

ホームページからインストールしたいチャートを検索できます。 探している nginx それに関連するすべてのインデックス付きチャートが表示されます。

Kubernetesチームが管理するコミュニティエディションをインストールします。 検索する ingress-nginx 結果でそれを見つけるために。 そのページにアクセスするには、それを選択します。

各チャートには、そのリポジトリをインストールに追加してチャートをインストールするためのコマンドと組み合わせて、その機能の詳細を説明する必要があります。 そうでない場合でも、ページの右側にある INSTALL ボタンを押すと、必要なコマンドを取得できます。

コマンドの横にある青いボタンをクリックして、コマンドをコピーできます。 最初のコマンドに対してこれを行い、それを実行します。

  1. 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に通知する必要があります。

  1. helm repo update

更新が成功したことを示す次の出力が表示されます。

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!⎈

このステップでは、ArtifactHubとその機能について学習しました。 Helmのインストールに新しいリポジトリも追加しました。 次のステップでは、ヘルムチャートをインストールします。

ステップ3—ヘルムチャートのインストール

前のセクションでは、のリポジトリを追加しました ingress-nginx チャート。 これで、クラスターにインストールします。

各チャートには、動作を変更するために設定できる構成変数があります。 これらの変数は、というファイルに保存されます values.yaml それはチャートの一部です。 チャートをマシンにダウンロードしていない限り、チャートを表示するには次のコマンドを実行する必要があります。

  1. helm show values chart_name

の利用可能な変数を表示するには ingress-nginx、 交換 chart_name:

  1. helm show values ingress-nginx/ingress-nginx

出力は長くなり、内容が表示されます values.yaml 為に ingress-nginx.

チャートをインストールするには、次を使用できます helm install:

  1. helm install release_name repository/chart_name

リリースはチャートのデプロイされたインスタンスであり、ここではそれを呼び出しています ingress-nginx.

このコマンドは、変数のデフォルト値を使用してチャートをクラスターにインストールします。 それらのいくつかを変更したい場合は、を使用して新しい変数値を渡すことができます --set:

  1. helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

繰り返すことができます --set 必要な数の変数に対して。 今はカスタマイズしないので、次のコマンドを実行してそのままインストールします。

  1. helm install ingress-nginx ingress-nginx/ingress-nginx

出力は次のようになります。

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 指定したリリースの名前に対応します。 Helmには、リリースステータスやデプロイされた名前空間などの一般的な情報も一覧表示されます。 The NOTES セクションはチャートによって異なり、通常、チャートのリソースを使用する際のクイックスタートガイダンスまたはいくつかの一般的な落とし穴についての警告が含まれています。 ここでは、ロードバランサーが作成中であり、完了するまでに時間がかかる場合があることに注意してください。

展開されたチャートを確認するには、 helm list:

  1. helm list

あなたはそれを見つけるでしょう ingress-nginx 現時点で展開されている唯一のチャートです。

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.0

次のコマンドを実行すると、クラスター内にあるサービスを見つけることができます。

  1. kubectl get services

出力は次のようになります。

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 83m

クラスタにリリースをデプロイしたので、デプロイ中にその構成を変更します。

ステップ4—リリースのアップグレード

リリースがデプロイされると、構成を変更する必要があるときに、リリースを破棄して完全に再デプロイする必要はありません。 あなたは使用することができます helm upgrade チャートの新しいバージョンでリリースをアップグレードするか、新しい設定を設定するコマンド。

The ingress-nginx チャートは controller.replicaCount デプロイされたコントローラーポッドの数を制御する変数。 デフォルトでは1に設定されています。これは、使用可能なポッドを一覧表示することで確認できます。

  1. kubectl get pods

次の1つしかないことがわかります。

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

冗長性のためにさらに展開したい場合(たとえば、3つ)、次のことができます。 upgrade リリースし、変数をに設定します 3 実行することによって:

  1. helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

あなたもパスインします --reuse-values、これは、展開されたリリースに基づいて変更を行い、以前の構成を保持するようにHelmに指示します。

出力では、Helmはリビジョンをバンプして、リリースがアップグレードされたことを示します。

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 12:07:54 2021 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: ...

次のコマンドを実行して、使用可能なポッドを一覧表示できます。

  1. kubectl get pods

1つではなく3つのポッドがリストされています。

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 18s

次に、変更をロールバックし、リリースを完全に削除します。

ステップ5—リリースのロールバックと削除

あなたが upgrade リリースの場合、そのリビジョン番号が増加します。 内部的には、Helmはリリースのすべてのリビジョンを保存し、必要に応じて以前のリビジョンに戻すことができます。

ポッドの数を1つに戻すには、次のコマンドを実行します。 helm upgrade 小さな変更なので、もう一度手動で番号を設定します。 ただし、多くの変数を含む大きなグラフを操作する場合、手動で元に戻すことは不可能であり、自動化する必要があります。

リリースをロールバックするには、 helm rollback:

  1. helm rollback release_name release_revision

これを使用して、行った変更を元に戻すことができます ingress-nginx リビジョンにロールバックする 1:

  1. helm rollback ingress-nginx 1

アクションが成功したことを示す次の出力が表示されます。

Output
Rollback was a success! Happy Helming!

リリースを一覧表示することで、現在のリビジョンを確認できます。

  1. helm list

リビジョンが今であることがわかります 3、ではなく 1:

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.0

Helmは、ロールバックを含むすべての変更をリリースの新しいリビジョンと見なします。 そのリビジョンを確認できます 3 次のコマンドを実行してデプロイされたポッドの数を確認することにより、最初のポッドと同じになります。

  1. kubectl get pods

次の1つしかないことがわかります。

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

リリースとそのすべてのリビジョンを削除するには、次を使用できます helm delete:

  1. helm delete release_name

もう必要ないので削除 ingress-nginx 次のコマンドを実行します。

  1. helm delete ingress-nginx

出力は次のようになります。

Output
release "ingress-nginx" uninstalled

リリースをリストして、リリースがないことを確認できます。

  1. helm list

出力テーブルには行がありません。

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

リリースが削除されたので、将来の展開でその名前を再利用できます。

ステップ6—(オプション)カスタムチャートの作成

このオプションの手順では、カスタムチャートを作成する方法、リソース定義を配置する場所、およびさらに配布するためにパッケージ化する方法を学習します。

と呼ばれる新しいグラフを作成します example-chart. 次のコマンドを実行して作成します。

  1. 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 実行することによって:

  1. cat example-chart/templates/service.yaml

二重中括弧で囲まれた値を生成するためのテンプレートディレクティブがあることがわかります。

Output
apiVersion
: 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:

例-chart/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--debughelm install チャートディレクトリを指す:

  1. helm install example-chart --dry-run --debug ./example-chart

出力は長くなり、クラスターに適用されるすべての最終的なリソース定義が含まれます。 チャートで作業している間、次を使用できます helm upgrade 新しいバージョンをKubernetesにプッシュします。

完成したチャートを共有するときは、次のコマンドを実行して配布用にパッケージ化できます。

  1. helm package ./example-chart

出力は次のようになります。

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

パッケージ化されたチャートは、追加されたリポジトリのチャートと同じようにインストールできます。

  1. helm install example-chart example-chart-0.1.0.tgz

このステップでは、カスタムチャートを作成し、それを展開しました。 また、パッケージ化して、その構造について学習しました。

結論

これで、Helmを使用してKubernetesクラスターにデプロイされたソフトウェアをインストールおよびアップグレードする方法をマスターしました。 グラフリポジトリを追加し、それらが重要である理由と、ArtifactHubがそれらを見つけるのにどのように役立つかを学びました。 また、新しいカスタムチャートを作成し、リリースリビジョンと、必要に応じてロールバックする方法について学習しました。

カスタムチャートの作成の詳細については、公式ガイドをご覧ください。