ワークロードのデプロイの概要

コンテナ化されたアプリケーションとその他のワークロードを Kubernetes Engine クラスタにデプロイして管理するには、Kubernetes システムを使用して Kubernetes コントローラ オブジェクトを作成します。これらのコントローラ オブジェクトは、クラスタ上で実行中のアプリケーション、デーモン、バッチジョブを表します。

コントローラ オブジェクトを作成するには、Kubernetes API または kubectlgcloud によってインストールされる、Kubernetes へのコマンドライン インターフェース)を使用できます。通常は、必要な Kubernetes コントローラ オブジェクトの表現を YAML 設定ファイルとして作成してから、そのファイルを Kubernetes API または kubectl コマンドライン インターフェースで使用します。

ワークロードのタイプ

Kubernetes は、実行可能なさまざまな種類のワークロードに対応するさまざまな種類のコントローラ オブジェクトを提供します。特定のコントローラ オブジェクトは、特定のタイプのワークロードを表すのに適しています。以降のセクションでは、一般的なタイプのワークロードと、クラスタで実行するために作成可能な Kubernetes コントローラ オブジェクトについて説明します。次のようなものがあります。

  • ステートレス アプリケーション
  • ステートフル アプリケーション
  • バッチジョブ
  • デーモン

ステートレス アプリケーション

ステートレス アプリケーションは、状態を保持せず、永続ストレージにデータを保存しません。ユーザーデータとセッション データはすべて、クライアントで維持されます。

ステートレス アプリケーションの例としては、Nginx などのウェブ フロントエンド、Apache Tomcat などのウェブサーバー、およびその他のウェブ アプリケーションが挙げられます。

Kubernetes Deployment を作成すれば、クラスタにステートレス アプリケーションをデプロイすることができます。Deployment によって作成されるポッドは一意ではなく、状態を保持しないため、ステートレス アプリケーションのスケーリングや更新が容易になります。

ステートフル アプリケーション

ステートフル アプリケーションは、その状態を保存または維持する必要があります。ステートフル アプリケーションはサーバーや他のユーザーによって使用されるデータを保存するために、永続ボリュームなどの永続ストレージを使用します。

ステートフル アプリケーションの例としては、MongoDB などのデータベースや Apache ZooKeeper などのメッセージ キューが挙げられます。

Kubernetes StatefulSet を作成すれば、ステートフル アプリケーションをデプロイすることができます。StatefulSet によって作成されたポッドは、一意の識別子が割り当てられ、順序付けされた安全な方法で更新できます。

バッチジョブ

バッチジョブは、完了するまで実行する、有限で、独立した、多くの場合並列のタスクを表します。バッチジョブの例として、電子メールの送信、動画のレンダリング、高度な計算の実行などの自動タスクまたはスケジュールされたタスクが挙げられます。

Kubernetes Job を作成すれば、クラスタ上でバッチタスクを実行して管理することができます。Job が完了する前にタスクを完了する必要があるポッドの数だけでなく、並列実行する必要があるポッドの最大数も指定できます。

デーモン

デーモンは、ユーザーの介入を必要とせずに、割り当てられたノードで継続的なバックグラウンド タスクを実行します。デーモンの例として、Fluentd などのログ収集機能やモニタリング サービスが挙げられます。

Kubernetes DaemonSet を作成すれば、クラスタにデーモンをデプロイすることができます。DaemonSet は、ノードごとに 1 つずつのポッドを作成します。DaemonSet によってデプロイする特定のノードを選択できます。

ワークロード オブジェクトを管理する

命令型と宣言型のメソッドを使用して、オブジェクトの作成、管理、および削除を行うことができます。以降のセクションでは、これらのメソッドと、それらの導入に使用可能な以下のツールについて説明します。

命令型コマンド

命令型コマンドでは、kubectl を使用してオブジェクトをすばやく作成、表示、更新、削除できます。このコマンドは、1 回限りのタスクやクラスタ内のアクティブなオブジェクトに変更を加える場合に便利です。命令型コマンドは、通常、クラスタにデプロイされたライブ オブジェクトを操作するために使用されます。

kubectl には、Kubernetes オブジェクトを作成または編集するための動詞駆動型コマンドがあります。次に例を示します。

  • run: クラスタ内に新しいオブジェクトを生成します。特に指定されなければ、run はデプロイ オブジェクトを作成します。run他のいくつかのジェネレータもサポートします。
  • expose: 新しいサービス オブジェクトを作成し、トラフィックの負荷を一連のラベル付きポッド全体にわたって分散します。
  • autoscale: 新しいオートスケーラー オブジェクトを作成し、Deployment などのコントローラ オブジェクトを自動的に水平方向にスケーリングします。

命令型コマンドを使用するのに、オブジェクト スキーマに精通している必要はなく、構成ファイルも必要としません。

命令型オブジェクト構成

命令型オブジェクト構成では、詳細なオブジェクト定義を含む構成ファイルを使用してオブジェクトの作成、更新、削除が行われます。オブジェクト構成ファイルをソース管理システムに保存することで、命令型コマンドよりも簡単に変更を監査できます。

kubectl applydeletereplace の操作は、構成ファイル、または構成ファイルが格納されたディレクトリを使用して実行できます。

宣言型オブジェクト構成

宣言型オブジェクト構成は、ローカルに保存された構成ファイルを操作しますが、実行する操作を明示的に定義する必要はありません。代わりに、操作は kubectl によってオブジェクト単位で自動的に検出されます。これは、さまざまな操作で複数の設定ファイルがあるディレクトリを使用する場合に便利です。宣言型オブジェクトを管理するには、オブジェクト スキーマと構成ファイルに精通している必要があります。

宣言型の方法でオブジェクトを作成または更新するには、kubectl apply を実行します。apply は、ライブ オブジェクト全体を読み取り、差分を計算してから、API サーバーにパッチ リクエストを送信してその差分をマージすることにより、オブジェクトを更新します。

Console

kubectl または API を使用してワークロードをデプロイした後は、GCP Console で GKE の [ワークロード] メニューを使用して、クラスタで実行中のワークロードを検査、管理、および編集できます。

このメニューは次のような機能を提供します。

  • YAML ベースのテキスト エディタを使用して、ウェブブラウザからライブ オブジェクトを編集できます。
  • 変更履歴、最近のイベントとアクティビティ、マネージド ポッドなどのオブジェクトに関する詳細情報を表示できます。
  • Deployment、Job、StatefulSet を簡単にスケーリングできます。
  • [操作] メニューから、Deployment の自動スケーリング、ローリング更新のトリガー、手動スケーリングが可能です。
  • Cloud Shell を使用して、任意のオブジェクトを検査、編集、削除できます。

API

GKE REST APIKubernetes APIGoogle Cloud クラウド ライブラリを使用することで、プログラムによってワークロードを作成および管理できます。

構成ファイル

前述の方法のいずれかを使用してワークロードをデプロイすると、GKE によってオブジェクトを表現する構成ファイルがクラスタに追加されます。

オブジェクトのライブ構成は、ローカル ファイルとは異なる場合があります。 Kubernetes オブジェクトを作成して表現するために、YAML が最も広く利用されています。JSON を使用することもできます。

Kubernetes オブジェクトの仕様、ステータス、Kubernetes API について詳しくは、Kubernetes オブジェクトを理解するKubernetes API リファレンスをご覧ください。

ライブ構成を検査する

Console

デプロイされたオブジェクトのライブ構成を検査するには、次の手順を実行します。

  1. GCP Console で Google Kubernetes Engine の [ワークロード] メニューに移動します。

    [ワークロード] メニューにアクセス

  2. 目的のワークロードを選択します。

  3. [YAML] をクリックします。

gcloud

デプロイされたオブジェクトのライブ設定を検査するには、次のコマンドを実行します。

kubectl get [OBJECT_TYPE] [OBJECT_NAME] -o yaml

[OBJECT_TYPE] には、deploymentstatefulsetjob、その他のオブジェクト タイプを指定できます。次に例を示します。

kubectl get deployment my-stateless-app -o yaml

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント