Helm を使って EKS クラスター上に Nginx Pod をデプロイしてみた

記事タイトルとURLをコピーする

記事目安...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 オブジェクトの集合体を指す。

各コンポーネントの関係性のイメージは以下になります。

f:id:swx-sugaya:20210830184553p:plain

① 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 アカウントにデプロイしてください。ワーカーノードについては最小構成で問題ないです。

デプロイしたことないよって人は以下をご参考ください。

blog.serverworks.co.jp

なお、本ブログは以下のクラスターバージョンでの動作を確認しています。

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 によって開発されたリポジトリのため、安全だと思います。

https://bitnami.com/


$ 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

まとめ

菅谷 歩 (記事一覧)