Member-only story

Kubernetesデプロイメントのアンチパターン10選 第3章

gavin.zhou
Jul 9, 2021

--

今回はKubernetesデプロイメントのアンチパターンをご紹介します。長い記事なので、パターンを2つずつ5回に分けて投稿いたします。今回は3回目です。

5.本番のコンテナで最新のタグをプルする

最新のタグを使用することは、特に本番では悪いことだと考えられています。ポッドは予期せず様々な理由でクラッシュするので、いつでもイメージをプルダウンすることができます。残念ながら、最新のタグでは、ビルドがいつ壊れたは判断がなかなかできません。どのバージョンの画像を実行していたのか?最後に動作していたのはいつか?ダウンタイムを最小限に抑えて稼働させる必要があるので、これは本番環境では特に問題となります。

デフォルトでは imagePullPolicy がAlways(常に)に設定されており、再起動時には常にイメージをプルダウンします。タグを指定しない場合、Kubernetesはデフォルトで最新のものを使用します。ただし、デプロイメントが更新されるのは、クラッシュが発生した場合(再起動時にポッドがイメージをプルダウンする場合)や、デプロイメントポッドのテンプレート(.spec.template)が変更された場合のみです。開発中に最新の例が意図した通りに動作しない例については、こちらフォーラムを参照してください。

imagePullPolicy を Always 以外の値に変更した場合でも、ポッドは再起動が必要な場合には (クラッシュや意図的な再起動が原因であるかどうかに関わらず) イメージをプルします。バージョニングを使用して、imagePullPolicy に v1.4.0 のような意味のあるタグを設定すると、最新の安定版にロールバックして、コードのおどこかでバグが見つかった時に、より簡単にトラブルシューティングすることができます。バージョニングのベストプラクティスについては、Semantic Versioning SpecificationGCP Best Practicesを参照してください。

特定の意味のあるDockerタグを使うことに加えて、コンテナはステートレスで不変であることも覚えておくべきです。また、コンテナはエフェメラルなものであることも忘れてはいけません(コンテナ外のデータは永続的なストレージに保存する必要があります)。一度コンテナを*スピンアップしたら、それを変更してはいけません。パッチも、アップデートもコンフィグレーションの変更もしてはいけません。コンフィグレーションを更新する必要がある場合は、更新されたコンフィグで新しいコンテナをデプロイしてください。

--

--

No responses yet