551 lines
20 KiB
Protocol Buffer
551 lines
20 KiB
Protocol Buffer
/*
|
|
Copyright The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
|
|
// This file was autogenerated by go-to-protobuf. Do not edit it manually!
|
|
|
|
syntax = "proto2";
|
|
|
|
package k8s.io.api.scheduling.v1alpha2;
|
|
|
|
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
|
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
|
|
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
|
|
|
|
// Package-wide variables from generator "generated".
|
|
option go_package = "k8s.io/api/scheduling/v1alpha2";
|
|
|
|
// BasicSchedulingPolicy indicates that standard Kubernetes
|
|
// scheduling behavior should be used.
|
|
message BasicSchedulingPolicy {
|
|
}
|
|
|
|
// GangSchedulingPolicy defines the parameters for gang scheduling.
|
|
message GangSchedulingPolicy {
|
|
// MinCount is the minimum number of pods that must be schedulable or scheduled
|
|
// at the same time for the scheduler to admit the entire group.
|
|
// It must be a positive integer.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:minimum=1
|
|
optional int32 minCount = 1;
|
|
}
|
|
|
|
// PodGroup represents a runtime instance of pods grouped together.
|
|
// PodGroups are created by workload controllers (Job, LWS, JobSet, etc...) from
|
|
// Workload.podGroupTemplates.
|
|
// PodGroup API enablement is toggled by the GenericWorkload feature gate.
|
|
message PodGroup {
|
|
// Standard object's metadata.
|
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
//
|
|
// +optional
|
|
optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
|
|
|
// Spec defines the desired state of the PodGroup.
|
|
//
|
|
// +required
|
|
optional PodGroupSpec spec = 2;
|
|
|
|
// Status represents the current observed state of the PodGroup.
|
|
//
|
|
// +optional
|
|
optional PodGroupStatus status = 3;
|
|
}
|
|
|
|
// PodGroupList contains a list of PodGroup resources.
|
|
message PodGroupList {
|
|
// Standard list metadata.
|
|
//
|
|
// +optional
|
|
optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
|
|
|
// Items is the list of PodGroups.
|
|
repeated PodGroup items = 2;
|
|
}
|
|
|
|
// PodGroupResourceClaim references exactly one ResourceClaim, either directly
|
|
// or by naming a ResourceClaimTemplate which is then turned into a ResourceClaim
|
|
// for the PodGroup.
|
|
//
|
|
// It adds a name to it that uniquely identifies the ResourceClaim inside the PodGroup.
|
|
// Pods that need access to the ResourceClaim define a matching reference in its
|
|
// own Spec.ResourceClaims. The Pod's claim must match all fields of the
|
|
// PodGroup's claim exactly.
|
|
message PodGroupResourceClaim {
|
|
// Name uniquely identifies this resource claim inside the PodGroup.
|
|
// This must be a DNS_LABEL.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-short-name
|
|
optional string name = 1;
|
|
|
|
// ResourceClaimName is the name of a ResourceClaim object in the same
|
|
// namespace as this PodGroup. The ResourceClaim will be reserved for the
|
|
// PodGroup instead of its individual pods.
|
|
//
|
|
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
|
|
// be set.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:unionMember
|
|
// +k8s:format=k8s-long-name
|
|
optional string resourceClaimName = 2;
|
|
|
|
// ResourceClaimTemplateName is the name of a ResourceClaimTemplate
|
|
// object in the same namespace as this PodGroup.
|
|
//
|
|
// The template will be used to create a new ResourceClaim, which will
|
|
// be bound to this PodGroup. When this PodGroup is deleted, the ResourceClaim
|
|
// will also be deleted. The PodGroup name and resource name, along with a
|
|
// generated component, will be used to form a unique name for the
|
|
// ResourceClaim, which will be recorded in podgroup.status.resourceClaimStatuses.
|
|
//
|
|
// This field is immutable and no changes will be made to the
|
|
// corresponding ResourceClaim by the control plane after creating the
|
|
// ResourceClaim.
|
|
//
|
|
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
|
|
// be set.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:unionMember
|
|
// +k8s:format=k8s-long-name
|
|
optional string resourceClaimTemplateName = 3;
|
|
}
|
|
|
|
// PodGroupResourceClaimStatus is stored in the PodGroupStatus for each
|
|
// PodGroupResourceClaim which references a ResourceClaimTemplate. It stores the
|
|
// generated name for the corresponding ResourceClaim.
|
|
message PodGroupResourceClaimStatus {
|
|
// Name uniquely identifies this resource claim inside the PodGroup. This
|
|
// must match the name of an entry in podgroup.spec.resourceClaims, which
|
|
// implies that the string must be a DNS_LABEL.
|
|
//
|
|
// +required
|
|
optional string name = 1;
|
|
|
|
// ResourceClaimName is the name of the ResourceClaim that was generated for
|
|
// the PodGroup in the namespace of the PodGroup. If this is unset, then
|
|
// generating a ResourceClaim was not necessary. The
|
|
// podgroup.spec.resourceClaims entry can be ignored in this case.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:format=k8s-long-name
|
|
optional string resourceClaimName = 2;
|
|
}
|
|
|
|
// PodGroupSchedulingConstraints defines scheduling constraints (e.g. topology) for a PodGroup.
|
|
message PodGroupSchedulingConstraints {
|
|
// Topology defines the topology constraints for the pod group.
|
|
// Currently only a single topology constraint can be specified. This may change in the future.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:maxItems=1
|
|
// +listType=atomic
|
|
// +k8s:listType=atomic
|
|
repeated TopologyConstraint topology = 1;
|
|
}
|
|
|
|
// PodGroupSchedulingPolicy defines the scheduling configuration for a PodGroup.
|
|
// Exactly one policy must be set.
|
|
// +union
|
|
message PodGroupSchedulingPolicy {
|
|
// Basic specifies that the pods in this group should be scheduled using
|
|
// standard Kubernetes scheduling behavior.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:unionMember
|
|
optional BasicSchedulingPolicy basic = 1;
|
|
|
|
// Gang specifies that the pods in this group should be scheduled using
|
|
// all-or-nothing semantics.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:unionMember
|
|
optional GangSchedulingPolicy gang = 2;
|
|
}
|
|
|
|
// PodGroupSpec defines the desired state of a PodGroup.
|
|
message PodGroupSpec {
|
|
// PodGroupTemplateRef references an optional PodGroup template within other object
|
|
// (e.g. Workload) that was used to create the PodGroup. This field is immutable.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:immutable
|
|
optional PodGroupTemplateReference podGroupTemplateRef = 1;
|
|
|
|
// SchedulingPolicy defines the scheduling policy for this instance of the PodGroup.
|
|
// Controllers are expected to fill this field by copying it from a PodGroupTemplate.
|
|
// This field is immutable.
|
|
//
|
|
// +required
|
|
// +k8s:immutable
|
|
optional PodGroupSchedulingPolicy schedulingPolicy = 2;
|
|
|
|
// SchedulingConstraints defines optional scheduling constraints (e.g. topology) for this PodGroup.
|
|
// Controllers are expected to fill this field by copying it from a PodGroupTemplate.
|
|
// This field is immutable.
|
|
// This field is only available when the TopologyAwareWorkloadScheduling feature gate is enabled.
|
|
//
|
|
// +featureGate=TopologyAwareWorkloadScheduling
|
|
// +optional
|
|
// +k8s:ifDisabled(TopologyAwareWorkloadScheduling)=+k8s:forbidden
|
|
// +k8s:ifEnabled(TopologyAwareWorkloadScheduling)=+k8s:optional
|
|
// +k8s:ifEnabled(TopologyAwareWorkloadScheduling)=+k8s:immutable
|
|
optional PodGroupSchedulingConstraints schedulingConstraints = 3;
|
|
|
|
// ResourceClaims defines which ResourceClaims may be shared among Pods in
|
|
// the group. Pods consume the devices allocated to a PodGroup's claim by
|
|
// defining a claim in its own Spec.ResourceClaims that matches the
|
|
// PodGroup's claim exactly. The claim must have the same name and refer to
|
|
// the same ResourceClaim or ResourceClaimTemplate.
|
|
//
|
|
// This is an alpha-level field and requires that the
|
|
// DRAWorkloadResourceClaims feature gate is enabled.
|
|
//
|
|
// This field is immutable.
|
|
//
|
|
// +optional
|
|
// +patchMergeKey=name
|
|
// +patchStrategy=merge,retainKeys
|
|
// +listType=map
|
|
// +listMapKey=name
|
|
// +k8s:optional
|
|
// +k8s:listType=map
|
|
// +k8s:listMapKey=name
|
|
// +k8s:maxItems=4
|
|
// +k8s:immutable
|
|
// +featureGate=DRAWorkloadResourceClaims
|
|
repeated PodGroupResourceClaim resourceClaims = 4;
|
|
|
|
// DisruptionMode defines the mode in which a given PodGroup can be disrupted.
|
|
// Controllers are expected to fill this field by copying it from a PodGroupTemplate.
|
|
// One of Pod, PodGroup. Defaults to Pod if unset.
|
|
// This field is immutable.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:immutable
|
|
// +default="Pod"
|
|
optional string disruptionMode = 5;
|
|
|
|
// PriorityClassName defines the priority that should be considered when scheduling this pod group.
|
|
// Controllers are expected to fill this field by copying it from a PodGroupTemplate.
|
|
// Otherwise, it is validated and resolved similarly to the PriorityClassName on PodGroupTemplate
|
|
// (i.e. if no priority class is specified, admission control can set this to the global default
|
|
// priority class if it exists. Otherwise, the pod group's priority will be zero).
|
|
// This field is immutable.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:format=k8s-long-name
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:immutable
|
|
optional string priorityClassName = 6;
|
|
|
|
// Priority is the value of priority of this pod group. Various system components
|
|
// use this field to find the priority of the pod group. When Priority Admission
|
|
// Controller is enabled, it prevents users from setting this field. The admission
|
|
// controller populates this field from PriorityClassName.
|
|
// The higher the value, the higher the priority.
|
|
// This field is immutable.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:immutable
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:maximum=1000000000 # HighestUserDefinablePriority
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:minimum=-2147483648
|
|
optional int32 priority = 7;
|
|
}
|
|
|
|
// PodGroupStatus represents information about the status of a pod group.
|
|
message PodGroupStatus {
|
|
// Conditions represent the latest observations of the PodGroup's state.
|
|
//
|
|
// Known condition types:
|
|
// - "PodGroupScheduled": Indicates whether the scheduling requirement has been satisfied.
|
|
// - "DisruptionTarget": Indicates whether the PodGroup is about to be terminated
|
|
// due to disruption such as preemption.
|
|
//
|
|
// Known reasons for the PodGroupScheduled condition:
|
|
// - "Unschedulable": The PodGroup cannot be scheduled due to resource constraints,
|
|
// affinity/anti-affinity rules, or insufficient capacity for the gang.
|
|
// - "SchedulerError": The PodGroup cannot be scheduled due to some internal error
|
|
// that happened during scheduling, for example due to nodeAffinity parsing errors.
|
|
//
|
|
// Known reasons for the DisruptionTarget condition:
|
|
// - "PreemptionByScheduler": The PodGroup was preempted by the scheduler to make room for
|
|
// higher-priority PodGroups or Pods.
|
|
//
|
|
// +optional
|
|
// +patchMergeKey=type
|
|
// +patchStrategy=merge
|
|
// +listType=map
|
|
// +listMapKey=type
|
|
repeated .k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 1;
|
|
|
|
// Status of resource claims.
|
|
// +optional
|
|
// +patchMergeKey=name
|
|
// +patchStrategy=merge,retainKeys
|
|
// +listType=map
|
|
// +listMapKey=name
|
|
// +k8s:optional
|
|
// +k8s:listType=map
|
|
// +k8s:listMapKey=name
|
|
// +k8s:maxItems=4
|
|
// +featureGate=DRAWorkloadResourceClaims
|
|
repeated PodGroupResourceClaimStatus resourceClaimStatuses = 2;
|
|
}
|
|
|
|
// PodGroupTemplate represents a template for a set of pods with a scheduling policy.
|
|
message PodGroupTemplate {
|
|
// Name is a unique identifier for the PodGroupTemplate within the Workload.
|
|
// It must be a DNS label. This field is immutable.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-short-name
|
|
optional string name = 1;
|
|
|
|
// SchedulingPolicy defines the scheduling policy for this PodGroupTemplate.
|
|
//
|
|
// +required
|
|
optional PodGroupSchedulingPolicy schedulingPolicy = 2;
|
|
|
|
// SchedulingConstraints defines optional scheduling constraints (e.g. topology) for this PodGroupTemplate.
|
|
// This field is only available when the TopologyAwareWorkloadScheduling feature gate is enabled.
|
|
//
|
|
// +featureGate=TopologyAwareWorkloadScheduling
|
|
// +optional
|
|
// +k8s:ifDisabled(TopologyAwareWorkloadScheduling)=+k8s:forbidden
|
|
// +k8s:ifEnabled(TopologyAwareWorkloadScheduling)=+k8s:optional
|
|
optional PodGroupSchedulingConstraints schedulingConstraints = 3;
|
|
|
|
// ResourceClaims defines which ResourceClaims may be shared among Pods in
|
|
// the group. Pods consume the devices allocated to a PodGroup's claim by
|
|
// defining a claim in its own Spec.ResourceClaims that matches the
|
|
// PodGroup's claim exactly. The claim must have the same name and refer to
|
|
// the same ResourceClaim or ResourceClaimTemplate.
|
|
//
|
|
// This is an alpha-level field and requires that the
|
|
// DRAWorkloadResourceClaims feature gate is enabled.
|
|
//
|
|
// This field is immutable.
|
|
//
|
|
// +optional
|
|
// +patchMergeKey=name
|
|
// +patchStrategy=merge,retainKeys
|
|
// +listType=map
|
|
// +listMapKey=name
|
|
// +k8s:optional
|
|
// +k8s:listType=map
|
|
// +k8s:listMapKey=name
|
|
// +k8s:maxItems=4
|
|
// +k8s:immutable
|
|
// +featureGate=DRAWorkloadResourceClaims
|
|
repeated PodGroupResourceClaim resourceClaims = 4;
|
|
|
|
// DisruptionMode defines the mode in which a given PodGroup can be disrupted.
|
|
// One of Pod, PodGroup.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
optional string disruptionMode = 5;
|
|
|
|
// PriorityClassName indicates the priority that should be considered when scheduling
|
|
// a pod group created from this template. If no priority class is specified, admission
|
|
// control can set this to the global default priority class if it exists. Otherwise,
|
|
// pod groups created from this template will have the priority set to zero.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:format=k8s-long-name
|
|
optional string priorityClassName = 6;
|
|
|
|
// Priority is the value of priority of pod groups created from this template. Various
|
|
// system components use this field to find the priority of the pod group. When
|
|
// Priority Admission Controller is enabled, it prevents users from setting this field.
|
|
// The admission controller populates this field from PriorityClassName.
|
|
// The higher the value, the higher the priority.
|
|
// This field is available only when the WorkloadAwarePreemption feature gate
|
|
// is enabled.
|
|
//
|
|
// +featureGate=WorkloadAwarePreemption
|
|
// +optional
|
|
// +k8s:ifDisabled("WorkloadAwarePreemption")=+k8s:forbidden
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:optional
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:maximum=1000000000 # HighestUserDefinablePriority
|
|
// +k8s:ifEnabled("WorkloadAwarePreemption")=+k8s:minimum=-2147483648
|
|
optional int32 priority = 7;
|
|
}
|
|
|
|
// PodGroupTemplateReference references a PodGroup template defined in some object (e.g. Workload).
|
|
// Exactly one reference must be set.
|
|
// +union
|
|
message PodGroupTemplateReference {
|
|
// Workload references the PodGroupTemplate within the Workload object that was used to create
|
|
// the PodGroup.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:unionMember
|
|
optional WorkloadPodGroupTemplateReference workload = 1;
|
|
}
|
|
|
|
// TopologyConstraint defines a topology constraint for a PodGroup.
|
|
message TopologyConstraint {
|
|
// Key specifies the key of the node label representing the topology domain.
|
|
// All pods within the PodGroup must be colocated within the same domain instance.
|
|
// Different PodGroups can land on different domain instances even if they derive from the same PodGroupTemplate.
|
|
// Examples: "topology.kubernetes.io/rack"
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-label-key
|
|
optional string key = 1;
|
|
}
|
|
|
|
// TypedLocalObjectReference allows to reference typed object inside the same namespace.
|
|
message TypedLocalObjectReference {
|
|
// APIGroup is the group for the resource being referenced.
|
|
// If APIGroup is empty, the specified Kind must be in the core API group.
|
|
// For any other third-party types, setting APIGroup is required.
|
|
// It must be a DNS subdomain.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:format=k8s-long-name
|
|
optional string apiGroup = 1;
|
|
|
|
// Kind is the type of resource being referenced.
|
|
// It must be a path segment name.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-path-segment-name
|
|
optional string kind = 2;
|
|
|
|
// Name is the name of resource being referenced.
|
|
// It must be a path segment name.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-path-segment-name
|
|
optional string name = 3;
|
|
}
|
|
|
|
// Workload allows for expressing scheduling constraints that should be used
|
|
// when managing the lifecycle of workloads from the scheduling perspective,
|
|
// including scheduling, preemption, eviction and other phases.
|
|
// Workload API enablement is toggled by the GenericWorkload feature gate.
|
|
message Workload {
|
|
// Standard object's metadata.
|
|
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
//
|
|
// +optional
|
|
optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
|
|
|
|
// Spec defines the desired behavior of a Workload.
|
|
//
|
|
// +required
|
|
optional WorkloadSpec spec = 2;
|
|
}
|
|
|
|
// WorkloadList contains a list of Workload resources.
|
|
message WorkloadList {
|
|
// Standard list metadata.
|
|
//
|
|
// +optional
|
|
optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
|
|
|
|
// Items is the list of Workloads.
|
|
repeated Workload items = 2;
|
|
}
|
|
|
|
// WorkloadPodGroupTemplateReference references the PodGroupTemplate within the Workload object.
|
|
message WorkloadPodGroupTemplateReference {
|
|
// WorkloadName defines the name of the Workload object.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-long-name
|
|
optional string workloadName = 1;
|
|
|
|
// PodGroupTemplateName defines the PodGroupTemplate name within the Workload object.
|
|
//
|
|
// +required
|
|
// +k8s:required
|
|
// +k8s:format=k8s-short-name
|
|
optional string podGroupTemplateName = 2;
|
|
}
|
|
|
|
// WorkloadSpec defines the desired state of a Workload.
|
|
message WorkloadSpec {
|
|
// ControllerRef is an optional reference to the controlling object, such as a
|
|
// Deployment or Job. This field is intended for use by tools like CLIs
|
|
// to provide a link back to the original workload definition.
|
|
// This field is immutable.
|
|
//
|
|
// +optional
|
|
// +k8s:optional
|
|
// +k8s:immutable
|
|
optional TypedLocalObjectReference controllerRef = 1;
|
|
|
|
// PodGroupTemplates is the list of templates that make up the Workload.
|
|
// The maximum number of templates is 8. This field is immutable.
|
|
//
|
|
// +required
|
|
// +listType=map
|
|
// +listMapKey=name
|
|
// +k8s:required
|
|
// +k8s:listType=map
|
|
// +k8s:listMapKey=name
|
|
// +k8s:maxItems=8
|
|
// +k8s:immutable
|
|
repeated PodGroupTemplate podGroupTemplates = 2;
|
|
}
|
|
|