目次
Kubernetes Deploymentについて概要、特徴、メリット、設定方法、ユースケースについて
Kubernetes Deployment (以下、 Deployment )はアプリケーションライフサイクル全体をサポートし、開発者や運用チームにとって欠かせない存在です。
本記事では、 Deployment について概要、特徴、メリット、設定方法、ユースケースについて解説します。
1. Deployment とは
Deployment は Kubernetes プラットフォームにおいてアプリケーションを効果的かつ柔軟に運用する仕組みです。主に ReplicaSet の世代管理や、アプリケーションのコンテナを含む Pod を管理し、デプロイプロセスを制御します。

図版出典:入門 Kubernetes
それぞれのコンポーネントの違いについて
Deploymentを理解するために関連するコンポーネントの違いについて解説します。
Pod
Pod は Kubernetes 上で実行される最小のデプロイ単位であり、 1 つ以上のコンテナとそれに関連するリソースを含みます。同じ Pod 内のコンテナは同じネットワーク名前空間とストレージを共有し、相互に通信することができます。

図版出典:株式会社アイオス コーポレートブログ
ReplicaSet
ReplicaSet は複数の同一の Pod のレプリカを確実に維持するためのリソースオブジェクトであり、障害時に自動的に新しい Pod を起動してレプリカ数を一定に保つ機能を持っています。
直接的に Pod を作成するのではなく、 ReplicaSet を通じて Pod が作成されます。ReplicaSet は Pod の数を制御し、失敗した Pod を自動的に再作成する機能を持っています。

図版出典:株式会社アイオス コーポレートブログ
Deployment
本記事のテーマである Deployment は ReplicaSet を使用して Pod のレプリカを制御し、ローリングアップデートやロールバックなどの機能を提供します。
Deployment を使用することで、アプリケーションのスケーリング、更新、ローリングアップデートなどを簡単に行うことができます。

図版出典:株式会社アイオス コーポレートブログ
2. Deploymentの機能
Deployment の主な機能について解説します。
レプリケーションとスケーリング
Pod の ReplicaSets を作成および管理し、アプリケーションの複数のインスタンスを作成することができます。アプリケーションの負荷に応じてレプリカ数を自動または手動で調整することでスケーリング機能を提供します。
デプロイメント戦略
アプリケーションの新しいバージョンを徐々にデプロイするローリングアップデート機能を提供します。ローリングアップデートの途中で問題が発生した場合でも、前のバージョンに簡単にロールバックできます。
自動復旧機能
Pod がクラッシュした場合、 Deployment は自動的に新しい Pod を起動してアプリケーションの可用性を維持する機能を提供します。またノードがダウンした場合、 Deployment は新しいノード上で Pod を再スケジュールしてアプリケーションの稼働を確保します。
3. Deploymentのメリット
Deployment 機能によって得られるメリットについて解説します。柔軟な設定管理
環境変数や構成の変更を容易に行え、アプリケーションの設定を柔軟に管理できます。またデプロイ中にもアプリケーションの構成を変更できます。さらにデプロイの柔軟な定義とコンテナ化により、異なる環境でアプリケーションを簡単に展開できるようになります。
またアプリケーションのデプロイに関する設定をYAMLなどで定義し、再利用可能で理解しやすい形で管理できるようになります。
スケーラビリティ(可用性)の向上
アプリケーションのレプリカ数を動的にスケーリングすることで、負荷に応じてリソースを効率的に利用できるようになります。またローリングアップデートや自動復旧機能により、アプリケーションの停止を最小限に抑え、可用性を向上させることができるようになります。
デプロイメントのトラブルシューティングや監視の簡素化
デプロイメントの履歴を保持し、各段階での状態や変更点を確認でき、トラブルシューティングや監視が容易に行えるようになります。
これらのメリットにより、 Deployment は Kubernetes 環境におけるアプリケーションのデプロイと運用を効率化し、堅牢性を高める役割を果たします。
4. Deploymentの設定
Kubernetes Deploymentの設定は、アプリケーションのデプロイと管理に関する重要なパラメータや構成を定義することができます。 Deployment の設定に関する主要な要素について紹介します。
Podテンプレート
spec.template フィールドを使用して、デプロイされる Pod のテンプレートを指定します。これにはコンテナイメージ、ポートの定義、環境変数、リソース要件などが含まれますPod の必須フィールドに加えて、適切なラベルと適切な再起動ポリシーを指定する必要があります。
- ※1 参考記事:
- Podテンプレート
レプリカ数
spec.replicas フィールドを使用して、デプロイされるPodのレプリカ数を指定します。これにより、アプリケーションのスケーリングが可能となります。
- ※2 参考記事:
- レプリカ数について
ローリングアップデート戦略
spec.strategy フィールドを使用して、アプリケーションのアップデート戦略を定義します。例えば、ローリングアップデートの場合、 type: RollingUpdate と指定し、 maxSurge および maxUnavailable を設定します。
- ※3 参考記事:
- 更新戦略
環境変数と構成
spec.template.spec.containers.env フィールドを使用して、コンテナ内の環境変数を設定します。また、ConfigMapやSecretを使用して外部から設定を注入することもできます。 Secrets や ConfigMaps は機密情報の管理にも役立つ機能です。
- ※4 参考記事:
- Creating a Deployment
ReadinessおよびLivenessプローブの定義
Pod の健全性を確認するために、 Readiness および Liveness プローブをすることで、Pod の起動やアプリケーションの正常性を監視できます。
Horizontal Pod Autoscaler (HPA) の仕様
負荷に応じて自動的に Pod の数をスケーリングするために、 Horizontal Pod Autoscaler( HPA )を活用することができます。
- ※6 参考記事:
- Horizontal Pod Autoscalerウォークスルー
これらの設定により、 Deployment はアプリケーションのデプロイ、スケーリング、アップデートなどを効果的に管理することができるようになります。各種設定はアプリケーションや利用ケースに応じて柔軟に調整することができます。
5. Deploymentのユースケース
Deployment 機能、特徴、メリットを活用したユースケースを紹介します。
アプリケーションのデプロイメントとスケーリング
Deployment はアプリケーションのコンテナを複数の Pod にデプロイし、レプリカ数を柔軟にスケーリングするために使用します。これにより、負荷の変動に対応し、アプリケーションの可用性を確保できます。
ローリングアップデートとロールバック
Deployment はアプリケーションの新しいバージョンを段階的にデプロイする際に使用します。ローリングアップデートにより、アプリケーションの停止を最小限に抑えつつ新しいバージョンへの切り替えが行え、問題が発生した場合には簡単にロールバックできます。
自動復旧
Deployment は Pod がクラッシュした場合やノードがダウンした場合に、自動的に新しいPod を起動してアプリケーションの可用性を確保します。これにより、障害発生時のアプリケーションの自動回復が可能となります。
Blue-Greenデプロイメント
Deployment は Blue-Green デプロイメントの実現にも利用されます。新しいバージョンのアプリケーションを Blue 環境と呼ばれる新しい環境にデプロイし、トラフィックを徐々に Green 環境(旧バージョン)から切り替えることができます。
CI/CDパイプラインの一部
インフラストラクチャコードと組み合わせて、 CI / CD (継続的インテグレーションおよび継続的デリバリー)パイプラインの一部として使用され、アプリケーションの自動デプロイメントにも利用されます。
6. まとめ
Deployment はアプリケーションのデプロイと管理において重要な機能を提供します。アプリケーションの安定性と可用性が向上し、ユーザーはシームレスなアプリケーションの展開と運用が可能となります。 Deployment は、クラウドネイティブな環境でのアプリケーションデプロイにおいて不可欠な存在です。
Kubernetes の運用を相談したい

Contactお問い合わせ
お見積もり・ご相談など、お気軽にお問い合わせください。