Kubernetes では、アプリケーション管理が最も難しく、かつ需要の高い領域です。 Helm プロジェクトは統一されたソフトウェアパッケージングメソッドです。バージョン管理をサポートし、Kubernetes アプリケーションの配布とデプロイの複雑性が大幅に簡素化されます。
Alibaba Cloud Container Service では、アプリケーションカタログ管理機能を Helm ツールと連携し、機能を拡張しています。また、公式リポジトリをサポートし、迅速にアプリケーションをデプロイできます。 Container Service コンソールまたはコマンドラインから、アプリケーションをデプロイできます。
このドキュメントでは、Helm の基本的な概念と使い方を紹介し、Helm を使用して、WordPress と Spark のサンプルアプリケーションを Alibaba Cloud Kubernetes クラスターにデプロイする方法を説明します。
Helm の基本概念
Helm は Deis によって作られたオープンソースのツールで、Kubernetes アプリケーションのデプロイと管理を簡素化することができます。
Helm は Kubernetes 用に作成したアプリケーションの検出、共有、利用を容易にする Kubernetes パッケージ管理ツールとみなすことができます。 Helm にはいくつかの基本概念があります。
- チャート: アプリケーションの実行に必要なイメージ、依存関係、リソース定義を含む Helm パッケージです。 また、Homebrew の formula、APT の dpkg、または Yum の rpm ファイルと同様、Kubernetes クラスターのサービス定義を含む場合もあります。
- リリース: Kubernetes クラスターで実行するチャートです。 チャートは、同じクラスターに何度でもインストールすることができます。 新しいリリースは、チャートがインストールされるたびに作成されます。 たとえば、2 つのデータベースをサーバー上で実行するために、MySQL チャートを 2 度インストールすることができます。 それぞれのインストールで、独自のリリース名を持ったリリースが作成されます。
- リポジトリ: チャートの公開と保存のためのリポジトリです。
Helm のコンポーネント
Helm はクライアント/サーバーアーキテクチャを採用しており、以下のコンポーネントから構成されます。
- Helm CLI は Helm クライアントで、ローカルまたは Kubernetes クラスターのマスターノードで実行できます。
- Tiller はサーバーコンポーネントで、Kubernetes クラスター上で実行されます。 Tiller は Kubernetes アプリケーションのライフサイクルを管理します。
- リポジトリはチャートリポジトリです。 Helm クライアントは HTTP プロトコルを使用して、リポジトリ内のチャートインデックスファイルとパッケージにアクセスします。
Helm によるアプリケーションのデプロイ
前提条件
- Helm を使用してアプリケーションをデプロイする前に、Alibaba Cloud Container Service で Kubernetes クラスターを作成します。
詳細は、「Kubernetes クラスターの作成」をご参照ください。
Kubernetes クラスターが作成されると、Tiller は自動的にクラスターにデプロイされます。 Helm CLI はすべてのマスターノードに自動的にインストールされ、Alibaba Cloud チャートリポジトリを指し示すよう設定されています。
- クラスターの Kubernetes バージョンを確認します。
Kubernetes バージョンが 1.8.4 以降のクラスターのみサポートされます。 Kubernetes バージョンが 1.8.1 のクラスターは、[クラスターリスト] ページで [クラスターのアップグレード] を行ってください。
Container Service コンソールでのアプリケーションのデプロイ
- Container Service コンソール にログインします。
- Kubernetes の左側のナビゲーションウィンドウで、 をクリックします。
- [アプリのカタログ] ページで、チャート (この例では、WordPress) をクリックして、チャートの詳細ページに移動します。
- 右側でデプロイメントの基本情報を入力します。
- クラスター: アプリケーションがデプロイされるクラスターを選択します。
- 名前空間: 名前空間を選択します。デフォルトでは、"default" が選択されています。
- リリース名: アプリケーションのリリース名を入力します。 この例では、"test" と入力します。
- [値] タブをクリックして、設定を変更します。
この例では、クラウドディスクの動的データボリュームを、永続ストレージボリューム要求 (PVC) にバインドします。 詳しくは、以下をご参照ください。注 あらかじめ、クラウドディスクの永続ストレージボリューム (PV) を作成する必要があります。 PV の容量は、PVC によって定義された値より小さくすることはできません。
- 設定が完了したら、[デプロイ] をクリックします。 デプロイの成功後、アプリケーションのリリースページにリダイレクトされます。
- 左側のナビゲーションウィンドウで、 をクリックします。 対象となるクラスターと名前空間を選択して、対応するサービスを検索します。 HTTP/HTTPS 外部エンドポイントアドレスを取得できます。
- 上記のアクセスアドレスをクリックして、WordPress ブログ公開ページに移動します。
コマンドラインによるアプリケーションのデプロイ
コマンドラインを使用してアプリケーションをデプロイする場合、Kubernetes クラスターのマスターノードに SSH ログインできます (Helm CLI は自動的にインストールされ、リポジトリを設定します)。 詳細は、「SSH を使用した Kubernetes クラスターへのアクセス」をご参照ください。 kubectl と Helm CLI をローカルにインストールし、設定することもできます。
この例では、kubectl と Helm CLI をローカルにインストールして設定し、WordPress アプリケーションと Spark アプリケーションをデプロイします。
kubectl と Helm CLI のインストールと設定
- kubectl をローカルコンピューターにインストールし、設定します。
詳細は、「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
対象となる Kubernetes クラスターの情報を表示するには、
kubectl cluster-info
コマンドを入力します。 - Helm をローカルコンピューターにインストールします。
インストール方法については、『Install Helm』をご参照ください。
- Helm リポジトリを設定します。 ここでは、Alibaba Cloud Container Service のチャートリポジトリを使用します。
helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/ helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ helm repo update
Helm の基本操作
- クラスターにインストールされたチャートのリストを表示するには、以下のコマンドを入力します。
helm list
または、短縮形を使用できます。
helm ls
- リポジトリの設定を表示するには、以下のコマンドを入力します。
helm repo list
- リポジトリ内の Helm チャートを表示または検索するには、以下のいずれかのコマンドを入力します。
helm search helm search repository name #For example, stable or incubator. helm search chart name #For example, wordpress or spark.
- チャートリストを更新して、最新バージョンを取得するには、以下のコマンドを入力します。
helm repo update
Helm の使い方について詳しくは、『Helm ドキュメント』をご参照ください。
Helm による WordPress のデプロイ
Helm を使用して、WordPress のブログの Web サイトをデプロイします。
以下のコマンドを入力します。
helm install --name wordpress-test stable/wordpress
結果は以下のようになります。
NAME: wordpress-test
LAST DEPLOYED: Mon Nov 20 19:01:55 2017
NAMESPACE: default
STATUS: DEPLOYED
...
以下のコマンドを使用して、WordPress のリリースとサービスを表示します。
helm list
kubectl get svc
以下のコマンドを使用して、WordPress 関連のポットを表示ます。ステータスが [Running] に変わるまで待ってください。
kubectl get pod
以下のコマンドを使用して、WordPress のアクセスアドレスを取得します。
echo http://$(kubectl get svc wordpress-test-wordpress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
上記の URL にブラウザからアクセスします。一般的な WordPress Web サイトが表示されます。
チャートの指示に従い、以下のコマンドを使用して WordPress Web サイトの管理者アカウントとパスワードを取得できます。
echo Username: user
echo Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
WordPress アプリケーションを完全に削除するには、以下のコマンドを入力します。
helm delete --purge wordpress-test
Helm による Spark のデプロイ
Helm を使用して、ビッグデータ処理用 Spark をデプロイします。
以下のコマンドを入力します。
helm install --name myspark stable/spark
結果は次のとおりです。
NAME: myspark
LAST DEPLOYED: Mon Nov 20 19:24:22 2017
NAMESPACE: default
STATUS: DEPLOYED
...
以下のコマンドを使用して、Spark のリリースとサービスを表示します。
helm list
kubectl get svc
以下のコマンドを使用して、Spark 関連のポッドを表示し、ステータスが [Running] に変わるまで待ってください。 Spark 関連のイメージは大きいため、イメージの取り出しには時間がかかります。
kubectl get pod
以下のコマンドを使用して、Spark Web UI のアクセスアドレスを取得します。
echo http://$(kubectl get svc myspark-webui -o jsonpath='{.status.loadBalancer.ingress[0].ip}'):8080
上記の URL にブラウザからアクセスします。Spark Web UI が表示され、現在 3 つのワーカーインスタンスが存在することが示されます。
次に、以下のコマンドで、Helm を使用して Spark アプリケーションをアップグレードし、ワーカーインスタンスの数を 3 から 4 に変更します。 パラメーター名は大文字と小文字が区別されます。
helm upgrade myspark --set "Worker.Replicas=4" stable/spark
結果は以下のようになります:
Release "myspark" has been upgraded. Happy Helming!
LAST DEPLOYED: Mon Nov 20 19:27:29 2017
NAMESPACE: default
STATUS: DEPLOYED
...
以下のコマンドを使用して、新しく追加された Spark のポッドを表示し、ステータスが [Running] になるまで待ってください。
kubectl get pod
ブラウザで Spark Web UI を更新します。 ワーカーインスタンスの数が 4 になっています。
Spark アプリケーションを完全に削除するには、以下のコマンドを入力します。
helm delete --purge myspark
サードパーティのチャートリポジトリの使用
事前設定された Alibaba Cloud チャートリポジトリのほかに、サードパーティのチャートリポジトリも使用できます (ネットワークにアクセスできることを確認してください)。 以下のコマンド形式で、サードパーティのチャートリポジトリを追加します。
helm repo add repository name repository URL
helm repo update
Helm 関連のコマンドについては、『Helm ドキュメント』をご参照ください。
参考資料
Helm はコミュニティーを急成長させています。 Bitnami など、ますます多くのソフトウェアプロバイダーが高品質のチャートを提供し始めています。 既存のチャートは、https://kubeapps.com/
で検索できます。