概要
Kubernetes デプロイメントとは、アプリケーションに宣言的アップデートを提供する、Kubernetes でのリソースオブジェクトです。デプロイメントによって、アプリケーションのライフサイクルを記述できます。たとえば、アプリケーションに使用するイメージ、配置する Pod の数、Pod をアップデートする方法などを記述できます。
Kubernetes オブジェクトを使って、Kubernetes システムにクラスタのワークロードの状態を通知できます。オブジェクトが作成された後、クラスタは連携しながらオブジェクトを存続させ、Kubernetes クラスタの目的の状態を維持します。
コンテナ化アプリケーションのアップデートを手作業で行うと、時間と手間がかかりがちです。サービスを次のバージョンにアップグレードするには、まず Pod の新しいバージョンを起動してから古いバージョンの Pod を停止し、新しいバージョンが正常に稼働したことを検証する必要があり、障害が発生した場合には全体を前のバージョンにロールバックすることもあります。
これらのステップを手動で実行すると人的ミスが発生し、適切にスクリプト化するには多大な労力が必要になります。いずれにしろ、リリースプロセスがボトルネックになってしまいます。
Kubernetes デプロイメントはこのプロセスを自動化し、繰り返し利用可能にします。デプロイメントはすべて Kubernetes バックエンドで管理され、アップデートプロセス全体はサーバー側で実行され、クライアントとのやり取りはありません。
デプロイメントにより、目的の数の Pod が実行され、常時利用できる状態になります。アップデートプロセスは全体が記録され、一時停止、続行、前バージョンへのロールバックというオプション付きでバージョン管理されます。
Kubernetes デプロイメント・オブジェクトでは、以下のことができます。
- レプリカセットまたは Pod のデプロイ
- Pod とレプリカセットのアップデート
- デプロイメントの前のバージョンへのロールバック
- デプロイメントのスケーリング
- デプロイメントの一時停止または続行
Kubernetes デプロイメントを使用したアプリケーション管理戦略
Kubernetes デプロイメントでアプリケーションを管理すると、アプリケーションをどのようにアップデートするかを選べます。デプロイメントの主なメリットは、一連の Pod を予測できる方法で起動および停止できることです。
ローリングアップデート戦略
ローリングアップデート戦略は、アプリケーションの Pod を管理しながら段階的に交換し、利用できる Pod 数が常に最小になるようにします。
デプロイメントではデフォルトで、利用不可の Pod 数が常に最大でも 25% を超えないようにします。また、目的の状態で指定された Pod 数の 25% を超えてオーバープロビジョニングすることもありません。
可用性しきい値を維持できる数の新しい Pod が利用可能になるまで古い Pod を強制終了せず、一定数の古い Pod が削除されるまで新しい Pod を作成しません。
デプロイメントオブジェクトでは、maxSurge フィールドと maxUnavailable フィールドで、Pod の利用可能な数と余剰数の範囲を制御できます。
ローリングアップデート戦略では、アップデートプロセス中にダウンタイムはありません。ただし、Pod の破壊を許容し、オペレーションを作成できるようにアプリケーションを設計する必要があります。
アップデートプロセス中は 2 つのバージョンのコンテナが同時に実行されるので、サービスの利用側にとって問題が発生する可能性があります。
再作成戦略
再作成戦略では、既存の Pod をすべて削除してから新しい Pod を作成します。Kubernetes はまず現在のバージョンのすべてのコンテナを停止し、次に古いコンテナの消滅と同時に新しいコンテナを起動します。
デプロイメントの再作成戦略では、古いバージョンのすべてのコンテナが停止し、新しいコンテナが要求を処理する準備が整うまでの間、ある程度のダウンタイムが発生します。
ただし、同時に 2 つのバージョンのコンテナが実行されることはないので、サービス利用側にとってはシンプルな構成になります。
Red Hat OpenShift による Kubernetes
Kubernetes の宣言的デプロイメントパターン
デプロイメントはマニフェストを記述して作成されます。このマニフェストは kubectl apply を使用して Kubernetes クラスタに適用されます。これで宣言的デプロイメントパターンを使用できます。Kubernetes の設定ファイルは YAML または JSON を使用して作成できます。
デプロイメントを作成するとき、目的の状態を記述します。すると Kubernetes がローリングまたは再作成のいずれかのデプロイメント戦略を使用して実装します。
宣言的デプロイメントパターンを使用すると、Kubernetes デプロイメントを使用して、Pod のグループに対してアップグレードおよびロールバックのプロセスを自動化して実行できます。Kubernetes パターンは、コンテナベースのアプリケーションとサービス向けの再利用可能な設計パターンです。
デプロイメントは、Pod テンプレート仕様を変更してアップデートできます。仕様フィールドが変更されると、アップデートのロールアウトが自動的に起動します。
ロールアウトのライフサイクルには、進行中、完了、失敗の状態があります。Pod のアップデートやスケーリングなどのアップデートタスクを実行しているとき、デプロイメントは進行中です。
完了は、すべてのタスクが正常に終了し、システムが目的の状態にあることを示します。デプロイメントでタスクを完了できないエラーが発生すると、失敗した状態になります。
kubectl rollout status コマンドを使用して、デプロイメントの状態を確認または監視できます。
Kubernetes を使い始めるためにサポートが必要な場合は、Kubernetes および Red Hat® OpenShift® クラスタにデプロイするコンテナの構築と管理を習得できます。このコースは、コンテナおよび Kubernetes に関する実践形式のトレーニングで、コンテナ管理の基本的な知識を習得できます。
エンタープライズ向け Kubernetes
Red Hat OpenShift はエンタープライズ対応 Kubernetes プラットフォームです。開発者にとってセルフサービスの環境となり、どのようなインフラストラクチャでも自動化されたフルスタックの処理を構築できます。
Red Hat OpenShift は、Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。
Red Hat OpenShift を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアが迅速かつ簡単にビジネスにつながるのを助けます。