Workload参照
Kubernetes v1.35 [alpha](disabled by default)PodをWorkloadオブジェクトに紐づけることで、そのPodがより大きなアプリケーションやグループに属していることを示すことができます。 これにより、スケジューラーは各Podを独立したエンティティとして扱うのではなく、グループとしての要件を考慮してスケジューリングを行います。
Workload参照の指定
GenericWorkloadフィーチャーゲートが有効な場合、Podマニフェストでspec.workloadRefフィールドを使用できます。
このフィールドは、同じ名前空間内のWorkloadリソースで定義された特定のPodグループへの紐づけを行います。
apiVersion: v1
kind: Pod
metadata:
name: worker-0
namespace: some-ns
spec:
workloadRef:
# 同じ名前空間内のWorkloadオブジェクトの名前
name: training-job-workload
# このWorkload内の特定のPodグループの名前
podGroup: workers
Podグループのレプリカ
より複雑なシナリオでは、単一のPodグループを複数の独立したスケジューリング単位に複製できます。
これは、PodのworkloadRef内でpodGroupReplicaKeyフィールドを使用して実現します。
このキーはラベルとして機能し、論理的なサブグループを作成します。
たとえば、minCount: 2のPodグループがあり、4つのPodを作成する場合を考えます。
2つにpodGroupReplicaKey: "0"を、残り2つにpodGroupReplicaKey: "1"を設定すると、それぞれ2つのPodから構成される独立した2つのグループとして扱われます。
spec:
workloadRef:
name: training-job-workload
podGroup: workers
# レプリカキー"0"を持つすべてのworkerは、1つのグループとして一緒にスケジュールされます
podGroupReplicaKey: "0"
動作
workloadRefを定義すると、Podは参照先のPodグループで定義されたポリシーに応じて異なる動作をします。
- 参照先のグループが
basicポリシーを使用している場合、Workload参照は主にグループ化のためのラベルとして機能します。 - 参照先のグループが
gangポリシーを使用している場合(かつGangSchedulingフィーチャーゲートが有効な場合)、Podはgangスケジューリングのライフサイクルに入ります。 この場合、Podはノードにバインドされる前に、グループ内の他のPodが作成され、スケジュールされるのを待ちます。
参照が存在しない場合
スケジューラーは、配置を決定する前にworkloadRefを検証します。
Podが、存在しないWorkloadを参照している場合、またはそのWorkload内で定義されていないPodグループを参照している場合、Podは保留状態のままになります。
存在しないWorkloadオブジェクトを作成するか、不足しているPodGroup定義を含んだWorkloadを再作成するまで、配置の対象とはみなされません。
この動作は、最終的なポリシーがbasicかgangかに関係なく、workloadRefを持つすべてのPodに適用されます。
スケジューラーはポリシーを決定するためにWorkload定義を必要とするためです。
次の項目
- Workload APIについて学ぶ。
- Podグループポリシーの詳細について読む。