記事目安...10分
はじめに
Helm なるものに触れる機会があったので、備忘録に書いてみました。
一番シンプルかつすぐにできる Nginx Pod をでぷろいしてみます。
Helm とは
kubernetes(以下k8s) におけるパッケージマネージャツールです。
k8s でサービスを動作させるために必要なすべての k8s マニフェストファイルがパッケージングされてるので、 だれでも何度でも簡単にサービスデプロイをすることができます。
公式サイト: https://helm.sh/ja/docs/
AWS の EKS ドキュメントにも載ってるからデファクトスタンダードと思ってます。
参考: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/helm.html
Helm の主要コンポーネント
Helm で覚えておくといい主要コンポーネントは以下です。
Key | Value |
---|---|
Chart | Helm の各種サービスパッケージのこと。Chart は k8s マニフェストファイルの集合。 |
Repository | Chart の一つ上の単位。Repository の中に一つ以上の Chart が含まれる。 |
Helm Hub | Helm のリモートリポジトリ。ここから欲しい Repository をローカルにダウンロードする。 |
Release | Chart のインスタンス。つまり k8s クラスター上にデプロイされた k8s オブジェクトの集合体を指す。 |
各コンポーネントの関係性のイメージは以下になります。
① Helm CLI が、Helm Hub から実行ホストに、Repository をダウンロードします。
Chart は マニフェストファイルの集合です。
②-1 Helm CLI が kubectl にダウンロードした Chart を、kubernetes(以下 k8s) 環境にデプロイするようリクエストします。
②-2 kubectl が、k8s クラスター上に k8s オブジェクトをデプロイします。これらは Release として Helm CLI に管理されます。
NGINX Pod のデプロイ手順
では前知識はこの辺にして、EKS の NGINX Pod を作成していきます。
前提条件
以下を事前に確認してください。
- EKS クラスターがデプロイされてる
- 実行ホストに必要なパッケージがインストールされてる
- 実行ホストがデプロイ済みの EKS クラスターに接続できる
EKS クラスターがデプロイされてる
EKS クラスターを任意の AWS アカウントにデプロイしてください。ワーカーノードについては最小構成で問題ないです。
デプロイしたことないよって人は以下をご参考ください。
なお、本ブログは以下のクラスターバージョンでの動作を確認しています。
v1.20
実行ホストに必要なパッケージがインストールされてる
①本ブログは WSL2 on Windows での動作を確認しています。
> wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2
②Helm CLIを実行する予定のホストに以下のパッケージをインストールしてください。
Package | Use |
---|---|
kubectl | Helm CLI が API サーバをたたく際に使用する |
以下 kubectl バージョンでの動作を確認してます。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"}
実行ホストが EKS クラスターを操作できる
今回は EKS クラスターに複数の k8s オブジェクトをデプロイしていくので、Admin 相当の権限で操作を行います。(※1)
Admin 相当の権限は、EKS クラスターをデプロイした IAM ユーザ, IAM ロールと自動的にマッピングされるので、それをそのまま実行ホストでも利用する想定です。
※1 本番環境の場合は、必ず最小権限に絞ることをお勧めします。
NGINXのデプロイ
Helmのダウンロード
まずは Helm CLIをダウンロードしましょう。
今回は、以下 Github から直接パッケージをダウンロードします。(※2)
https://github.com/helm/helm/releases/tag/v3.5.4
$ wget helm-v3.5.4-linux-amd64.tar.gz.asc -P ~/ -O helm_dir.tar $ ls ~/ //確認用
※2 Homebrew からもインストール可能です。
ダウンロードした tar ファイルを解凍して、Helm CLIを /usr/local/bin
以下にインストールします。
$ tar -xzvf ~/helm_dir.tar $ sudo mv ~/helm_dir/helm /usr/local/bin $ which helm //確認用
インストールが完了したら、適切に Helm CLIが実行できるか確認してください。
完了後は、不要なファイル・ディレクトリを削除してください。
$ helm version $ rm helm_dir.tar $ rm -rf helm_dir
Nginx Chart のダウンロード
Helm をインストールしたところで、早速デプロイしたいところですが、
先に Helm Hub から 実行ホストに、 Nginx Chart を含むリポジトリをダウンロードする必要があります。
これは、Helm CLIインストール直後はリポジトリが存在しないためです。
$ helm search repo Error: no repositories configured
ということで早速リポジトリのダウンロードします。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add {{任意の名前}} {{Repository_URL}}
でリモートリポジトリを任意の名前で実行ホストにダウンロードできます。
なお今回は、bitnami リポジトリをダウンロードしています。
bitnami を選んだ理由はググって一番上に出てきたからですが、vmware によって開発されたリポジトリのため、安全だと思います。
$ helm search repo
リポジトリがダウンロードされたらもう一度、リポジトリの検索をかけてみましょう。今度はちゃんとリポジトリとChart の一覧が取得されるはずです。
$ helm search repo | grep nginx
Nginx Chart も無事ダウンロードできてることが確認できます。
Nginx Chart のデプロイ
長かったですが、ついに Nginx Chart をデプロイします。
$ kubeclt config current-context $ helm install my-nginx bitnami/nginx
先ほどダウンロードした bitnami リポジトリの Nginx Chart を使って、Nginx Chart をデプロイします。
最初に書きましたが、Helm CLI は kubectl を使用してデプロイします。
従って、デプロイ先クラスターの接続情報がセットされているか最初に確認する必要があるので、 kubectl の現在コンテキストを確認しています。
helm install {{任意の名前}} {{Chart 名}}
で、任意の名前でChart を k8s クラスターにデプロイ出来ます。
$ helm list //確認用
デプロイ後は上記のコマンドで、デプロイしたChart を確認することができます。
デプロイ後の動作確認
helm list
でChart がデプロイできてることを確認できましたが、
もう少し詳細に動作確認をしましょう。
$ kubectl get pod
まずは、Nginx Pod がデプロイされているか確認します。 なおオプションを付けずに実行しているので、今回は default ネームスペースにデプロイされます。
Nginx Pod に接続するために Service もできてるいるので合わせて確認してください。
$ kubectl get svc -w nginx
なお、EKS クラスターの場合、Service の裏側は ELB になります。
従ってマネコンの ELB ページから、ELB がデプロイされてることも確認できます。
最後に、Service に付与された DNS 名(External IP)にアクセスしてみてください。
Nginx のページが表示されます!
[画像]
後片付け
最後に後片付けです。
Nginx Chart の削除
$ helm list $ helm delete nginx $ helm list //消えてれば OK
bitnami Repository の削除
$ helm repo remove bitnami $ helm search repo | grep bitnami
Helm CLI の削除
$ sudo rm /usr/local/helm
EKS クラスターの削除
詳細は述べませんが、EKS クラスターおよび、ノードは課金対象なので不要であれば削除をお忘れなく!
Tips
Helm Hub Chart の探し方
公式の Helm Stable Chart について
$ helm repo add stable https://charts.helm.sh/stable $ helm search repo
まとめ
菅谷 歩 (記事一覧)