第10章. デプロイ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
これまで、アプリケーションをコンテナとしてパッケージ化する方法、コンテナの複製セットを作成する方法、Ingressコントローラーを使用してサービスへのトラフィックをロードバランサする方法を見てきた。 これらのオブジェクト(Pod、ReplicaSets、Services)をすべて使って、アプリケーションのインスタンスを1つ構築することができる。しかし、これらのオブジェクトは、アプリケーションの新バージョンを毎日、あるいは毎週リリースすることを管理するのに役立つことはほとんどない。実際、PodとReplicaSetsはどちらも、変更されない特定のコンテナイメージに結び付けられることが期待されている。
デプロイオブジェクトは、新しいバージョンのリリースを管理するために存在する。 デプロイは、特定のバージョンを超越した形でデプロイされたアプリケーションを表す。さらに、デプロイによって、あるバージョンのコードから次のバージョンへ簡単に移行できる。この "ロールアウト "プロセスは、指定可能で慎重である。 個々のPodをアップグレードする間に、ユーザが設定可能な時間だけ待機する。また、正常性確認を使用して、新しいバージョンのアプリケーションが正しく動作していることを確認し、障害が多く発生した場合はデプロイを停止する。
デプロイを使えば、停止時間やエラーを発生させることなく、シンプルかつ確実に新しいバージョンのソフトウェアをロールアウトできる。デプロイによって実行されるソフトウェアロールアウトの実際の仕組みは、Kubernetesクラスタ自体で実行されるデプロイメントコントローラによって制御される。つまり、デプロイを無人で進行させても、正しく安全に動作する。このため、デプロイと継続的デリバリツールやサービスとのインテグレーションが容易になる。さらに、サーバ側で実行することで、インターネット接続が悪い場所や断続的な場所からでも安全にロールアウトを実行できる。地下鉄に乗っているときに、携帯電話からソフトウェアの新バージョンをロールアウトすることを想像してみてほしい。デプロイはこれを可能にし、安全にしてくれる!
注
Kubernetesがリリースされた当初、そのパワーを示す最も人気のあるデモの1つが「ローリングアップデート」だった。これは、1つのコマンドを使用して、停止時間なしで、リクエストを失うことなく、実行中のアプリケーションをシームレスにアップデートできることを示したものだ。このオリジナルのデモは、kubectl rolling-update コマンドに基づいていた。このコマンドは現在もコマンドラインツールで利用可能だが、その関数は大部分がデプロイメントオブジェクトに吸収されている。
初めてのデプロイ
Kubernetesのすべてのオブジェクトと同様に、デプロイは 、実行したい内容の詳細を提供する宣言的なYAMLオブジェクトとして表現できる。以下のケースでは、デプロイはkuard アプリケーションの単一のインスタンスを要求している:
apiVersion: apps/v1 kind: Deployment metadata: name: kuard labels: run: kuard spec: selector: matchLabels: run: kuard replicas: 1 template: ...