開発者ドキュメント

how-to-install-software-on-kubernetes-clusters-with-the-helm-package-manager

前書き

https://www.helm.sh [Helm]はKubernetesのパッケージマネージャーであり、開発者とオペレーターがKubernetesクラスターでアプリケーションをより簡単に構成および展開できるようにします。

このチュートリアルでは、Helmをセットアップし、それを使用してhttps://github.com/kubernetes/dashboard[Kubernetes Dashboard application]のインスタンスをインストール、再構成、ロールバックし、削除します。 ダッシュボードは、公式のWebベースのKubernetes GUIです。

Helmとそのパッケージングエコシステムの概念的な概要については、https://www.digitalocean.com/community/tutorials/an-introduction-to-helm-the-package-manager-for-kubernetes [An Introduction to兜]。

前提条件

このチュートリアルでは、次のものが必要です。

  • 役割ベースのアクセス制御(RBAC)が有効になっているKubernetes 1.8+クラスター。

  • ローカルマシンにインストールされ、クラスターに接続するように設定された `+ kubectl `コマンドラインツール。 ` kubectl `のインストールの詳細については、https://kubernetes.io/docs/tasks/tools/install-kubectl/ [公式ドキュメント]をご覧ください。
    +次のコマンドで接続をテストできます:

kubectl cluster-info

エラーが表示されない場合は、クラスターに接続しています。 ` kubectl `で複数のクラスターにアクセスする場合、正しいクラスターコンテキストが選択されていることを確認してください:

kubectl config get-contexts

+

OutputCURRENT   NAME                    CLUSTER                      AUTHINFO                      NAMESPACE
        do-nyc1-k8s-example     do-nyc1-k8s-example          do-nyc1-k8s-example-admin
         docker-for-desktop      docker-for-desktop-cluster   docker-for-desktop

この例では、アスタリスク( `+`)は、 `+ do-nyc1-k8s-example `クラスターに接続されていることを示しています。 クラスターを切り替えるには、次を実行します:

kubectl config use-context

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

手順1-Helmのインストール

まず、ローカルマシンにコマンドラインユーティリティ「+ helm +」をインストールします。 Helmは、MacOS、Windows、またはLinuxでのインストールプロセスを処理するスクリプトを提供します。

書き込み可能なディレクトリに移動し、HelmのGitHubリポジトリからスクリプトをダウンロードします。

cd /tmp
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

`+ chmod`でスクリプトを実行可能にします:

chmod u+x install-helm.sh

この時点で、お気に入りのテキストエディタを使用してスクリプトを開き、スクリプトを調べて安全であることを確認できます。 満足したら、それを実行します:

./install-helm.sh

パスワードの入力を求められる場合があります。 入力して、「+ ENTER」を押します。

Outputhelm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

次に、クラスターにいくつかのHelmコンポーネントをインストールして、インストールを完了します。

ステップ2-耕うん機のインストール

Tillerは、クラスターで実行される「+ helm 」コマンドのコンパニオンであり、「 helm 」からコマンドを受け取り、Kubernetes APIと直接通信して、リソースを作成および削除する実際の作業を行います。 Tillerにクラスターで実行するために必要なアクセス許可を与えるために、Kubernetesの ` serviceaccount +`リソースを作成します。

  • tiller * `+ serviceaccount +`を作成します。

kubectl -n kube-system create serviceaccount tiller

次に、* tiller * `+ serviceaccount +`を* cluster-admin *ロールにバインドします。

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

これで、 `+ helm init +`を実行して、Tillerをクラスターにインストールし、* stable *リポジトリの詳細をダウンロードするなど、いくつかのローカルハウスキーピングタスクを実行できます。

helm init --service-account tiller
Output. . .

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

Tillerが実行されていることを確認するには、 kube-system 名前空間のポッドをリストします。

kubectl get pods --namespace kube-system
OutputNAME                                    READY     STATUS    RESTARTS   AGE
. . .
kube-dns-64f766c69c-rm9tz               3/3       Running   0          22m
kube-proxy-worker-5884                  1/1       Running   1          21m
kube-proxy-worker-5885                  1/1       Running   1          21m
kubernetes-dashboard-7dd4fc69c8-c4gwk   1/1       Running   0          22m

Tillerポッド名は、プレフィックス「+ tiller-deploy- +」で始まります。

両方のHelmコンポーネントをインストールしたので、 `+ helm +`を使用して最初のアプリケーションをインストールする準備ができました。

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

Helmソフトウェアパッケージは_charts_と呼ばれます。 Helmは、* stable *と呼ばれる厳選されたチャートリポジトリで事前設定されています。 利用可能なチャートhttps://github.com/helm/charts/tree/master/stable[GitHubリポジトリ]を参照できます。 例としてhttps://github.com/kubernetes/dashboard[Kubernetes Dashboard]をインストールします。

`+ stable `リポジトリから ` kubernetes-dashboard `パッケージをインストールするために ` helm +`を使用します:

helm install stable/kubernetes-dashboard --name dashboard-demo
OutputNAME:
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED

. . .

上記の出力例で強調表示されている `+ NAME `行に注目してください。 この場合、 ` dashboard-demo +`という名前を指定しました。 これは_release_の名前です。 Helm _release_は、特定の構成を持つ1つのチャートの単一の展開です。 同じチャートの複数のリリースをデプロイできます。各リリースには独自の構成があります。

`+-name +`を使用して独自のリリース名を指定しない場合、Helmはランダムな名前を作成します。

Helmにこのクラスターのリリースのリストを要求できます。

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
   1           Wed Aug  8 20:11:11 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

これで、 `+ kubectl +`を使用して、クラスターに新しいサービスがデプロイされたことを確認できます。

kubectl get services
OutputNAME                                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE

kubernetes                             ClusterIP   10.32.0.1      <none>        443/TCP   34m

デフォルトでは、リリースに対応するサービス名はHelmリリース名とチャート名の組み合わせであることに注意してください。

アプリケーションをデプロイしたので、Helmを使用して構成を変更し、デプロイを更新しましょう。

ステップ4-リリースの更新

`+ helm upgrade`コマンドを使用して、新しいチャートまたは更新されたチャートでリリースをアップグレードしたり、構成オプションを更新したりできます。

更新とロールバックプロセスを示すために、 + dashboard-demo +`リリースに簡単な変更を加えます。ダッシュボードサービスの名前を、 `+ dashboard-demoではなく、 + dashboard + `に更新します。 -kubernetes-dashboard + `。

`+ kubernetes-dashboard `チャートには、サービス名を制御するための ` fullnameOverride `設定オプションがあります。 このオプションを設定して「 helm upgrade」を実行しましょう。

helm upgrade  stable/kubernetes-dashboard

最初の「+ helm install」ステップと同様の出力が表示されます。

Kubernetesサービスが更新された値を反映しているかどうかを確認します。

kubectl get services
OutputNAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes             ClusterIP   10.32.0.1       <none>        443/TCP   36m
             ClusterIP   10.32.198.148   <none>        443/TCP   40s

サービス名が新しい値に更新されました。

次に、リリースをロールバックするHelmの機能について説明します。

ステップ5-リリースのロールバック

前のステップで「++」リリースを更新したときに、リリースの2番目の_revision_を作成しました。 Helmは、以前の構成またはチャートにロールバックする必要がある場合に備えて、以前のリリースのすべての詳細を保持します。

`+ helm list +`を使用して、リリースを再度検査します。

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo           Wed Aug  8 20:13:15 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

`+ REVISION +`カラムは、これが2番目のリビジョンであることを示しています。

`+ helm rollback +`を使用して、最初のリビジョンにロールバックします。

helm rollback  1

ロールバックが成功したことを示す次の出力が表示されます。

OutputRollback was a success! Happy Helming!

この時点で、 `+ kubectl get services +`を再度実行すると、サービス名が以前の値に戻っていることがわかります。 Helmは、リビジョン1の構成でアプリケーションを再デプロイしました。

次に、Helmを使用してリリースを削除する方法を検討します。

ステップ6-リリースの削除

Helmリリースは `+ helm delete`コマンドで削除できます:

helm delete
Outputrelease "dashboard-demo" deleted

リリースは削除され、ダッシュボードアプリケーションは実行されなくなりましたが、リリースを再デプロイする場合に備えて、Helmはすべてのリビジョン情報を保存します。 今すぐ新しい「+ dashboard-demo」リリースを「+ helm install」しようとすると、エラーが発生します。

Error: a release named dashboard-demo already exists.

`+-deleted +`フラグを使用して削除されたリリースを一覧表示すると、リリースがまだ残っていることがわかります。

helm list --deleted
OutputNAME            REVISION    UPDATED                     STATUS  CHART                       NAMESPACE
dashboard-demo  3           Wed Aug  8 20:15:21 2018    DELETED kubernetes-dashboard-0.7.1  default

リリースを_really_削除し、古いリビジョンをすべて削除するには、 `+ helm delete `コマンドで `-purge +`フラグを使用します。

helm delete dashboard-demo --purge

これでリリースが完全に削除され、リリース名を再利用できます。

結論

このチュートリアルでは、 `+ helm `コマンドラインツールとその ` tiller +`コンパニオンサービスをインストールしました。 また、Helmのチャートとリリースのインストール、アップグレード、ロールバック、削除についても検討しました。

HelmチャートとHelmチャートの詳細については、https://docs.helm.sh/ [the Helm official documentation]を参照してください。

モバイルバージョンを終了