ここまで、Kubernetes(K8s)クラスタのアプリケーションをデプロイする際には、アプリケーションの設定内容を記述したマニフェストファイルを作成し、 kubectl
コマンドで適用していました。しかしながら、設定ファイルごとに kubectl
コマンドを実行するため、一括での管理が難しくなり、コマンドの実行もれが起こる可能性もあります。
今回は、K8s クラスタのアプリケーション管理を簡単にしてくれる Helm というツールを紹介します。
Helm の概要
- Helm 公式サイト
- Helm は K8s クラスタ用のパッケージ管理マネージャです。
- 具体的な機能は以下のとおりです。
- Helm では直接イメージ自体は扱わず、Chart のみをリポジトリで管理します。
- 「stable」や「incubator」という名称の公式リポジトリが提供されているほか、Helm Hub にサードパーティによるリポジトリが多く提供されており、利用することが出来ます。
Helm をローカル環境で使ってみる
$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME minikube Ready master 63d v1.18.3 192.168.64.3 <none> Buildroot 2019.02.10 4.19.107 docker://19.3.8
$ brew install helm $ helm version version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}
- 最新版をインストールすると、上記の通り、v3 系統が入ります。
- v2 系統と v3 系統ではアーキテクチャが変わっているため、インターネット上の記事を読む場合は注意が必要です。
- 本記事では、v3 系統を前提として話を進めます。
- 公開されている Chart を使ってアプリケーションをデプロイするために、公式の stable リポジトリを追加します。
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/ "stable" has been added to your repositories
$ helm search repo wordpress NAME CHART VERSION APP VERSION DESCRIPTION stable/wordpress 9.0.3 5.3.2 DEPRECATED Web publishing platform for building...
- 上記の結果を基に、
stable/wordpress
の Chart を「wordpress」という Release 名でデプロイします。 - デプロイが完了すると、そのアプリケーションに関するメモなどを含む「NOTES」が表示されます。
$ helm install wordpress stable/wordpress WARNING: This chart is deprecated NAME: wordpress LAST DEPLOYED: Tue Jun 23 15:42:39 2020 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: This Helm chart is deprecated Given the `stable` deprecation timeline (https://github.com/helm/charts#deprecation-timeline), the Bitnami maintained Helm chart is now located at bitnami/charts (https://github.com/bitnami/charts/). The Bitnami repository is already included in the Hubs and we will continue providing the same cad (以下省略)
- デプロイされた Release の一覧は
helm list
で確認できます。
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION wordpress default 1 2020-06-23 15:42:39.938909 +0900 JST deployed wordpress-9.0.3 5.3.2
- ここで、クラスタ上に Pod 等が作成されていることを確認します。
- WordPress のアプリケーション事態のみならず、必要な DB の Pod や Service もデプロイされていることがわかります。
$ kubectl get po,deploy,cm,svc NAME READY STATUS RESTARTS AGE pod/wordpress-5667d74df4-z4qtf 2/2 Running 1 16m pod/wordpress-mariadb-0 2/2 Running 0 16m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wordpress 1/1 1 1 16m NAME DATA AGE configmap/wordpress-mariadb 1 16m configmap/wordpress-mariadb-tests 1 16m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/details ClusterIP 10.99.129.73 <none> 9080/TCP 12d service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 67d service/wordpress LoadBalancer 10.106.135.229 <pending> 80:32035/TCP,443:31393/TCP 16m service/wordpress-mariadb ClusterIP 10.98.137.134 <none> 3306/TCP 16m
- サンプルページが表示できることを確認します。Minikube を利用している場合は、以下のコマンドで接続先 IP アドレスを確認できます。ポート番号は先ほどの
kubectl get
の LoadBalancer Service に記載されているものを利用します。
$ minikube ip 192.168.64.3
- 上記の結果から、
http://192.168.64.3:32035
にブラウザからアクセスすると WordPress のサンプルページが表示されます。
- デプロイされたアプリケーションを削除する場合は、
helm uninstall
コマンドを利用します。
$ helm uninstall wordpress release "wordpress" uninstalled
Amazon EKS で Helm を利用する
$ eksctl create cluster \ --name helm-sample \ --region us-east-2 \ --nodes 2 \ --nodes-min 2 \ --nodes-max 2 \ --node-type t2.micro
- EKS での Helm の利用については、EKS の公式ドキュメントに書かれている通り、ローカル環境に Helm コマンドがインストールされていれば、利用できます。
- 先程と同様に、
helm install
を用いて WordPress をデプロイします。
$ helm install wordpress stable/wordpress WARNING: This chart is deprecated NAME: wordpress LAST DEPLOYED: Tue Jun 23 17:14:12 2020 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: This Helm chart is deprecated (以下省略) $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION wordpress default 1 2020-06-23 17:14:12.547709 +0900 JST deployed wordpress-9.0.3 5.3.2
- Pod や Service を確認します。
$ kubectl get po,deploy,cm,svc NAME READY STATUS RESTARTS AGE pod/wordpress-7b7b8d7cf6-nbrnn 0/1 Running 0 103s pod/wordpress-mariadb-0 1/1 Running 0 102s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wordpress 0/1 1 0 104s NAME DATA AGE configmap/wordpress-mariadb 1 104s configmap/wordpress-mariadb-tests 1 104s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 11m service/wordpress LoadBalancer 10.100.16.161 XXXXX.us-east-2.elb.amazonaws.com 80:30306/TCP,443:30964/TCP 104s service/wordpress-mariadb ClusterIP 10.100.246.110 <none> 3306/TCP 104s
- Amazon EKS でデプロイした場合、
LoadBalancer
が作成されたことにより、自動的に ELB が作成され、EXTERNAL-IP
が発行されます。ここに書かれているアドレスにブラウザからアクセスすると、先ほどと同様に WordPress のサンプル画面が立ち上がります。
まとめ
- Kubernetes クラスタ用のパッケージ管理マネージャである Helm を使ってみました。
- マニフェストファイルの作成・管理の煩わしさを低減させ、運用負担を減らしてくれます。
- 既存の Chart を改良・修正したり、新たな Chart を作成するなどして思い通りのアプリケーションのデプロイが出来るようになります。
- Chart の作り方等はまた別の機会に取り組んでみようと思います。
参考資料
- 事実上の標準ツールとなっているKubernetes向けデプロイツール「Helm」入門
- Helm の基本事項から使い方に関して参考にしました。
- Kubernetesのアプリケーション管理は難しい?いいえ、Helmがあるじゃないか! – 概要編 –
- Helm の概要や用語について参考にしました。
- Helm Tutorial: How To Install and Configure Helm
- Helm の使い方を参考にしました。特に、v2 と v3 で大きく異なるコマンドの使い方について参考にしました。