前書き
HelmはKubernetesのパッケージマネージャーであり、開発者とオペレーターがKubernetesクラスターでアプリケーションをより簡単に構成およびデプロイできるようにします。
このチュートリアルでは、Helmをセットアップし、それを使用して、the Kubernetes Dashboard applicationのインスタンスをインストール、再構成、ロールバックしてから削除します。 ダッシュボードは、公式のWebベースのKubernetes GUIです。
Helmとそのパッケージングエコシステムの概念的な概要については、記事An Introduction to Helmをお読みください。
前提条件
このチュートリアルでは、次のものが必要です。
-
役割ベースのアクセス制御(RBAC)が有効になっているKubernetes 1.8+クラスター。
-
ローカルマシンにインストールされ、クラスターに接続するように構成された
kubectl
コマンドラインツール。kubectl
in the official documentationのインストールについて詳しく読むことができます。次のコマンドを使用して、接続をテストできます。
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のインストールを開始します。
[[step-1 -—- installing-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コンポーネントをインストールして、インストールを完了します。
[[step-2 -—- installing-tiller]] ==ステップ2—Tillerのインストール
Tillerは、クラスター上で実行されるhelm
コマンドのコンパニオンであり、helm
からコマンドを受信し、Kubernetes APIと直接通信して、リソースの作成と削除の実際の作業を行います。 Tillerにクラスターで実行するために必要なアクセス許可を与えるために、Kubernetesserviceaccount
リソースを作成します。
[。注意]##
Note:このserviceaccount
をcluster-adminクラスターロールにバインドします。 これにより、tiller
サービスのスーパーユーザーがクラスターにアクセスできるようになり、すべての名前空間にすべてのリソースタイプをインストールできるようになります。 これはHelmの探索には適していますが、実稼働Kubernetesクラスターのよりロックダウンされた構成が必要な場合があります。
TillerのさまざまなRBACシナリオの設定の詳細については、the official Helm RBAC documentationを参照してください。
tillerserviceaccount
を作成します。
kubectl -n kube-system create serviceaccount tiller
次に、tillerserviceaccount
をcluster-adminロールにバインドします。
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
これで、stableリポジトリの詳細のダウンロードなどのローカルハウスキーピングタスクとともに、クラスターにTillerをインストールするhelm init
を実行できます。
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
を使用して最初のアプリケーションをインストールする準備が整いました。
[[step-3 -—- installing-a-helm-chart]] ==ステップ3—ヘルムチャートのインストール
Helmソフトウェアパッケージはchartsと呼ばれます。 Helmには、stableと呼ばれる厳選されたチャートリポジトリが事前構成されています。 利用可能なチャートin their GitHub repoを閲覧できます。 例としてKubernetes Dashboardをインストールします。
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
を指定しました。 これはreleaseの名前です。 Helmreleaseは、特定の構成を持つ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 443/TCP 51s
kubernetes ClusterIP 10.32.0.1 443/TCP 34m
デフォルトでは、リリースに対応するサービス名はHelmリリース名とチャート名の組み合わせであることに注意してください。
アプリケーションをデプロイしたので、Helmを使用して構成を変更し、デプロイを更新しましょう。
[[step-4 -—- updating-a-release]] ==ステップ4—リリースの更新
helm upgrade
コマンドを使用して、新しいチャートまたは更新されたチャートでリリースをアップグレードしたり、その構成オプションを更新したりできます。
更新とロールバックのプロセスを示すために、dashboard-demo
リリースに簡単な変更を加えます。ダッシュボードサービスの名前をdashboard-demo-kubernetes-dashboard
ではなく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 443/TCP 36m
dashboard ClusterIP 10.32.198.148 443/TCP 40s
サービス名が新しい値に更新されました。
[。注意]##
Note:この時点で、実際にブラウザにKubernetesダッシュボードを読み込んでチェックアウトすることをお勧めします。 そのためには、まず次のコマンドを実行します。
kubectl proxy
これにより、ローカルコンピューターからリモートクラスターリソースにアクセスできるプロキシが作成されます。 前の手順に基づいて、ダッシュボードサービスはkubernetes-dashboard
という名前で、default
名前空間で実行されています。 これで、次のURLでダッシュボードにアクセスできます。
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/
必要に応じて、強調表示された部分を独自のサービス名と名前空間に置き換えます。 ダッシュボードを実際に使用する手順はこのチュートリアルの範囲外ですが、詳細についてはthe official Kubernetes Dashboard docsを参照してください。
次に、リリースをロールバックするHelmの機能について説明します。
[[step-5 -—- rolling-back-a-release]] ==ステップ5—リリースのロールバック
前の手順でdashboard-demo
リリースを更新したときに、リリースの2番目のrevisionを作成しました。 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を使用してリリースを削除する方法を検討します。
[[step-6 -—- deleting-a-release]] ==ステップ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
reallyでリリースを削除し、すべての古いリビジョンをパージするには、helm delete
コマンドで--purge
フラグを使用します。
helm delete dashboard-demo --purge
これでリリースが完全に削除され、リリース名を再利用できます。
結論
このチュートリアルでは、helm
コマンドラインツールとそのtiller
コンパニオンサービスをインストールしました。 また、Helmのチャートとリリースのインストール、アップグレード、ロールバック、削除についても検討しました。
ヘルムチャートとヘルムチャートの詳細については、the official Helm documentationを参照してください。