Helm2パッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールする方法

提供:Dev Guides
移動先:案内検索

序章

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

このチュートリアルでは、Helmをセットアップし、それを使用して Kubernetesダッシュボードアプリケーションのインスタンスをインストール、再構成、ロールバック、削除します。 ダッシュボードは、公式のWebベースのKubernetesGUIです。

Helmとそのパッケージングエコシステムの概念的な概要については、記事 An Introduction toHelmをお読みください。

注:このチュートリアルでは、バージョン2のHelmパッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールするためのワークフローについて説明します。これにはTillerが必要です。 Helmのバージョン3を使用している場合は、チュートリアルHelm3パッケージマネージャーを使用してKubernetesクラスターにソフトウェアをインストールする方法に従ってください。


前提条件

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

  • ロールベースのアクセス制御(RBAC)が有効になっているKubernetes1.8以降のクラスター。

  • ローカルマシンにインストールされ、クラスターに接続するように構成されたkubectlコマンドラインツール。 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 context-name
    

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

ステップ1—ヘルムのインストール

まず、ローカルマシンに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のインストール

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

注:このserviceaccountcluster-adminクラスターの役割にバインドします。 これにより、tillerサービスのスーパーユーザーがクラスターにアクセスできるようになり、すべての名前空間にすべてのリソースタイプをインストールできるようになります。 これはHelmの探索には問題ありませんが、本番Kubernetesクラスターにはよりロックダウンされた構成が必要になる場合があります。

TillerのさまざまなRBACシナリオの設定の詳細については、公式のHelmRBACドキュメントを参照してください。


耕うん機serviceaccountを作成します。

kubectl -n kube-system create serviceaccount tiller

次に、 tiller serviceaccountcluster-adminロールにバインドします。

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

これで、helm initを実行できます。これにより、クラスターにTillerがインストールされ、安定したリポジトリの詳細のダウンロードなどのローカルハウスキーピングタスクが実行されます。

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-deploy-5c688d5f9b-lccsk          1/1       Running   0          40s

Tillerポッド名は、接頭辞tiller-deploy-で始まります。

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

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

Helmソフトウェアパッケージはチャートと呼ばれます。 Helmには、stableと呼ばれる厳選されたチャートリポジトリが事前構成されています。 利用可能なチャートは、GitHubリポジトリで閲覧できます。 例として、 KubernetesDashboardをインストールします。

helmを使用して、stableリポジトリからkubernetes-dashboardパッケージをインストールします。

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

. . .

上記の出力例で強調表示されているNAME行に注意してください。 この場合、名前dashboard-demoを指定しました。 これは私たちのリリースの名前です。 Helm release は、特定の構成を持つ1つのチャートの単一の展開です。 同じチャートの複数のリリースを、それぞれ独自の構成で展開できます。

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

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

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo 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
dashboard-demo-kubernetes-dashboard   ClusterIP   10.32.104.73   <none>        443/TCP   51s
kubernetes                             ClusterIP   10.32.0.1      <none>        443/TCP   34m

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

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

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

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

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

kubernetes-dashboardチャートは、サービス名を制御するためのfullnameOverride構成オプションを提供します。 このオプションを設定してhelm upgradeを実行してみましょう。

helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="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
dashboard              ClusterIP   10.32.198.148   <none>        443/TCP   40s

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

注:この時点で、実際にブラウザにKubernetesダッシュボードを読み込んでチェックアウトすることをお勧めします。 これを行うには、最初に次のコマンドを実行します。

kubectl proxy

これにより、ローカルコンピューターからリモートクラスターリソースにアクセスできるプロキシが作成されます。 前の手順に基づいて、ダッシュボードサービスはkubernetes-dashboardという名前で、default名前空間で実行されています。 これで、次のURLでダッシュボードにアクセスできます。

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

必要に応じて、強調表示された部分を独自のサービス名と名前空間に置き換えます。 ダッシュボードを実際に使用する手順はこのチュートリアルの範囲外ですが、詳細については公式のKubernetesダッシュボードドキュメントをお読みください。


次に、リリースをロールバックするHelmの機能を見ていきます。

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

前の手順でdashboard-demoリリースを更新したときに、リリースの2番目のリビジョンを作成しました。 以前の構成またはチャートにロールバックする必要がある場合に備えて、Helmは以前のリリースのすべての詳細を保持します。

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

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

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

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

helm rollback dashboard-demo 1

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

OutputRollback was a success! Happy Helming!

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

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

ステップ6—リリースを削除する

ヘルムリリースは、helm deleteコマンドで削除できます。

helm delete dashboard-demo
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

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

helm delete dashboard-demo --purge

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

結論

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

HelmおよびHelmチャートの詳細については、公式Helmドキュメントを参照してください。