Kubernetesワークロードは、Kubernetesクラスターでアプリケーションまたはサービスを実行するポッドとコンテナーのセットです。 ポッドの安定性とサービスの継続性を確保するために、ワークロードのデプロイ、スケーリング、更新、復元などの操作をワークロードで実行できます。 このトピックでは、Deployment、StatefulSet、Job、CronJobなど、さまざまな種類のKubernetesワークロードについて説明します。
ポッド
ポッドは、Kubernetesでアプリケーション用に作成または管理できる最小の配置可能単位です。 ポッドは、1つ以上のコンテナ、ストレージリソース、一意のIPアドレス、およびコンテナの実行方法を指定する構成をカプセル化します。 ほとんどの場合、Kubernetesユーザーは直接ポッドを作成しません。 代わりに、Kubernetesでは、DeploymentsやStatefulSetsなどのコントローラーを使用してポッドを管理できます。
デプロイメントとStatefulSets
デプロイ
以前は、KubernetesはReplicaSetコントローラーを使用して、レプリケートされたポッド、ラベルセレクター、およびポッドテンプレートの数を指定していました。 現在、KubernetesはDeploymentコントローラーを使用してReplicaSetコントローラーを管理しています。 これにより、Kubernetesはポッドを間接的に管理および制御できます。
デプロイメントは、マイクロサービスアーキテクチャを使用するwebサーバーやアプリケーションなど、データの永続性や要求の順序に影響されないシナリオに適しています。
シナリオ | 説明 |
ステートレスwebサービス | 変動するリクエストを処理する必要があるフロントエンドwebサービス。 デプロイは、ポッドの水平方向のスケーリング、更新、およびロールバックをサポートします。 |
マイクロサービスアーキテクチャを使用するアプリケーション | 複数のマイクロサービスで構成されるシステムは、各サービスを個別にデプロイします。 各サービスには、独立したライフサイクルと独立したスケーリング要件があります。 デプロイメントを使用して、各マイクロサービスを個別にデプロイできます。 |
StatefulSet
展開によって管理されるポッドはステートレスであり、互いに独立しています。 特定のシナリオでは、デプロイメントが要件を満たすことができません。 たとえば、アクティブ /スタンバイモードの分散データベース用に作成されたポッドはステートフルで、相互に依存します。 この場合、StatefulSetsを使用してポッドを管理できます。
StatefulSetsは、データベースや分散ストレージシステムなど、永続ストレージと順序付き展開が必要なシナリオに適しています。
シナリオ | 説明 |
Statefulデータベース | ほとんどのステートフルデータベースは永続的なストレージを必要とし、ポッドが再スケジュールされた後も同じネットワーク識別子とポッドデータを維持する必要があります。 たとえば、MySQLデータベース用に作成された各ポッドには、ポッドの再起動後も変更されない特定のデータと設定が必要です。 |
分散メッセージキューサービス | 分散メッセージキューサービスには、ノードステータスの一貫性とログの永続性が必要です。 たとえば、Apache Kafkaでは、ブローカーノード間で厳密なデータ一貫性が必要です。 さらに、データの損失を防ぐために、ログを永続ボリューム (PV) に永続化する必要があります。 |
デプロイメントとStatefulSetsの違い
次の表では、DeploymentsとStatefulSetsを比較して、DeploymentsとStatefulSetsを選択できます。
項目 | デプロイ | StatefulSet |
シナリオ | webサーバーやAPIサービスなどのステートレスアプリケーションを対象としています。 デプロイは、迅速なスケーリングとローリング更新が必要なシナリオに適しています。 | データベースや分散ファイルシステムなどのステートフルアプリケーションを対象としています。 StatefulSetsは、永続ストレージと順序付きデプロイが必要なシナリオに適しています。 |
永続ストレージ | すべてのレプリケートされたポッドは、同じ永続ボリュームクレーム (PVC) を共有します。 ポッドが再スケジュールまたは更新されても、データの一貫性を確保するために、元のPVCはポッドにマウントされます。 | 各ポッドは、データの永続性を実現するために個別のPVCでマウントされます。 ポッドは、データの一貫性を確保するために固定形式で名前が付けられます。 ポッドを再起動または再スケジュールしても、元のPVCはまだポッドにマウントされています。 |
ネットワーク識別子 | ポッドには固定識別子がありません。 ポッドの名前とIPアドレスは、作成時に動的に生成されます。 ポッドの識別子、名前、およびIPアドレスは、ポッドが再作成されるたびに変更されます。 | ポッドの識別子は、 |
ポリシーの更新 |
|
|
サービス検出 | さまざまなサービスタイプに基づいてサービス検出を実装し、ポッドの負荷分散を実行します。 詳細については、「クイックスタート」をご参照ください。 | 各ポッドには、一意の固定ドメイン名があります。 StatefulSetsは、ヘッドレスサービスを使用してサービス検出を実装し、各ポッドに直接アクセスできるようにします。 |
DaemonSets
DaemonSetは、クラスター内の各ノードがレプリケートされたポッドを実行することを保証します。 DaemonSetsは、ログ収集サービス、リソース監視システム、ネットワークプラグインなど、すべてのノードで実行する必要があるバックグラウンドサービスまたは監視プロセスに適しています。 ノードがクラスターに追加またはクラスターから削除されると、DaemonSetは自動的にノードにポッドを作成するか、ノードからポッドを削除します。
DaemonSetsは、Kubernetesクラスターの各ノードで同じデーモンを実行するのに適しています。
シナリオ | 説明 |
ログ収集 | DaemonSetsは、Logtailなどのログ収集ツールのデプロイに適しています。 各ノードのログファイルを収集し、処理し、集中ログ管理システムに配信できるように、クラスタ内の各ノードでログ収集ツールを実行する必要があります。 |
監視エージェント | DaemonSetsは、リソース使用量メトリックを収集するNode ExporterやDatadog AgentなどのPrometheusモニタリングエージェントをデプロイするために使用されます。 これにより、ノードのステータスとパフォーマンスを監視できます。 |
求人とCronJobs
Kubernetesでは、ジョブは1回限りのタスクの実行に使用され、CronJobsはスケジュールされたタスクの実行に使用されます。 ジョブとCronJobsは、バッチ処理タスクやデータ処理ジョブなど、オンデマンドで実行されるワークロードに適しています。
ジョブは、タスクを実行するための1つ以上のポッドを作成します。 タスクが完了すると、ジョブによって作成されたポッドは自動的に終了します。 ジョブは、データ処理タスクやデータバックアップタスクなどの1回限りのタスクに適しています。
CronJobは、cron式で指定されたスケジュールに基づいてジョブを作成します。 cron式は、分、時間、日、週、および月の組み合わせをサポートします。 CronJobsは、定期的なデータベースバックアップタスクや定期的なログ削除タスクなどの定期的なタスクに適しています。
ワークロードの管理
ACKクラスターでワークロードを管理するには、API操作を呼び出すか、kubectlコマンドラインツールを使用するか、ACKコンソールを使用します。 これらの方法を使用して、アプリケーションを効率的にデプロイ、監視、およびスケーリングできます。
ACKコンソールの使用
ACKコンソールを使用して、効率的、便利、視覚化された方法でワークロードを作成、管理、および監視できます。 次のトピックでは、ACKコンソールでさまざまなタイプのワークロードを管理する方法について説明します。
kubectlの使用
クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続できます。 その後、ビジネス要件に基づいてクラスターを管理できます。 たとえば、アプリケーションのデプロイ、リソースの管理、クラスターのモニタリングなどを行うことができます。
API
API操作を呼び出すことで、ワークロードを作成、更新、削除、および監視できます。 詳細については、「Kubernetes APIの使用」をご参照ください。
よくある質問
ワークロードの使用中に問題が発生した場合は、ソリューションのFAQ about workloadsを参照してください。
関連ドキュメント
推奨されるワークロード設定の詳細については、「推奨されるワークロード設定」をご参照ください。
ポッドの自動スケーリングを有効にする方法の詳細については、「自動スケーリングの概要」をご参照ください。
ポッドスケジューリングポリシーの詳細については、「スケジューリングの概要」をご参照ください。
アプリケーションへのアクセス、サービス検出の実装、および負荷分散の実装方法の詳細については、「はじめに」をご参照ください。
クラスター内のサービスへの外部トラフィックを管理する方法の詳細については、「Ingressの概要」をご参照ください。
ポッドの永続ストレージを有効にする方法の詳細については、「ストレージの基本」をご参照ください。
シークレットを使用せずにイメージをACKクラスターにプルする方法の詳細については、「シークレットを使用せずにイメージをプルする」をご参照ください。
中国本土の外部にあるクロスリージョンコンテナイメージをプルする方法の詳細については、「コンテナイメージのクロスリージョンアクセラレーションプル」をご参照ください。