diff --git a/Makefile b/Makefile index 3de94c12fd..eb8963995f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Image URL to use all building/pushing image targets IMG ?= kubeflow/training-operator:latest -# Produce CRDs that work back to Kubernetes 1.11 (no version conversion) -CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false,generateEmbeddedObjectMeta=true" +# CRD generation options +CRD_OPTIONS ?= "crd:generateEmbeddedObjectMeta=true" # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -109,7 +109,7 @@ PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) CONTROLLER_GEN = $(shell pwd)/bin/controller-gen controller-gen: ## Download controller-gen locally if necessary. - GOBIN=$(PROJECT_DIR)/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.6.0 + GOBIN=$(PROJECT_DIR)/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.10.0 KUSTOMIZE = $(shell pwd)/bin/kustomize kustomize: ## Download kustomize locally if necessary. diff --git a/docs/api/kubeflow.org_v1_generated.asciidoc b/docs/api/kubeflow.org_v1_generated.asciidoc index 583292abd3..07dae44c87 100644 --- a/docs/api/kubeflow.org_v1_generated.asciidoc +++ b/docs/api/kubeflow.org_v1_generated.asciidoc @@ -55,7 +55,7 @@ Package v1 contains API Schema definitions for the kubeflow.org v1 API group | *`standalone`* __boolean__ | Start a local standalone rendezvous backend that is represented by a C10d TCP store on port 29400. Useful when launching single-node, multi-worker job. If specified --rdzv_backend, --rdzv_endpoint, --rdzv_id are auto-assigned; any explicitly set values are ignored. | *`nProcPerNode`* __integer__ | Number of workers per node; supported values: [auto, cpu, gpu, int]. | *`maxRestarts`* __integer__ | -| *`metrics`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#metricspec-v2beta2-autoscaling[$$MetricSpec$$] array__ | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. +| *`metrics`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#metricspec-v2-autoscaling[$$MetricSpec$$] array__ | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. |=== @@ -213,7 +213,7 @@ MXJobSpec defines the desired state of MXJob | *`minReplicas`* __integer__ | minReplicas is the lower limit for the number of replicas to which the training job can scale down. It defaults to null. | *`maxReplicas`* __integer__ | upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas, defaults to null. | *`maxRestarts`* __integer__ | MaxRestarts is the limit for restart times of pods in elastic mode. -| *`metrics`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#metricspec-v2beta2-autoscaling[$$MetricSpec$$] array__ | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. +| *`metrics`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#metricspec-v2-autoscaling[$$MetricSpec$$] array__ | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. |=== diff --git a/examples/pytorch/elastic/imagenet/Dockerfile b/examples/pytorch/elastic/imagenet/Dockerfile index 3fc9cbb600..4c29f58027 100644 --- a/examples/pytorch/elastic/imagenet/Dockerfile +++ b/examples/pytorch/elastic/imagenet/Dockerfile @@ -1,9 +1,6 @@ -ARG BASE_IMAGE=pytorch/pytorch:1.10.0-cuda11.3-cudnn8-runtime +ARG BASE_IMAGE=pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime FROM $BASE_IMAGE -# install utilities and dependencies -RUN pip install classy-vision - WORKDIR /workspace # download imagenet tiny for data @@ -11,12 +8,6 @@ RUN apt-get -q update && apt-get -q install -y wget unzip RUN wget -q http://cs231n.stanford.edu/tiny-imagenet-200.zip && unzip -q tiny-imagenet-200.zip -d data && rm tiny-imagenet-200.zip COPY . ./examples -RUN chmod -R u+x ./examples/bin -ENV PATH=/workspace/examples/bin:${PATH} - -# create a template classy project in /workspace/classy_vision -# (see https://classyvision.ai/#quickstart) -RUN classy-project classy_vision USER root ENTRYPOINT ["python", "-m", "torch.distributed.run"] diff --git a/examples/pytorch/elastic/imagenet/imagenet.yaml b/examples/pytorch/elastic/imagenet/imagenet.yaml index 80b2621d1c..b774c87566 100644 --- a/examples/pytorch/elastic/imagenet/imagenet.yaml +++ b/examples/pytorch/elastic/imagenet/imagenet.yaml @@ -6,8 +6,15 @@ spec: elasticPolicy: rdzvBackend: c10d minReplicas: 1 - maxReplicas: 2 + maxReplicas: 3 maxRestarts: 100 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 80 pytorchReplicaSpecs: Worker: replicas: 2 @@ -16,8 +23,11 @@ spec: spec: containers: - name: pytorch - image: kubeflow/pytorch-elastic-example-imagenet:1.0.0-sigterm + image: quay.io/johnugeorge/pytorch-elastic-example-imagenet:0.1 imagePullPolicy: IfNotPresent + resources: + requests: + cpu: 4 env: - name: LOGLEVEL value: DEBUG @@ -27,7 +37,7 @@ spec: - torch.distributed.run - /workspace/examples/imagenet.py - "--arch=resnet18" - - "--epochs=20" + - "--epochs=1" - "--batch-size=32" - "--workers=0" - "/workspace/data/tiny-imagenet-200" diff --git a/go.mod b/go.mod index 2c5342bd8c..984c5e2525 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/go-logr/logr v1.2.3 - github.com/kubeflow/common v0.4.3 + github.com/kubeflow/common v0.4.4 github.com/onsi/ginkgo/v2 v2.1.6 github.com/onsi/gomega v1.20.1 github.com/prometheus/client_golang v1.12.2 diff --git a/go.sum b/go.sum index cf3654d3c1..a9c3952052 100644 --- a/go.sum +++ b/go.sum @@ -327,8 +327,8 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kubeflow/common v0.4.3 h1:vVoOMNPOZK4wzZvQ4rsRLvC3SDi+J1fVKNHSXC/QRvU= -github.com/kubeflow/common v0.4.3/go.mod h1:Qb/5aON7/OWVkN8OnjRqqT0i8X/XzMekRIZ8lkLosj4= +github.com/kubeflow/common v0.4.4 h1:QG9IgOHIsaS1bq1DtfW/yxtKkBTl5sTjRCyNicjdo10= +github.com/kubeflow/common v0.4.4/go.mod h1:di43u2m7DyuwnRDb7Kwz1nmA/nhpjnQ+K+gWCV/SPZk= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= diff --git a/hack/python-sdk/swagger.json b/hack/python-sdk/swagger.json index d8d180f55d..c931a76eb5 100644 --- a/hack/python-sdk/swagger.json +++ b/hack/python-sdk/swagger.json @@ -24,7 +24,7 @@ "type": "array", "items": { "default": {}, - "$ref": "#/definitions/k8s.io.api.autoscaling.v2beta2.MetricSpec" + "$ref": "#/definitions/k8s.io.api.autoscaling.v2.MetricSpec" } }, "minReplicas": { @@ -253,7 +253,7 @@ "type": "array", "items": { "default": {}, - "$ref": "#/definitions/k8s.io.api.autoscaling.v2beta2.MetricSpec" + "$ref": "#/definitions/k8s.io.api.autoscaling.v2.MetricSpec" } }, "minReplicas": { @@ -715,7 +715,7 @@ }, "labelSelector": { "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", - "$ref": "#/definitions/v1.LabelSelector" + "type": "string" }, "succeeded": { "description": "The number of pods which reached phase Succeeded.", diff --git a/manifests/base/cluster-role.yaml b/manifests/base/cluster-role.yaml index 4b806118f9..ae3732dafa 100644 --- a/manifests/base/cluster-role.yaml +++ b/manifests/base/cluster-role.yaml @@ -85,3 +85,9 @@ rules: - podgroups verbs: - "*" + - apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - "*" diff --git a/manifests/base/crds/kubeflow.org_mpijobs.yaml b/manifests/base/crds/kubeflow.org_mpijobs.yaml index ebf1e132a0..72b9575988 100644 --- a/manifests/base/crds/kubeflow.org_mpijobs.yaml +++ b/manifests/base/crds/kubeflow.org_mpijobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: mpijobs.kubeflow.org spec: @@ -215,6 +214,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -328,10 +328,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -424,6 +426,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -493,6 +496,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -612,6 +616,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -675,6 +680,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -795,6 +801,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -864,6 +871,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -983,6 +991,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1046,6 +1055,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1171,6 +1181,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1190,6 +1201,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1219,6 +1231,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1241,6 +1254,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1274,6 +1288,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1293,6 +1308,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -2625,6 +2641,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -2644,6 +2661,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -2673,6 +2691,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -2695,6 +2714,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -2728,6 +2748,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -2747,6 +2768,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -3984,6 +4006,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4088,6 +4111,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4107,6 +4131,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4136,6 +4161,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4158,6 +4184,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4191,6 +4218,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4210,6 +4238,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -5863,6 +5892,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -5981,12 +6011,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6157,6 +6187,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6195,6 +6226,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6279,6 +6311,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6314,6 +6347,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6375,6 +6409,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6426,6 +6461,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -6468,13 +6504,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -6586,6 +6622,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -6610,16 +6647,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -6642,6 +6678,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -6743,6 +6780,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -6846,6 +6884,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7048,6 +7087,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7244,6 +7284,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7277,6 +7318,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7337,6 +7379,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7415,6 +7458,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -7547,6 +7591,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -7592,6 +7637,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -7724,6 +7770,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -7906,48 +7953,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -7972,9 +7978,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/manifests/base/crds/kubeflow.org_mxjobs.yaml b/manifests/base/crds/kubeflow.org_mxjobs.yaml index dcf436e520..b7493469a6 100644 --- a/manifests/base/crds/kubeflow.org_mxjobs.yaml +++ b/manifests/base/crds/kubeflow.org_mxjobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: mxjobs.kubeflow.org spec: @@ -213,6 +212,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -326,10 +326,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -422,6 +424,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -491,6 +494,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -610,6 +614,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -673,6 +678,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -793,6 +799,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -862,6 +869,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -981,6 +989,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1044,6 +1053,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1169,6 +1179,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1188,6 +1199,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1217,6 +1229,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1239,6 +1252,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1272,6 +1286,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1291,6 +1306,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -2623,6 +2639,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -2642,6 +2659,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -2671,6 +2689,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -2693,6 +2712,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -2726,6 +2746,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -2745,6 +2766,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -3982,6 +4004,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4086,6 +4109,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4105,6 +4129,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4134,6 +4159,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4156,6 +4182,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4189,6 +4216,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4208,6 +4236,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -5861,6 +5890,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -5979,12 +6009,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6155,6 +6185,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6193,6 +6224,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6277,6 +6309,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6312,6 +6345,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6373,6 +6407,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6424,6 +6459,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -6466,13 +6502,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -6584,6 +6620,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -6608,16 +6645,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -6640,6 +6676,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -6741,6 +6778,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -6844,6 +6882,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7046,6 +7085,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7242,6 +7282,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7275,6 +7316,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7335,6 +7377,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7413,6 +7456,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -7545,6 +7589,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -7590,6 +7635,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -7722,6 +7768,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -7778,9 +7825,9 @@ spec: type: object type: object description: 'MXReplicaSpecs is map of commonv1.ReplicaType and commonv1.ReplicaSpec - specifies the MX replicas to run. For example, { "Scheduler": - commonv1.ReplicaSpec, "Server": commonv1.ReplicaSpec, "Worker": - commonv1.ReplicaSpec, }' + specifies the MX replicas to run. For example, { "Scheduler": commonv1.ReplicaSpec, + "Server": commonv1.ReplicaSpec, "Worker": commonv1.ReplicaSpec, + }' type: object runPolicy: description: RunPolicy encapsulates various runtime policies of the @@ -7902,48 +7949,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -7968,9 +7974,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/manifests/base/crds/kubeflow.org_paddlejobs.yaml b/manifests/base/crds/kubeflow.org_paddlejobs.yaml index f5f788cc03..f81a47cb3d 100644 --- a/manifests/base/crds/kubeflow.org_paddlejobs.yaml +++ b/manifests/base/crds/kubeflow.org_paddlejobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: paddlejobs.kubeflow.org spec: @@ -73,7 +72,7 @@ spec: set at once). properties: containerResource: - description: container resource refers to a resource metric + description: containerResource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing a single container in each pod of the current scale target (e.g. CPU or memory). Such @@ -200,6 +199,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -250,8 +250,8 @@ spec: Ingress object). properties: describedObject: - description: CrossVersionObjectReference contains enough - information to let you identify the referred resource. + description: describedObject specifies the descriptions + of a object,such as kind,name apiVersion properties: apiVersion: description: API version of the referent @@ -328,6 +328,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -441,6 +442,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -721,6 +723,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -834,10 +837,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -930,6 +935,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -999,6 +1005,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1118,6 +1125,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1181,6 +1189,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1301,6 +1310,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -1370,6 +1380,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1489,6 +1500,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1552,6 +1564,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1677,6 +1690,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1696,6 +1710,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1725,6 +1740,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1747,6 +1763,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1780,6 +1797,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1799,6 +1817,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -3131,6 +3150,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -3150,6 +3170,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -3179,6 +3200,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -3201,6 +3223,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -3234,6 +3257,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -3253,6 +3277,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -4490,6 +4515,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4594,6 +4620,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4613,6 +4640,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4642,6 +4670,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4664,6 +4693,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4697,6 +4727,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4716,6 +4747,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -6369,6 +6401,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -6487,12 +6520,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6663,6 +6696,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6701,6 +6735,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6785,6 +6820,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6820,6 +6856,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6881,6 +6918,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6932,6 +6970,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -6974,13 +7013,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -7092,6 +7131,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -7116,16 +7156,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -7148,6 +7187,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -7249,6 +7289,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -7352,6 +7393,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7554,6 +7596,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7750,6 +7793,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7783,6 +7827,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7843,6 +7888,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7921,6 +7967,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -8053,6 +8100,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -8098,6 +8146,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -8230,6 +8279,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -8286,8 +8336,8 @@ spec: type: object type: object description: 'A map of PaddleReplicaType (type) to ReplicaSpec (value). - Specifies the Paddle cluster configuration. For example, { "Master": - PaddleReplicaSpec, "Worker": PaddleReplicaSpec, }' + Specifies the Paddle cluster configuration. For example, { "Master": + PaddleReplicaSpec, "Worker": PaddleReplicaSpec, }' type: object runPolicy: description: RunPolicy encapsulates various runtime policies of the @@ -8408,48 +8458,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -8474,13 +8483,7 @@ spec: storage: true subresources: scale: - labelSelectorPath: .status.labelSelector + labelSelectorPath: .status.replicaStatuses.Worker.labelSelector specReplicasPath: .spec.paddleReplicaSpecs.Worker.replicas - statusReplicasPath: .status.replicaStatuses.Active + statusReplicasPath: .status.replicaStatuses.Worker.active status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/manifests/base/crds/kubeflow.org_pytorchjobs.yaml b/manifests/base/crds/kubeflow.org_pytorchjobs.yaml index 8824b6bf87..f3763c71ed 100644 --- a/manifests/base/crds/kubeflow.org_pytorchjobs.yaml +++ b/manifests/base/crds/kubeflow.org_pytorchjobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: pytorchjobs.kubeflow.org spec: @@ -70,7 +69,7 @@ spec: set at once). properties: containerResource: - description: container resource refers to a resource metric + description: containerResource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing a single container in each pod of the current scale target (e.g. CPU or memory). Such @@ -197,6 +196,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -247,8 +247,8 @@ spec: Ingress object). properties: describedObject: - description: CrossVersionObjectReference contains enough - information to let you identify the referred resource. + description: describedObject specifies the descriptions + of a object,such as kind,name apiVersion properties: apiVersion: description: API version of the referent @@ -325,6 +325,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -438,6 +439,7 @@ spec: The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic required: - name type: object @@ -750,6 +752,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -863,10 +866,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -959,6 +964,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -1028,6 +1034,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1147,6 +1154,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1210,6 +1218,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1330,6 +1339,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -1399,6 +1409,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1518,6 +1529,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1581,6 +1593,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1706,6 +1719,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1725,6 +1739,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1754,6 +1769,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1776,6 +1792,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1809,6 +1826,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1828,6 +1846,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -3160,6 +3179,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -3179,6 +3199,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -3208,6 +3229,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -3230,6 +3252,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -3263,6 +3286,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -3282,6 +3306,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -4519,6 +4544,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4623,6 +4649,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4642,6 +4669,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4671,6 +4699,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4693,6 +4722,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4726,6 +4756,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4745,6 +4776,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -6398,6 +6430,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -6516,12 +6549,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6692,6 +6725,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6730,6 +6764,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6814,6 +6849,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6849,6 +6885,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6910,6 +6947,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6961,6 +6999,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7003,13 +7042,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -7121,6 +7160,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -7145,16 +7185,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -7177,6 +7216,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -7278,6 +7318,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -7381,6 +7422,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7583,6 +7625,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7779,6 +7822,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7812,6 +7856,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7872,6 +7917,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7950,6 +7996,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -8082,6 +8129,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -8127,6 +8175,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -8259,6 +8308,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -8315,8 +8365,8 @@ spec: type: object type: object description: 'A map of PyTorchReplicaType (type) to ReplicaSpec (value). - Specifies the PyTorch cluster configuration. For example, { "Master": - PyTorchReplicaSpec, "Worker": PyTorchReplicaSpec, }' + Specifies the PyTorch cluster configuration. For example, { "Master": + PyTorchReplicaSpec, "Worker": PyTorchReplicaSpec, }' type: object runPolicy: description: RunPolicy encapsulates various runtime policies of the @@ -8437,48 +8487,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -8503,13 +8512,7 @@ spec: storage: true subresources: scale: - labelSelectorPath: .status.labelSelector + labelSelectorPath: .status.replicaStatuses.Worker.labelSelector specReplicasPath: .spec.pytorchReplicaSpecs.Worker.replicas - statusReplicasPath: .status.replicaStatuses.Active + statusReplicasPath: .status.replicaStatuses.Worker.active status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/manifests/base/crds/kubeflow.org_tfjobs.yaml b/manifests/base/crds/kubeflow.org_tfjobs.yaml index 07d72e7f27..0e88f4323c 100644 --- a/manifests/base/crds/kubeflow.org_tfjobs.yaml +++ b/manifests/base/crds/kubeflow.org_tfjobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: tfjobs.kubeflow.org spec: @@ -265,6 +264,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -378,10 +378,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -474,6 +476,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -543,6 +546,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -662,6 +666,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -725,6 +730,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -845,6 +851,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -914,6 +921,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1033,6 +1041,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1096,6 +1105,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1221,6 +1231,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1240,6 +1251,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1269,6 +1281,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1291,6 +1304,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1324,6 +1338,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1343,6 +1358,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -2675,6 +2691,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -2694,6 +2711,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -2723,6 +2741,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -2745,6 +2764,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -2778,6 +2798,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -2797,6 +2818,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -4034,6 +4056,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4138,6 +4161,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4157,6 +4181,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4186,6 +4211,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4208,6 +4234,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4241,6 +4268,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4260,6 +4288,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -5913,6 +5942,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -6031,12 +6061,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6207,6 +6237,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6245,6 +6276,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6329,6 +6361,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6364,6 +6397,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6425,6 +6459,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6476,6 +6511,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -6518,13 +6554,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -6636,6 +6672,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -6660,16 +6697,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -6692,6 +6728,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -6793,6 +6830,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -6896,6 +6934,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7098,6 +7137,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7294,6 +7334,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7327,6 +7368,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7387,6 +7429,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7465,6 +7508,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -7597,6 +7641,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -7642,6 +7687,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -7774,6 +7820,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -7830,8 +7877,8 @@ spec: type: object type: object description: 'A map of TFReplicaType (type) to ReplicaSpec (value). - Specifies the TF cluster configuration. For example, { "PS": - ReplicaSpec, "Worker": ReplicaSpec, }' + Specifies the TF cluster configuration. For example, { "PS": ReplicaSpec, + "Worker": ReplicaSpec, }' type: object required: - tfReplicaSpecs @@ -7903,48 +7950,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -7969,9 +7975,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/manifests/base/crds/kubeflow.org_xgboostjobs.yaml b/manifests/base/crds/kubeflow.org_xgboostjobs.yaml index 3800a31aa8..71b095effb 100644 --- a/manifests/base/crds/kubeflow.org_xgboostjobs.yaml +++ b/manifests/base/crds/kubeflow.org_xgboostjobs.yaml @@ -1,10 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: xgboostjobs.kubeflow.org spec: @@ -257,6 +256,7 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, @@ -370,10 +370,12 @@ spec: type: object type: array type: object + x-kubernetes-map-type: atomic type: array required: - nodeSelectorTerms type: object + x-kubernetes-map-type: atomic type: object podAffinity: description: Describes pod affinity scheduling rules @@ -466,6 +468,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -535,6 +538,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -654,6 +658,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -717,6 +722,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -837,6 +843,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term @@ -906,6 +913,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names @@ -1025,6 +1033,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaceSelector: description: A label query over the set of namespaces that the term applies @@ -1088,6 +1097,7 @@ spec: ANDed. type: object type: object + x-kubernetes-map-type: atomic namespaces: description: namespaces specifies a static list of namespace names that the term @@ -1213,6 +1223,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -1232,6 +1243,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -1261,6 +1273,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -1283,6 +1296,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -1316,6 +1330,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -1335,6 +1350,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -2667,6 +2683,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -2686,6 +2703,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -2715,6 +2733,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -2737,6 +2756,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -2770,6 +2790,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -2789,6 +2810,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -4026,6 +4048,7 @@ spec: uid?' type: string type: object + x-kubernetes-map-type: atomic type: array initContainers: description: 'List of initialization containers belonging @@ -4130,6 +4153,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic fieldRef: description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, @@ -4149,6 +4173,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic resourceFieldRef: description: 'Selects a resource of the container: only resources limits @@ -4178,6 +4203,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic secretKeyRef: description: Selects a key of a secret in the pod's namespace @@ -4200,6 +4226,7 @@ spec: required: - key type: object + x-kubernetes-map-type: atomic type: object required: - name @@ -4233,6 +4260,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic prefix: description: An optional identifier to prepend to each key in the ConfigMap. Must be @@ -4252,6 +4280,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic type: object type: array image: @@ -5905,6 +5934,7 @@ spec: "value". The requirements are ANDed. type: object type: object + x-kubernetes-map-type: atomic matchLabelKeys: description: MatchLabelKeys is a set of pod label keys to select the pods over which spreading @@ -6023,12 +6053,12 @@ spec: spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any - location, but giving higher precedence to - topologies that would help reduce the skew. - A constraint is considered "Unsatisfiable" for - an incoming pod if and only if every possible - node assignment for that pod would violate "MaxSkew" - on some topology. For example, in a 3-zone cluster, + location, but giving higher precedence to topologies + that would help reduce the skew. A constraint + is considered "Unsatisfiable" for an incoming + pod if and only if every possible node assignment + for that pod would violate "MaxSkew" on some + topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable @@ -6199,6 +6229,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is optional: User is the rados user name, default is admin More info: @@ -6237,6 +6268,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeID: description: 'volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' @@ -6321,6 +6353,7 @@ spec: ConfigMap or its keys must be defined type: boolean type: object + x-kubernetes-map-type: atomic csi: description: csi (Container Storage Interface) represents ephemeral storage that is handled @@ -6356,6 +6389,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic readOnly: description: readOnly specifies a read-only configuration for the volume. Defaults to @@ -6417,6 +6451,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions on this file, must @@ -6468,6 +6503,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -6510,13 +6546,13 @@ spec: and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes - like restoring from snapshot or capacity tracking + like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning - through a PersistentVolumeClaim (see EphemeralVolumeSource - for more information on the connection between - this volume type and PersistentVolumeClaim). + through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between + this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI @@ -6628,6 +6664,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic dataSourceRef: description: 'dataSourceRef specifies the object from which to populate @@ -6652,16 +6689,15 @@ spec: differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of - objects, DataSourceRef allows - any non-core object, as well as - PersistentVolumeClaim objects. * - While DataSource ignores disallowed - values (dropping them), DataSourceRef preserves - all values, and generates an error - if a disallowed value is specified. - (Beta) Using this field requires - the AnyVolumeDataSource feature - gate to be enabled.' + objects, DataSourceRef allows any + non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores + disallowed values (dropping them), + DataSourceRef preserves all values, + and generates an error if a disallowed + value is specified. (Beta) Using + this field requires the AnyVolumeDataSource + feature gate to be enabled.' properties: apiGroup: description: APIGroup is the group @@ -6684,6 +6720,7 @@ spec: - kind - name type: object + x-kubernetes-map-type: atomic resources: description: 'resources represents the minimum resources the volume @@ -6785,6 +6822,7 @@ spec: are ANDed. type: object type: object + x-kubernetes-map-type: atomic storageClassName: description: 'storageClassName is the name of the StorageClass required @@ -6888,6 +6926,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic required: - driver type: object @@ -7090,6 +7129,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic targetPortal: description: targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port @@ -7286,6 +7326,7 @@ spec: be defined type: boolean type: object + x-kubernetes-map-type: atomic downwardAPI: description: downwardAPI information about the downwardAPI data to project @@ -7319,6 +7360,7 @@ spec: required: - fieldPath type: object + x-kubernetes-map-type: atomic mode: description: 'Optional: mode bits used to set permissions @@ -7379,6 +7421,7 @@ spec: required: - resource type: object + x-kubernetes-map-type: atomic required: - path type: object @@ -7457,6 +7500,7 @@ spec: must be defined type: boolean type: object + x-kubernetes-map-type: atomic serviceAccountToken: description: serviceAccountToken is information about the serviceAccountToken @@ -7589,6 +7633,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic user: description: 'user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' @@ -7634,6 +7679,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic sslEnabled: description: sslEnabled Flag enable/disable SSL communication with Gateway, default @@ -7766,6 +7812,7 @@ spec: kind, uid?' type: string type: object + x-kubernetes-map-type: atomic volumeName: description: volumeName is the human-readable name of the StorageOS volume. Volume names @@ -7892,48 +7939,7 @@ spec: resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object + type: string succeeded: description: The number of pods which reached phase Succeeded. format: int32 @@ -7958,9 +7964,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/pkg/apis/kubeflow.org/v1/openapi_generated.go b/pkg/apis/kubeflow.org/v1/openapi_generated.go index 3f9ee21e7a..be4f38d049 100644 --- a/pkg/apis/kubeflow.org/v1/openapi_generated.go +++ b/pkg/apis/kubeflow.org/v1/openapi_generated.go @@ -248,14 +248,13 @@ func schema_pkg_apis_common_v1_ReplicaStatus(ref common.ReferenceCallback) commo "labelSelector": { SchemaProps: spec.SchemaProps{ Description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + Type: []string{"string"}, + Format: "", }, }, }, }, }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } @@ -441,7 +440,7 @@ func schema_pkg_apis_kubefloworg_v1_ElasticPolicy(ref common.ReferenceCallback) Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricSpec"), + Ref: ref("k8s.io/api/autoscaling/v2.MetricSpec"), }, }, }, @@ -451,7 +450,7 @@ func schema_pkg_apis_kubefloworg_v1_ElasticPolicy(ref common.ReferenceCallback) }, }, Dependencies: []string{ - "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1.RDZVConf", "k8s.io/api/autoscaling/v2beta2.MetricSpec"}, + "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1.RDZVConf", "k8s.io/api/autoscaling/v2.MetricSpec"}, } } @@ -793,7 +792,7 @@ func schema_pkg_apis_kubefloworg_v1_PaddleElasticPolicy(ref common.ReferenceCall Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricSpec"), + Ref: ref("k8s.io/api/autoscaling/v2.MetricSpec"), }, }, }, @@ -803,7 +802,7 @@ func schema_pkg_apis_kubefloworg_v1_PaddleElasticPolicy(ref common.ReferenceCall }, }, Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricSpec"}, + "k8s.io/api/autoscaling/v2.MetricSpec"}, } } diff --git a/pkg/apis/kubeflow.org/v1/paddlepaddle_types.go b/pkg/apis/kubeflow.org/v1/paddlepaddle_types.go index 795c5facc7..67c11cc17e 100644 --- a/pkg/apis/kubeflow.org/v1/paddlepaddle_types.go +++ b/pkg/apis/kubeflow.org/v1/paddlepaddle_types.go @@ -16,7 +16,7 @@ package v1 import ( commonv1 "github.com/kubeflow/common/pkg/apis/common/v1" - autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" + autoscalingv2 "k8s.io/api/autoscaling/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -51,7 +51,7 @@ const ( //+kubebuilder:subresource:status //+kubebuilder:printcolumn:name="State",type=string,JSONPath=`.status.conditions[-1:].type` //+kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` -// +kubebuilder:subresource:scale:specpath=.spec.paddleReplicaSpecs.Worker.replicas,statuspath=.status.replicaStatuses.Active,selectorpath=.status.labelSelector +// +kubebuilder:subresource:scale:specpath=.spec.paddleReplicaSpecs.Worker.replicas,statuspath=.status.replicaStatuses.Worker.active,selectorpath=.status.replicaStatuses.Worker.labelSelector // PaddleJob Represents a PaddleJob resource. type PaddleJob struct { @@ -110,7 +110,7 @@ type PaddleElasticPolicy struct { // more information about how each type of metric must respond. // If not set, the HPA will not be created. // +optional - Metrics []autoscalingv2beta2.MetricSpec `json:"metrics,omitempty"` + Metrics []autoscalingv2.MetricSpec `json:"metrics,omitempty"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/pkg/apis/kubeflow.org/v1/pytorch_types.go b/pkg/apis/kubeflow.org/v1/pytorch_types.go index a5500ca4d7..7a030bcf8d 100644 --- a/pkg/apis/kubeflow.org/v1/pytorch_types.go +++ b/pkg/apis/kubeflow.org/v1/pytorch_types.go @@ -16,7 +16,7 @@ package v1 import ( commonv1 "github.com/kubeflow/common/pkg/apis/common/v1" - autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" + autoscalingv2 "k8s.io/api/autoscaling/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -51,7 +51,7 @@ const ( //+kubebuilder:subresource:status //+kubebuilder:printcolumn:name="State",type=string,JSONPath=`.status.conditions[-1:].type` //+kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` -// +kubebuilder:subresource:scale:specpath=.spec.pytorchReplicaSpecs.Worker.replicas,statuspath=.status.replicaStatuses.Active,selectorpath=.status.labelSelector +// +kubebuilder:subresource:scale:specpath=.spec.pytorchReplicaSpecs.Worker.replicas,statuspath=.status.replicaStatuses.Worker.active,selectorpath=.status.replicaStatuses.Worker.labelSelector // PyTorchJob Represents a PyTorchJob resource. type PyTorchJob struct { @@ -121,7 +121,7 @@ type ElasticPolicy struct { // more information about how each type of metric must respond. // If not set, the HPA will not be created. // +optional - Metrics []autoscalingv2beta2.MetricSpec `json:"metrics,omitempty"` + Metrics []autoscalingv2.MetricSpec `json:"metrics,omitempty"` } type RDZVConf struct { diff --git a/pkg/apis/kubeflow.org/v1/zz_generated.deepcopy.go b/pkg/apis/kubeflow.org/v1/zz_generated.deepcopy.go index 56358bd8b6..cd321dc09f 100644 --- a/pkg/apis/kubeflow.org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/kubeflow.org/v1/zz_generated.deepcopy.go @@ -21,7 +21,7 @@ package v1 import ( commonv1 "github.com/kubeflow/common/pkg/apis/common/v1" - "k8s.io/api/autoscaling/v2beta2" + "k8s.io/api/autoscaling/v2" "k8s.io/apimachinery/pkg/runtime" ) @@ -80,7 +80,7 @@ func (in *ElasticPolicy) DeepCopyInto(out *ElasticPolicy) { } if in.Metrics != nil { in, out := &in.Metrics, &out.Metrics - *out = make([]v2beta2.MetricSpec, len(*in)) + *out = make([]v2.MetricSpec, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -322,7 +322,7 @@ func (in *PaddleElasticPolicy) DeepCopyInto(out *PaddleElasticPolicy) { } if in.Metrics != nil { in, out := &in.Metrics, &out.Metrics - *out = make([]v2beta2.MetricSpec, len(*in)) + *out = make([]v2.MetricSpec, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } diff --git a/pkg/controller.v1/paddlepaddle/paddlepaddle_controller.go b/pkg/controller.v1/paddlepaddle/paddlepaddle_controller.go index b0da22ff55..4d76e5c187 100644 --- a/pkg/controller.v1/paddlepaddle/paddlepaddle_controller.go +++ b/pkg/controller.v1/paddlepaddle/paddlepaddle_controller.go @@ -17,6 +17,7 @@ package paddle import ( "context" "fmt" + "strings" "time" "github.com/go-logr/logr" @@ -329,7 +330,7 @@ func (r *PaddleJobReconciler) DeleteJob(job interface{}) error { func (jc *PaddleJobReconciler) GenLabelSelector(jobName string, rtype commonv1.ReplicaType) *metav1.LabelSelector { labels := jc.GenLabels(jobName) - labels[commonv1.ReplicaTypeLabel] = string(rtype) + labels[commonv1.ReplicaTypeLabel] = strings.ToLower(string(rtype)) return &metav1.LabelSelector{ MatchLabels: labels, @@ -366,10 +367,8 @@ func (r *PaddleJobReconciler) UpdateJobStatus(job interface{}, for rtype, spec := range replicas { status := jobStatus.ReplicaStatuses[rtype] - if status.LabelSelector == nil { - // Generate the label selector. - status.LabelSelector = r.GenLabelSelector(paddlejob.Name, rtype) - } + // Generate the label selector. + status.LabelSelector = metav1.FormatLabelSelector(r.GenLabelSelector(paddlejob.Name, rtype)) succeeded := status.Succeeded expected := *(spec.Replicas) - succeeded @@ -452,9 +451,9 @@ func (r *PaddleJobReconciler) UpdateJobStatus(job interface{}, } else { msg := fmt.Sprintf("PaddleJob %s is failed because %d %s replica(s) failed.", paddlejob.Name, failed, rtype) r.Recorder.Event(paddlejob, corev1.EventTypeNormal, commonutil.JobFailedReason, msg) - if paddlejob.Status.CompletionTime == nil { + if jobStatus.CompletionTime == nil { now := metav1.Now() - paddlejob.Status.CompletionTime = &now + jobStatus.CompletionTime = &now } err := commonutil.UpdateJobConditions(jobStatus, commonv1.JobFailed, commonutil.JobFailedReason, msg) if err != nil { diff --git a/pkg/controller.v1/pytorch/hpa.go b/pkg/controller.v1/pytorch/hpa.go index 437ec38cdf..7999490629 100644 --- a/pkg/controller.v1/pytorch/hpa.go +++ b/pkg/controller.v1/pytorch/hpa.go @@ -17,7 +17,7 @@ package pytorch import ( "context" - autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" + autoscalingv2 "k8s.io/api/autoscaling/v2" "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -37,7 +37,7 @@ func (r *PyTorchJobReconciler) ReconcileHPA(pytorchJob *kubeflowv1.PyTorchJob) e return nil } - current := &autoscalingv2beta2.HorizontalPodAutoscaler{} + current := &autoscalingv2.HorizontalPodAutoscaler{} // Get the exepected HPA. expected, err := desiredHPA(pytorchJob, r.Scheme) @@ -74,16 +74,17 @@ func (r *PyTorchJobReconciler) ReconcileHPA(pytorchJob *kubeflowv1.PyTorchJob) e } func desiredHPA(pytorchJob *kubeflowv1.PyTorchJob, scheme *runtime.Scheme) ( - *autoscalingv2beta2.HorizontalPodAutoscaler, error) { - hpa := &autoscalingv2beta2.HorizontalPodAutoscaler{ + *autoscalingv2.HorizontalPodAutoscaler, error) { + hpa := &autoscalingv2.HorizontalPodAutoscaler{ ObjectMeta: metav1.ObjectMeta{ Name: pytorchJob.Name, Namespace: pytorchJob.Namespace, }, - Spec: autoscalingv2beta2.HorizontalPodAutoscalerSpec{ - ScaleTargetRef: autoscalingv2beta2.CrossVersionObjectReference{ - Kind: pytorchJob.Kind, - Name: pytorchJob.Name, + Spec: autoscalingv2.HorizontalPodAutoscalerSpec{ + ScaleTargetRef: autoscalingv2.CrossVersionObjectReference{ + Kind: pytorchJob.Kind, + Name: pytorchJob.Name, + APIVersion: pytorchJob.APIVersion, }, MinReplicas: pytorchJob.Spec.ElasticPolicy.MinReplicas, MaxReplicas: *pytorchJob.Spec.ElasticPolicy.MaxReplicas, diff --git a/pkg/controller.v1/pytorch/pytorchjob_controller.go b/pkg/controller.v1/pytorch/pytorchjob_controller.go index 211ec906b0..aacd75e36a 100644 --- a/pkg/controller.v1/pytorch/pytorchjob_controller.go +++ b/pkg/controller.v1/pytorch/pytorchjob_controller.go @@ -17,6 +17,7 @@ package pytorch import ( "context" "fmt" + "strings" "time" "github.com/go-logr/logr" @@ -162,7 +163,6 @@ func (r *PyTorchJobReconciler) Reconcile(ctx context.Context, req ctrl.Request) logger.Error(err, "Reconcile PyTorchJob error") return ctrl.Result{}, err } - t, err := util.DurationUntilExpireTime(&pytorchjob.Spec.RunPolicy, pytorchjob.Status) if err != nil { logrus.Warnf("Reconcile PyTorchJob error %v", err) @@ -334,7 +334,7 @@ func (r *PyTorchJobReconciler) DeleteJob(job interface{}) error { func (jc *PyTorchJobReconciler) GenLabelSelector(jobName string, rtype commonv1.ReplicaType) *metav1.LabelSelector { labels := jc.GenLabels(jobName) - labels[commonv1.ReplicaTypeLabel] = string(rtype) + labels[commonv1.ReplicaTypeLabel] = strings.ToLower(string(rtype)) return &metav1.LabelSelector{ MatchLabels: labels, @@ -349,7 +349,6 @@ func (r *PyTorchJobReconciler) UpdateJobStatus(job interface{}, if !ok { return fmt.Errorf("%+v is not a type of PyTorchJob", job) } - pytorchjobKey, err := common.KeyFunc(pytorchjob) if err != nil { utilruntime.HandleError(fmt.Errorf("couldn't get key for pytorchjob object %#v: %v", pytorchjob, err)) @@ -371,10 +370,8 @@ func (r *PyTorchJobReconciler) UpdateJobStatus(job interface{}, for rtype, spec := range replicas { status := jobStatus.ReplicaStatuses[rtype] - if status.LabelSelector == nil { - // Generate the label selector. - status.LabelSelector = r.GenLabelSelector(pytorchjob.Name, rtype) - } + // Generate the label selector. + status.LabelSelector = metav1.FormatLabelSelector(r.GenLabelSelector(pytorchjob.Name, rtype)) succeeded := status.Succeeded expected := *(spec.Replicas) - succeeded @@ -457,9 +454,9 @@ func (r *PyTorchJobReconciler) UpdateJobStatus(job interface{}, } else { msg := fmt.Sprintf("PyTorchJob %s is failed because %d %s replica(s) failed.", pytorchjob.Name, failed, rtype) r.Recorder.Event(pytorchjob, corev1.EventTypeNormal, commonutil.JobFailedReason, msg) - if pytorchjob.Status.CompletionTime == nil { + if jobStatus.CompletionTime == nil { now := metav1.Now() - pytorchjob.Status.CompletionTime = &now + jobStatus.CompletionTime = &now } err := commonutil.UpdateJobConditions(jobStatus, commonv1.JobFailed, commonutil.JobFailedReason, msg) if err != nil { @@ -470,7 +467,6 @@ func (r *PyTorchJobReconciler) UpdateJobStatus(job interface{}, } } } - return nil } diff --git a/pkg/controller.v1/xgboost/xgboostjob_controller.go b/pkg/controller.v1/xgboost/xgboostjob_controller.go index 396ee82357..7be8ff2c7a 100644 --- a/pkg/controller.v1/xgboost/xgboostjob_controller.go +++ b/pkg/controller.v1/xgboost/xgboostjob_controller.go @@ -419,9 +419,9 @@ func (r *XGBoostJobReconciler) UpdateJobStatus(job interface{}, replicas map[com } else { msg := fmt.Sprintf("XGBoostJob %s is failed because %d %s replica(s) failed.", xgboostJob.Name, failed, rtype) r.Recorder.Event(xgboostJob, corev1.EventTypeNormal, xgboostJobFailedReason, msg) - if xgboostJob.Status.CompletionTime == nil { + if jobStatus.CompletionTime == nil { now := metav1.Now() - xgboostJob.Status.CompletionTime = &now + jobStatus.CompletionTime = &now } err := commonutil.UpdateJobConditions(jobStatus, commonv1.JobFailed, xgboostJobFailedReason, msg) if err != nil { diff --git a/sdk/python/docs/KubeflowOrgV1ElasticPolicy.md b/sdk/python/docs/KubeflowOrgV1ElasticPolicy.md index d4256e57f8..3a7a0589ee 100644 --- a/sdk/python/docs/KubeflowOrgV1ElasticPolicy.md +++ b/sdk/python/docs/KubeflowOrgV1ElasticPolicy.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **max_replicas** | **int** | upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas, defaults to null. | [optional] **max_restarts** | **int** | | [optional] -**metrics** | [**list[K8sIoApiAutoscalingV2beta2MetricSpec]**](K8sIoApiAutoscalingV2beta2MetricSpec.md) | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. | [optional] +**metrics** | [**list[K8sIoApiAutoscalingV2MetricSpec]**](K8sIoApiAutoscalingV2MetricSpec.md) | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. | [optional] **min_replicas** | **int** | minReplicas is the lower limit for the number of replicas to which the training job can scale down. It defaults to null. | [optional] **n_proc_per_node** | **int** | Number of workers per node; supported values: [auto, cpu, gpu, int]. | [optional] **rdzv_backend** | **str** | | [optional] diff --git a/sdk/python/docs/KubeflowOrgV1PaddleElasticPolicy.md b/sdk/python/docs/KubeflowOrgV1PaddleElasticPolicy.md index 02c7f5863f..4daf9ddacf 100644 --- a/sdk/python/docs/KubeflowOrgV1PaddleElasticPolicy.md +++ b/sdk/python/docs/KubeflowOrgV1PaddleElasticPolicy.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **max_replicas** | **int** | upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas, defaults to null. | [optional] **max_restarts** | **int** | MaxRestarts is the limit for restart times of pods in elastic mode. | [optional] -**metrics** | [**list[K8sIoApiAutoscalingV2beta2MetricSpec]**](K8sIoApiAutoscalingV2beta2MetricSpec.md) | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. | [optional] +**metrics** | [**list[K8sIoApiAutoscalingV2MetricSpec]**](K8sIoApiAutoscalingV2MetricSpec.md) | Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. | [optional] **min_replicas** | **int** | minReplicas is the lower limit for the number of replicas to which the training job can scale down. It defaults to null. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdk/python/docs/V1ReplicaStatus.md b/sdk/python/docs/V1ReplicaStatus.md index 82a4d06b4d..74f8a8841a 100644 --- a/sdk/python/docs/V1ReplicaStatus.md +++ b/sdk/python/docs/V1ReplicaStatus.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **int** | The number of actively running pods. | [optional] **failed** | **int** | The number of pods which reached phase Failed. | [optional] -**label_selector** | [**V1LabelSelector**](V1LabelSelector.md) | | [optional] +**label_selector** | **str** | A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. | [optional] **succeeded** | **int** | The number of pods which reached phase Succeeded. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdk/python/kubeflow/training/models/kubeflow_org_v1_elastic_policy.py b/sdk/python/kubeflow/training/models/kubeflow_org_v1_elastic_policy.py index b59eb4b06c..c6e3d9f6bd 100644 --- a/sdk/python/kubeflow/training/models/kubeflow_org_v1_elastic_policy.py +++ b/sdk/python/kubeflow/training/models/kubeflow_org_v1_elastic_policy.py @@ -35,7 +35,7 @@ class KubeflowOrgV1ElasticPolicy(object): openapi_types = { 'max_replicas': 'int', 'max_restarts': 'int', - 'metrics': 'list[K8sIoApiAutoscalingV2beta2MetricSpec]', + 'metrics': 'list[K8sIoApiAutoscalingV2MetricSpec]', 'min_replicas': 'int', 'n_proc_per_node': 'int', 'rdzv_backend': 'str', @@ -153,7 +153,7 @@ def metrics(self): Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. # noqa: E501 :return: The metrics of this KubeflowOrgV1ElasticPolicy. # noqa: E501 - :rtype: list[K8sIoApiAutoscalingV2beta2MetricSpec] + :rtype: list[K8sIoApiAutoscalingV2MetricSpec] """ return self._metrics @@ -164,7 +164,7 @@ def metrics(self, metrics): Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. # noqa: E501 :param metrics: The metrics of this KubeflowOrgV1ElasticPolicy. # noqa: E501 - :type: list[K8sIoApiAutoscalingV2beta2MetricSpec] + :type: list[K8sIoApiAutoscalingV2MetricSpec] """ self._metrics = metrics diff --git a/sdk/python/kubeflow/training/models/kubeflow_org_v1_paddle_elastic_policy.py b/sdk/python/kubeflow/training/models/kubeflow_org_v1_paddle_elastic_policy.py index a6c9e981d4..0cf44a4039 100644 --- a/sdk/python/kubeflow/training/models/kubeflow_org_v1_paddle_elastic_policy.py +++ b/sdk/python/kubeflow/training/models/kubeflow_org_v1_paddle_elastic_policy.py @@ -35,7 +35,7 @@ class KubeflowOrgV1PaddleElasticPolicy(object): openapi_types = { 'max_replicas': 'int', 'max_restarts': 'int', - 'metrics': 'list[K8sIoApiAutoscalingV2beta2MetricSpec]', + 'metrics': 'list[K8sIoApiAutoscalingV2MetricSpec]', 'min_replicas': 'int' } @@ -120,7 +120,7 @@ def metrics(self): Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. # noqa: E501 :return: The metrics of this KubeflowOrgV1PaddleElasticPolicy. # noqa: E501 - :rtype: list[K8sIoApiAutoscalingV2beta2MetricSpec] + :rtype: list[K8sIoApiAutoscalingV2MetricSpec] """ return self._metrics @@ -131,7 +131,7 @@ def metrics(self, metrics): Metrics contains the specifications which are used to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated with multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the HPA will not be created. # noqa: E501 :param metrics: The metrics of this KubeflowOrgV1PaddleElasticPolicy. # noqa: E501 - :type: list[K8sIoApiAutoscalingV2beta2MetricSpec] + :type: list[K8sIoApiAutoscalingV2MetricSpec] """ self._metrics = metrics diff --git a/sdk/python/kubeflow/training/models/v1_replica_status.py b/sdk/python/kubeflow/training/models/v1_replica_status.py index 36b5a4a73e..df017ee90c 100644 --- a/sdk/python/kubeflow/training/models/v1_replica_status.py +++ b/sdk/python/kubeflow/training/models/v1_replica_status.py @@ -35,7 +35,7 @@ class V1ReplicaStatus(object): openapi_types = { 'active': 'int', 'failed': 'int', - 'label_selector': 'V1LabelSelector', + 'label_selector': 'str', 'succeeded': 'int' } @@ -117,9 +117,10 @@ def failed(self, failed): def label_selector(self): """Gets the label_selector of this V1ReplicaStatus. # noqa: E501 + A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. # noqa: E501 :return: The label_selector of this V1ReplicaStatus. # noqa: E501 - :rtype: V1LabelSelector + :rtype: str """ return self._label_selector @@ -127,9 +128,10 @@ def label_selector(self): def label_selector(self, label_selector): """Sets the label_selector of this V1ReplicaStatus. + A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. # noqa: E501 :param label_selector: The label_selector of this V1ReplicaStatus. # noqa: E501 - :type: V1LabelSelector + :type: str """ self._label_selector = label_selector diff --git a/sdk/python/test/test_kubeflow_org_v1_mpi_job.py b/sdk/python/test/test_kubeflow_org_v1_mpi_job.py index 2f295c69d8..a39be0b4ab 100644 --- a/sdk/python/test/test_kubeflow_org_v1_mpi_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_mpi_job.py @@ -77,7 +77,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_mpi_job_list.py b/sdk/python/test/test_kubeflow_org_v1_mpi_job_list.py index f1624de8a2..67ee2d394a 100644 --- a/sdk/python/test/test_kubeflow_org_v1_mpi_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_mpi_job_list.py @@ -80,7 +80,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -133,7 +133,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_kubeflow_org_v1_mx_job.py b/sdk/python/test/test_kubeflow_org_v1_mx_job.py index 98d278b6d8..1fc4a1341c 100644 --- a/sdk/python/test/test_kubeflow_org_v1_mx_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_mx_job.py @@ -75,7 +75,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_mx_job_list.py b/sdk/python/test/test_kubeflow_org_v1_mx_job_list.py index dcc218ff2d..c072aad162 100644 --- a/sdk/python/test/test_kubeflow_org_v1_mx_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_mx_job_list.py @@ -78,7 +78,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -129,7 +129,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_kubeflow_org_v1_paddle_job.py b/sdk/python/test/test_kubeflow_org_v1_paddle_job.py index 858073ac1d..7d8b5f6228 100644 --- a/sdk/python/test/test_kubeflow_org_v1_paddle_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_paddle_job.py @@ -81,7 +81,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_paddle_job_list.py b/sdk/python/test/test_kubeflow_org_v1_paddle_job_list.py index 3889b3676d..8801d63285 100644 --- a/sdk/python/test/test_kubeflow_org_v1_paddle_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_paddle_job_list.py @@ -84,7 +84,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -141,7 +141,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_kubeflow_org_v1_py_torch_job.py b/sdk/python/test/test_kubeflow_org_v1_py_torch_job.py index 049301a6c6..64c658922f 100644 --- a/sdk/python/test/test_kubeflow_org_v1_py_torch_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_py_torch_job.py @@ -92,7 +92,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_py_torch_job_list.py b/sdk/python/test/test_kubeflow_org_v1_py_torch_job_list.py index 1529cc62e3..d7182a7071 100644 --- a/sdk/python/test/test_kubeflow_org_v1_py_torch_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_py_torch_job_list.py @@ -95,7 +95,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -163,7 +163,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_kubeflow_org_v1_tf_job.py b/sdk/python/test/test_kubeflow_org_v1_tf_job.py index 3c07834b43..e114fccddb 100644 --- a/sdk/python/test/test_kubeflow_org_v1_tf_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_tf_job.py @@ -76,7 +76,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_tf_job_list.py b/sdk/python/test/test_kubeflow_org_v1_tf_job_list.py index 6d13a2d3a8..617eef2137 100644 --- a/sdk/python/test/test_kubeflow_org_v1_tf_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_tf_job_list.py @@ -79,7 +79,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -131,7 +131,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_kubeflow_org_v1_xg_boost_job.py b/sdk/python/test/test_kubeflow_org_v1_xg_boost_job.py index 9a0a363197..3d349b7873 100644 --- a/sdk/python/test/test_kubeflow_org_v1_xg_boost_job.py +++ b/sdk/python/test/test_kubeflow_org_v1_xg_boost_job.py @@ -74,7 +74,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ) diff --git a/sdk/python/test/test_kubeflow_org_v1_xg_boost_job_list.py b/sdk/python/test/test_kubeflow_org_v1_xg_boost_job_list.py index 6457217c9a..1f484d271c 100644 --- a/sdk/python/test/test_kubeflow_org_v1_xg_boost_job_list.py +++ b/sdk/python/test/test_kubeflow_org_v1_xg_boost_job_list.py @@ -77,7 +77,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) @@ -127,7 +127,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None, ), ) diff --git a/sdk/python/test/test_v1_job_status.py b/sdk/python/test/test_v1_job_status.py index 0e100c868b..12350b6f9a 100644 --- a/sdk/python/test/test_v1_job_status.py +++ b/sdk/python/test/test_v1_job_status.py @@ -51,7 +51,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, start_time = None @@ -71,7 +71,7 @@ def make_instance(self, include_optional): 'key' : V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56, ) }, ) diff --git a/sdk/python/test/test_v1_replica_status.py b/sdk/python/test/test_v1_replica_status.py index c29a2e78c6..17402fa046 100644 --- a/sdk/python/test/test_v1_replica_status.py +++ b/sdk/python/test/test_v1_replica_status.py @@ -38,7 +38,7 @@ def make_instance(self, include_optional): return V1ReplicaStatus( active = 56, failed = 56, - label_selector = None, + label_selector = '0', succeeded = 56 ) else :