[初学者向け]Helmを学ぼう!~Chartの検証とテストについて理解を深める~

こんにちは。KOUKIです。

とある企業でWebエンジニアをやっています。

前回は、Helmの簡単な使い方やデプロイの方法を学びました。

今回は、Chartの検証方法やテスト方法を学びましょう。

検証環境

  • helm v3
  • mac
  • minikube

Kubernetesに関しては、こちらも参考にしてください。

dry-runオプション

Helmを使うと簡単にKubernetesへデプロイすることができることを学びました。

ちょっと復習を兼ねて、Nginxをインストールしてみましょう。

ローカルには、values.yamlがあります。

このファイルのValueをこれからkubernetesにデプロイするNginxのパラメータとして渡します。

–valuesオプションでファイルの値を、–setオプションで直接値をNginxに渡します。

下記のコマンドで、無事にデプロイできたことを確認します。

前置きが長くなりましたが、「–dry-run」オプションの話に移りましょう。

このコマンドは、デバッキングする時に便利です。

百聞は一見にしかず、ということで「–dry-run」オプション付きでコマンドを実行しましょう。

結構、ズラーっと出力されましたが、注目してほしい部分は、ここです。

書き換えた値である「NodePort」が確認できます。

つまり何が言いたいかというと、「–dry-run」オプションを使うとアプリをデプロイする前に、どの様なパラメーターでアプリがデプロイされるかわかるということです。

結構便利そうですよね。

helm get

「helm get」コマンドで、色々な情報を取得できます。

ロールバック

続いて、ロールバックの方法を見ていきましょう。

まず、現状の状況を確認します。

nginx01のTYPEは、NodePortですね。

このTYPEを誤って下記のように上書きしてしまったとしましょう。

エラーが出ましたね。下記のコマンドでもfailedになりました。

以下のステータスがあるらしいです。

STATUS DESCRIPTION
pending-install マニフェストの準備OK、Kubernetes送信前
deployed Kubernetesへマニフェストを送信し、デプロイ済み
pending-upgrade アップグレード用のマニフェストの準備OK、Kubernetes送信前
superseded アップグレード成功
pending-rollback ロールバック用のマニフェストの準備OK、Kubernetes送信前
uninstalling 現バージョンがアンインストールしている状態
uninstalled アンインストール済み
failed Kubernetseがリクエストされたマニフェストを拒否した状態

ちなみに、履歴は下記のコマンドで確認可能です。

helmはrevision管理ができるので、かなり便利ですよね。

上記の「REVISION」を使って、ロールバックをしてみましょう。

OKですね。

ちなみに、helm uninstallでアプリを消すと履歴が消えてしまうのですが、「–keep-history」オプションを付けて実行すると消えないです。

履歴が残っていれば、消してしまった状態でもロールバックが可能です。

最高ですね! 実運用でもめちゃくちゃ役に立ちそうです。

Helm Tips

アプリ名の動的変更1

helm install nginx01」でnginxをKubernetesへデプロイしたわけですが、名前の付け方に注意が必要です。

例えば、現在nginx01がデプロイされています。

この状態で、「helm install nginx01」を実行してみましょう。

上記の通り、重複した名前の場合はErrorで弾かれます。

このような場合は、動的に名前を変更できるようにしましょう。

こんな具合ですね。

いい感じですね

アプリ名の動的変更2

いやいや、めんどくさいよという方は、こんな「–generate-name」オプションもおすすめです。

これはリソース名をランダムに生成してくれます。

nginx-1637699827 」が–generate-nameオプションで生成されたnginxですね。

ネームスペースの自動作成

復習となりますが、Kubernetesではネームスペースを下記のコマンドで作成します。

Helmでは「-n」オプションでネームスペースを指定できるのですが、事前に作成されていないとエラーになります。

そんな時は、「–create-namespace」オプションが便利です。これは、ネームスペースを自動で作成してくれます。

apps ネームスペースが作成されましたね!

installオプション(CI/CD デプロイに使える)

アプリをアップグレードしたい場合は、以下のコマンドを実行します。

しかし、上記の様に「nginx10」がデプロイされていない環境下だとErrorが発生します。

こんな時に、「–install」オプションを付けると便利です。

Release “nginx10” does not exist. Installing it now.」とあるように、nginx10がデプロイされていない場合は、デプロイしてくれます。

これは、CI/CDに組み込む時に便利そうなコマンドです。

ちなみに、既にデプロイされている場合は、そのままUpgradeされます。

値の検証(CI/CDパイプライン)

少し前に、誤った値を渡した時のHelmのステータスについて触れました。

例えば、registryを適当な値に変更します。

この状態で、Podの様子を見てみましょう。

ImagePullBackOff」になってますね。このような状態にならないようにバリデーションチェックをしたいところです。

この様な場合は、「–wait」オプション付きで実行してみましょう。

–waitのデフォルトの待機時間は300sなので、–timeoutオプションで10sに変更してます。

ご覧の通り、エラーになってくれましたね!

これは、CI/CDパイプラインに組み込むとき、大変便利です。

Clean Up

最後に、環境を綺麗にしておきましょう。

次回

次回は、Helm ChartのTemplateについて深く学びましょう。

Helmまとめ

コメントを残す