Helm 3 パッケージ管理を使用して Kubernetes クラスターにソフトウェアをインストールする方法

0 株式
0
0
0
0

導入

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

Helm パッケージはチャートと呼ばれ、リソース定義のテンプレートが含まれています。これにより、最小限のユーザー操作で特定のアプリケーションをデプロイおよび構成できます。テンプレートを使用すると、変数定義を渡すことで、チャート自体を変更することなく、チャート、その設定、動作を管理できます。Helm は、カスタマイズされたリソース定義だけでなく、デプロイ済みの定義への変更も自動的に管理します。デプロイされたチャートは、カスタマイズが可能で、リリースと呼ばれます。.

このチュートリアルでは、Helm 3 のセットアップ方法、チャートとバージョンのインストール、アップグレード、復元、管理方法を学習します。また、独自のチャートの作成とパッケージ化、そしてすぐにインストールできるチャートをホストするチャートリポジトリの設定方法も学習します。.

前提条件
  • ロールベースのアクセス制御 (RBAC) が有効になっている Kubernetes クラスター。.
  • kubectl コマンドライン ツールがローカル マシンにインストールされ、クラスターに接続するように構成されています。.
  • 次のコマンドで接続をテストできます。
  • kubectl cluster-info
  • エラーが表示されなければ、クラスターに接続されています。kubectl で複数のクラスターにアクセスしている場合は、次のコマンドを実行して、正しいクラスターコンテキストが選択されていることを確認してください。
  • 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クラスターに接続していることを示しています。クラスターを切り替えるには、以下を実行します。
  • kubectl config use-context context-name
  • 正しいクラスターに接続したら、手順 1 に進み、Helm のインストールを開始します。.

ステップ1 – Helm 3をインストールする

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

まず /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

最後に、これを実行して Helm 3 をインストールします。

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

マシンにHelm 3をインストールしました。次はチャートリポジトリとその使い方についてご紹介します。.

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

Helmチャートは、誰でもホストできるチャートリポジトリに保存されます。Helm 3では、デフォルトではリポジトリが事前設定されていません。以前のバージョンのHelmには、中央のチャートリポジトリが含まれていました。しかし、Helm 3の設計は、チャート開発者が独自のリポジトリを管理できるように意図的に設計されており、より自由度が高く、リリースが迅速化されています。つまり、使用するチャートごとに、ホスティングリポジトリをHelmインストールに追加する必要があります。.

適切なリポジトリを見つけるには、CNCFが管理するオープンソースウェブサイトであるArtifactHub.ioが役立ちます。Helmのチャートとそのリポジトリをカタログ化しています。また、他のCNCFプロジェクトで使用されている人気で便利なチャートも追跡しているため、以前のバージョンのHelmが動作していた安定版リポジトリとは異なります。Nginxのログや監視ツールなどの一般的なプロジェクトにとって、ArtifactHub.ioは優れたリソースです。.

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


Kubernetesチームが管理するコミュニティバージョンをインストールします。「ingress-nginx」を検索すると検索結果に出てきます。それを選択してページにアクセスしてください。.


各チャートには、タスクの詳細と、チャートのインストールとリポジトリの追加手順が記載されています。そうでない場合は、ページ右側の「インストール」ボタンを押せば必要な手順が表示されます。.


コマンドの横にある青いボタンをクリックするとコピーできます。最初のコマンドについては、次のように入力して実行してください。

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

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

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インストールに新しいリポジトリを追加しました。次に、Helmチャートをインストールします。.

ステップ3 – Helm Chartのインストール

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

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

helm show values chart_name

ingress-nginx で使用可能な変数を表示するには、chart_name を置き換えます。

helm show values ingress-nginx/ingress-nginx

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

チャートをインストールするには、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

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

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 では、リリースステータスやデプロイ先の名前空間などの一般的な情報も表示されます。NOTES セクションはチャートによって異なりますが、通常はクイックスタートのヒントや、チャートのリソースを使用する際によくある問題に関する警告が含まれています。ここでは、ロードバランサーを作成中であり、完了するまでに時間がかかる可能性があることが示されています。.

デプロイされたチャートを確認するには、コマンド リストを使用します。

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

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

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 – バージョンをアップグレードする

バージョンが一度実行されれば、設定を変更する必要がある場合でも、バージョンを破棄して再作成する必要はありません。upgrade コマンドを使用して、チャートの新しいバージョンにアップグレードしたり、新しい設定を適用したりできます。.

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

kubectl get pods

次の 1 つだけがあることに気付くでしょう。

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

冗長性のためにさらにデプロイする場合 (たとえば 3 つ)、次のコマンドを実行してバージョンをアップグレードし、変数を 3 に設定できます。

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

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

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 – コピーを復元して削除する

バージョンをアップグレードすると、リビジョン番号が増加します。Helm は内部的に、あるバージョンのすべてのバージョンを保存しているため、必要に応じて以前のバージョンに戻すことができます。.

ポッドの数を1つに戻すには、アップグレードコマンドを再実行し、手動で数を調整します。これは小さな変更です。ただし、多くの変数を含む大規模なグラフを扱う場合は、手動で元に戻すことは不可能であり、自動的に元に戻される必要があります。.

バージョンを復元するには、restore コマンドを使用します。

helm rollback release_name release_revision

これを使用すると、ingress-nginx に加えた変更をバージョン 1 に戻すことができます。

helm rollback ingress-nginx 1

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

Output
Rollback was a success! Happy Helming!

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

helm list

リビジョンが 1 ではなく 3 になっていることがわかります。

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は、ロールバックを含むすべての変更をリリース内の新しいリビジョンとして扱います。次のコマンドを実行して、デプロイされたポッドの数を確認します。

kubectl get pods

次の 1 つだけがあることに気付くでしょう。

Output
NAME 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

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

Output
release "ingress-nginx" uninstalled

バージョンを一覧表示して、存在しないことを確認できます。

helm list

出力テーブルには行が含まれません。

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

バージョンが削除されたので、今後のデプロイメントでその名前を再利用できます。.

ステップ6 – (オプション) カスタムチャートを作成する

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

「sample-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

グラフがターゲットクラスターにインストールするリソース定義は、テンプレートディレクトリにあります。Helm が開始点として作成したデフォルトの定義は、Nginx Ingress コントローラーをデプロイします。ファイル拡張子は 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で定義されます。Helm NOTESテキストはデプロイ後にNOTES.txtに保存され、フォーマットされます。デプロイされるソフトウェアの名前、バージョン、バージョン番号などのChartメタデータは、Chart.yamlで指定されます。

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"

Helm が何をデプロイしているかを確認するには、チャート ディレクトリを指定して、 helm install に –dry-run と –debug を渡します。

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

出力は長くなり、クラスターに適用される最終的なリソース定義がすべて含まれます。グラフの作成中に、upgrade コマンドを使用して新しいバージョンを Kubernetes にプッシュできます。.

チャートの共有が完了したら、次のコマンドを実行して配布できるようにします。

helm package ./example-chart

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

Output
Successfully 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 を使ってそれらを見つける方法について学びました。また、新しいカスタムチャートを作成し、リリースリビジョンと必要に応じて元に戻す方法についても学びました。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない