Kubernetes では、新しく作成されたポッドとスケジュールされていないポッドは、要件を満たすノードに自動的にスケジュールされます。 ノードのアフィニティ、テイント、トライレイションを使用することで、ポッドがスケジュールされるノードをより細かく制御できます。 ArcGIS Enterprise on Kubernetes では、ArcGIS Enterprise Manager から、新しく作成された GIS サービス ポッドの配置を管理できます。
ノードのアフィニティを使用すると、ポッドが特定のラベル付きノードで実行されるよう制限するルールを指定できます。 テイントは、ポッドを拒否するためにノードに適用され、トライレイションはテイントを許容するためポッドに適用されます。 詳細については、Kubernetes のドキュメントをご参照ください。
ノードのアフィニティ、テイント、トライレイションを組み合わせることで、ワークロードの配置のきめ細かい制御、分離の強化、リソース割り当ての最適化を行い、Kubernetes クラスター内のコンプライアンス要件を効果的に満たすことができます。
- 特殊な要件によるワークロードの分離 - ラベルとノードのアフィニティ ルールを使用して、特定のポッドが専用ノードにスケジュールされるようにします。 テイントを使用して、CPU やメモリの要件が高いなどの特定の特性を持つノードを、ArcGIS ワークロード専用としてマークします。 次に、サービス ポッドにトライレイションを適用して、必要なリソースを持つノードにスケジュールされるようにします。
- リソースの割り当ての最適化 - リソースのオーバーロードを防ぐためにリソースが制限されているノードにテイントを適用し、これらのノードのリソース制約に一致するようにサービス ポッドにトライレイションを定義します。 ノードのアフィニティをテイントおよびトライレイションと組み合わせて、サービス ポッドがリソース要件を満たすノードにのみスケジュールされるようにします。
- ジオロケーションベースのスケジュール設定 - データの場所や特定の規制への準拠が必要なアプリケーションの場合は、ノードのアフィニティを使用して、ノードの地理的な場所に基づいてサービス ポッドをスケジュールします。 物理的な場所やデータ主権の規制に基づいてノードをテイントし、サービス ポッドにトライレイションを適用して、ノード上でスケジュールされ、必要な場所の制約に準拠するようにします。
自動スケーリングは、ワークロードの需要に基づいてポッドの数を動的に調整することで、ノードのアフィニティとトライレイションの使用を強化します。 この動的スケーリングにより、特定の要件を満たすノードや必要なリソースが利用できるノードにポッドが効率的にスケジュールされ、リソースの割り当てが最適化されます。 自動スケーリングをノードのアフィニティおよびトライレイションと組み合わせることで、Kubernetes クラスターは、ノードの制約と設定に準拠しながらワークロードの変動に適応し、リソースの使用率、パフォーマンス、スケーラビリティの向上を実現します。 自動スケーリングについての詳細は「サービスのスケーリング」をご参照ください。
シナリオ
サービス上のポッド配置の管理が組織にどのようなメリットをもたらすかをより深く理解するには、次のシナリオを確認してください。
シナリオ 1 - パブリック マッピング サービスでの季節的なトラフィックの急増
ある公共団体は、地元の祭りの期間中、トラフィックの大幅な増加を経験します。 イベント情報を得ようと Web マップにアクセスするユーザーは、基になるマップ サービスへの需要が高いため、遅延に遭遇します。 これに対処するため、組織管理者は以下を行います。
- キーと値のペア「high-performance: true」が指定された高パフォーマンスの CPU やメモリのリソースを使用してノードを構成します。
- 「workload=high-performance:NoSchedule」が指定された高パフォーマンス ノードをテイントします。
- ノード アフィニティ ルールを適用して、高パフォーマンスの CPU およびメモリ リソースのノードにマップ サービス ポッドがスケジュールされるようにします。
- [Type] - Preferred
- [Key] - high-performance
- [Operator] - Exists
- [Value] - true
- ポッドが高パフォーマンスのワークロードにテイントされたノード上で実行できるようにトライレイションを適用し、マップ サービスがトラフィックの急増を処理できるようにします。
- [Effect] - NoSchedule
- [Key] - workload
- [Operator] - Equal
- [Value] - high-performance
シナリオ 2 - 環境モニタリングのためのデータ処理
環境局は、土地利用の変化を監視するために一連の地理空間解析を行っています。 この解析は膨大な計算リソースを要し、当局はこの目的のために GPU を備えた専用ノードを用意しています。 他のサービスとリソースを競合せずに地理空間解析を効果的に実行するため、組織管理者は以下を行います。
- キーと値のペア「gpu: true」を使用して GPU 対応ノードを構成します。
- 「workload=high-resource:NoSchedule」を使用して GPU ノードをテイントし、リソースをあまり消費しないポッドがそこにスケジュールされないようにします。
- ノードのアフィニティ ルールを適用して、GPU ノードに解析ポッドをスケジュールします。
- [Type] - Required
- [Key] - gpu
- [Operator] - In
- [Value] - true
- テイントされた GPU ノード上でポッドを実行できるようにトライレイションを適用します。
- [Effect] - NoSchedule
- [Key] - workload
- [Operator] - Equal
- [Value] - high-resource
シナリオ 3 - 共有フィーチャ サービスのためのリソースの最適化
市の GIS 部門には、頻繁に使用されるわけではないものの、総じて単一サービスの実施に負荷をかけるフィーチャ サービスが多数あります。 この部門がシステムに過負荷をかけずにサービスの可用性を維持できるようにするため、組織管理者は以下を行います。
- キー「resource-constrained」を使用してノードを構成します。
- 「resource-constrained:PreferNoSchedule」を使用してリソース制約ノードをテイントします。
- ノードのアフィニティ ルールを適用して、リソースの可用性が低いノードのスケジュールを優先します。
- [Type] - Preferred
- [Key] - resource-constrained
- [Operator] - DoesNotExist
- フィーチャ サービス ポッドにトライレイションを適用して、制約にかかわらず必ずテイントされたノードでスケジュールできるようにします。
- [Effect] - PreferNoSchedule
- [Key] - resource-constrained
- [Operator] - Exists
ポッドの配置の管理
ポッドの配置管理に先立ち、ノードのアフィニティ定義に使用するラベルと、トライレイションを設定するテイントを追加して、ノード グループを構成します。
注意:
多くの環境では、ノード プールまたはノード グループを使用してワークロードをグループ化できます。 このワークフローでは、個別ノードではなくノードのグループにラベルおよびテイントを適用することをおすすめします。
新しく作成された GIS サービス ポッドのノードのアフィニティ ルールとトライレイションを設定するには、次の手順を実行します。
- 管理者として ArcGIS Enterprise Manager にサイン インします。
- サイドバーの [サービス] ボタンをクリックします。
- 管理する GIS サービスを選択して、[ポッドの配置] タブをクリックします。
- ポッドにノード アフィニティ ルールを追加するには、[ノード アフィニティ] セクションに以下の情報を入力して [追加] をクリックします。
- [Type] - ノード アフィニティのタイプ。 次のタイプを使用できます。
- [Preferred] (PreferredDuringSchedulingIgnoredDuringExecution) - ポッドは、ルールを満たすノードに優先的にスケジュールされます。
- [Required] (RequiredDuringSchedulingIgnoredDuringExecution) - ポッドは、ルールを満たすノードにスケジュールされなければなりません。
- [Key] - ルールが一致する必要があるノード ラベルまたはアノテーションのキー。
- [Operator] - ルールのオペレーター。 次のオペレーターを使用できます。
- [In] - ノード ラベルまたはアノテーションは、指定された値のリストに含まれている必要があります。
- [Not in] - ノード ラベルまたはアノテーションは、指定された値のリストに含まれてはなりません。
- [Exists] - ノードには指定されたラベルまたはアノテーションが必要です。
- [Does not exist] - ノードには指定されたラベルまたはアノテーションがあってはなりません。
- [Value] - ノード ラベルまたはアノテーションと一致する値のリスト。
- [Type] - ノード アフィニティのタイプ。 次のタイプを使用できます。
- ポッドにトライレイションを追加するには、[トライレイション] セクションに以下の情報を入力して [追加] をクリックします。
- [Effect] - トライレイションが一致する必要があるテイントの効果。 次の効果を使用できます。
- [No schedule] - 一致するトライレイションがないと、新しいポッドはテイントされたノードにスケジュールされません。
- [Prefer no schedule] - 新しいポッドは、一致するトライレイションのないテイント ノードにスケジュールされることを回避しようとしますが、保証はされません。
- [Key] - トライレイションが一致する必要のあるテイントのキー。
- [Operator] - 容認に使用するオペレーター。 次のオペレーターを使用できます。
- [Equal] - ポッドは指定されたキーと値を持つテイントを許容します。
- [Exists] - ポッドは指定されたキーを持つテイントを許容します。
- [Value] - 演算子が Equal と設定されている場合、トライレイションが一致する必要のあるテイントの値。
- [Effect] - トライレイションが一致する必要があるテイントの効果。 次の効果を使用できます。
- [保存] をクリックします。
ノード アフィニティ ルールおよびトライレイションを編集するには、各リストの横にある [編集] ボタン をクリックするか、[削除] ボタン をクリックしてそれらを削除します。
注意:
変更が行われ、ルールまたはトライレイションが満たされなくなった場合でも、ノード上ですでに実行されているポッドは終了しません。