diff --git a/deploy/manifests_1.13/analysis.crane.io_analytics.yaml b/deploy/manifests_1.13/analysis.crane.io_analytics.yaml new file mode 100644 index 000000000..a9e3664a7 --- /dev/null +++ b/deploy/manifests_1.13/analysis.crane.io_analytics.yaml @@ -0,0 +1,357 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: analytics.analysis.crane.io +spec: + group: analysis.crane.io + names: + kind: Analytics + listKind: AnalyticsList + plural: analytics + shortNames: + - analytics + singular: analytics + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.type + name: Type + type: string + - jsonPath: .spec.completionStrategy.completionStrategyType + name: Strategy + type: string + - jsonPath: .spec.completionStrategy.periodSeconds + name: PeriodSeconds + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Analytics represents the configuration of an analytics object. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: AnalyticsSpec describes the analytics type, what the analysis + is for and how often the analysis routine runs. + properties: + completionStrategy: + description: CompletionStrategy indicate how to complete an Analytics. + properties: + completionStrategyType: + default: Once + description: CompletionStrategy indicate the strategy to request + an Analytics or Recommendation, value can be "Once" and "Periodical" + the default CompletionStrategy is Once. + enum: + - Once + - Periodical + type: string + periodSeconds: + description: PeriodSeconds is the duration in seconds for an Analytics + or Recommendation. + format: int64 + type: integer + type: object + config: + additionalProperties: + type: string + description: Override Recommendation configs + type: object + resourceSelectors: + description: ResourceSelector indicates how to select resources(e.g. + a set of Deployments) for an Analytics. + items: + description: ResourceSelector describes how the resources will be + selected. + properties: + apiVersion: + description: API version of the resource, e.g. "apps/v1" + type: string + kind: + description: Kind of the resource, e.g. Deployment + type: string + 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. + 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 + name: + description: Name of the resource. + type: string + required: + - kind + type: object + type: array + type: + description: Type is the analysis type, including HPA and resource. + type: string + required: + - resourceSelectors + - type + type: object + status: + description: AnalyticsStatus represents the current state of an analytics + item. + properties: + conditions: + description: Conditions is an array of current analytics conditions. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastUpdateTime: + description: LastUpdateTime is the last time the status updated. + format: date-time + type: string + recommendations: + description: Recommendations is a list of RecommendationMission that + run parallel. + items: + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + lastStartTime: + description: LastStartTime is last time we start a recommendation + mission. + format: date-time + type: string + message: + description: Message presents the running message for this mission + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + recommenderRef: + description: RecommenderRef presents recommender info for recommendation + mission. + properties: + name: + description: Recommender's Name + type: string + required: + - name + type: object + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + targetRef: + description: 'ObjectReference contains enough information to + let you inspect or modify the referred object. --- New uses + of this type are discouraged because of difficulty describing + its usage when embedded in APIs. 1. Ignored fields. It includes + many fields which are not generally honored. For instance, + ResourceVersion and FieldPath are both very rarely valid in + actual usage. 2. Invalid usage help. It is impossible to + add specific help for individual usage. In most embedded + usages, there are particular restrictions like, "must + refer only to types A and B" or "UID not honored" or "name + must be restricted". Those cannot be well described when + embedded. 3. Inconsistent validation. Because the usages + are different, the validation rules are different by usage, + which makes it hard for users to predict what will happen. 4. + The fields are both imprecise and overly precise. Kind is + not a precise mapping to a URL. This can produce ambiguity during + interpretation and require a REST mapping. In most cases, + the dependency is on the group,resource tuple and the + version of the actual struct is irrelevant. 5. We cannot + easily change it. Because this type is embedded in many locations, + updates to this type will affect numerous schemas. Don''t + make new APIs embed an underspecified API type they do not + control. Instead of using this type, create a locally provided + and used type that is well-focused on your reference. For + example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that + triggered the event) or if no container name is specified + "spec.containers[2]" (container with index 2 in this pod). + This syntax is chosen only to have some well-defined way + of referencing a part of an object. TODO: this design + is not final and this field is subject to change in the + future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/analysis.crane.io_configsets.yaml b/deploy/manifests_1.13/analysis.crane.io_configsets.yaml new file mode 100644 index 000000000..d694bdb5f --- /dev/null +++ b/deploy/manifests_1.13/analysis.crane.io_configsets.yaml @@ -0,0 +1,66 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: configsets.analysis.crane.io +spec: + group: analysis.crane.io + names: + kind: ConfigSet + listKind: ConfigSetList + plural: configsets + shortNames: + - cs + singular: configset + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ConfigSet represents the configuration set for recommendation. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + configs: + items: + properties: + properties: + additionalProperties: + type: string + type: object + targets: + items: + properties: + kind: + type: string + name: + type: string + namespace: + type: string + type: object + type: array + type: object + type: array + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/analysis.crane.io_recommendationrules.yaml b/deploy/manifests_1.13/analysis.crane.io_recommendationrules.yaml new file mode 100644 index 000000000..27c5dc7ca --- /dev/null +++ b/deploy/manifests_1.13/analysis.crane.io_recommendationrules.yaml @@ -0,0 +1,290 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: recommendationrules.analysis.crane.io +spec: + group: analysis.crane.io + names: + kind: RecommendationRule + listKind: RecommendationRuleList + plural: recommendationrules + shortNames: + - rr + singular: recommendationrule + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.runInterval + name: RunInterval + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: RecommendationRule represents the configuration of an RecommendationRule + object. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: RecommendationRuleSpec defines resources and runInterval + to recommend + properties: + namespaceSelector: + description: NamespaceSelector indicates resource namespaces to select + from + properties: + any: + description: Select all namespace if true + type: boolean + matchNames: + description: List of namespace names to select from. + items: + type: string + type: array + type: object + recommenders: + description: List of recommender type to run + items: + description: Recommender referring to the Recommender in RecommendationConfiguration + properties: + name: + description: Recommender's Name + type: string + required: + - name + type: object + type: array + resourceSelectors: + description: ResourceSelector indicates how to select resources(e.g. + a set of Deployments) for a Recommendation. + items: + description: ResourceSelector describes how the resources will be + selected. + properties: + apiVersion: + description: API version of the resource, e.g. "apps/v1" + type: string + kind: + description: Kind of the resource, e.g. Deployment + type: string + 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. + 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 + name: + description: Name of the resource. + type: string + required: + - kind + type: object + type: array + runInterval: + description: RunInterval between two recommendation + type: string + required: + - namespaceSelector + - recommenders + - resourceSelectors + type: object + status: + description: RecommendationRuleStatus represents the current state of + an RecommendationRule item. + properties: + lastUpdateTime: + description: LastUpdateTime is the last time the status updated. + format: date-time + type: string + recommendations: + description: Recommendations is a list of RecommendationMission that + run parallel. + items: + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + lastStartTime: + description: LastStartTime is last time we start a recommendation + mission. + format: date-time + type: string + message: + description: Message presents the running message for this mission + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + recommenderRef: + description: RecommenderRef presents recommender info for recommendation + mission. + properties: + name: + description: Recommender's Name + type: string + required: + - name + type: object + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + targetRef: + description: 'ObjectReference contains enough information to + let you inspect or modify the referred object. --- New uses + of this type are discouraged because of difficulty describing + its usage when embedded in APIs. 1. Ignored fields. It includes + many fields which are not generally honored. For instance, + ResourceVersion and FieldPath are both very rarely valid in + actual usage. 2. Invalid usage help. It is impossible to + add specific help for individual usage. In most embedded + usages, there are particular restrictions like, "must + refer only to types A and B" or "UID not honored" or "name + must be restricted". Those cannot be well described when + embedded. 3. Inconsistent validation. Because the usages + are different, the validation rules are different by usage, + which makes it hard for users to predict what will happen. 4. + The fields are both imprecise and overly precise. Kind is + not a precise mapping to a URL. This can produce ambiguity during + interpretation and require a REST mapping. In most cases, + the dependency is on the group,resource tuple and the + version of the actual struct is irrelevant. 5. We cannot + easily change it. Because this type is embedded in many locations, + updates to this type will affect numerous schemas. Don''t + make new APIs embed an underspecified API type they do not + control. Instead of using this type, create a locally provided + and used type that is well-focused on your reference. For + example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that + triggered the event) or if no container name is specified + "spec.containers[2]" (container with index 2 in this pod). + This syntax is chosen only to have some well-defined way + of referencing a part of an object. TODO: this design + is not final and this field is subject to change in the + future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/analysis.crane.io_recommendations.yaml b/deploy/manifests_1.13/analysis.crane.io_recommendations.yaml new file mode 100644 index 000000000..2cd0f44af --- /dev/null +++ b/deploy/manifests_1.13/analysis.crane.io_recommendations.yaml @@ -0,0 +1,319 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: recommendations.analysis.crane.io +spec: + group: analysis.crane.io + names: + kind: Recommendation + listKind: RecommendationList + plural: recommendations + shortNames: + - recommend + singular: recommendation + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.type + name: Type + type: string + - jsonPath: .spec.targetRef.kind + name: TargetKind + type: string + - jsonPath: .spec.targetRef.namespace + name: TargetNamespace + type: string + - jsonPath: .spec.targetRef.name + name: TargetName + type: string + - jsonPath: .spec.completionStrategy.completionStrategyType + name: Strategy + type: string + - jsonPath: .spec.completionStrategy.periodSeconds + name: PeriodSeconds + type: string + - jsonPath: .spec.adoptionType + name: AdoptionType + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Recommendation represents the configuration of a single recommendation. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: RecommendationSpec describes the recommendation type and + what the recommendation is for. + properties: + adoptionType: + default: StatusAndAnnotation + description: AdoptionType indicate how to adopt recommendation value + to target. the default AdoptionType is StatusAndAnnotation. + enum: + - Status + - StatusAndAnnotation + - Auto + type: string + completionStrategy: + description: CompletionStrategy indicate how to complete a recommendation. + the default CompletionStrategy is Once. + properties: + completionStrategyType: + default: Once + description: CompletionStrategy indicate the strategy to request + an Analytics or Recommendation, value can be "Once" and "Periodical" + the default CompletionStrategy is Once. + enum: + - Once + - Periodical + type: string + periodSeconds: + description: PeriodSeconds is the duration in seconds for an Analytics + or Recommendation. + format: int64 + type: integer + type: object + targetRef: + description: 'ObjectReference contains enough information to let you + inspect or modify the referred object. --- New uses of this type + are discouraged because of difficulty describing its usage when + embedded in APIs. 1. Ignored fields. It includes many fields which + are not generally honored. For instance, ResourceVersion and FieldPath + are both very rarely valid in actual usage. 2. Invalid usage help. It + is impossible to add specific help for individual usage. In most + embedded usages, there are particular restrictions like, "must + refer only to types A and B" or "UID not honored" or "name must + be restricted". Those cannot be well described when embedded. 3. + Inconsistent validation. Because the usages are different, the + validation rules are different by usage, which makes it hard for + users to predict what will happen. 4. The fields are both imprecise + and overly precise. Kind is not a precise mapping to a URL. This + can produce ambiguity during interpretation and require a REST + mapping. In most cases, the dependency is on the group,resource + tuple and the version of the actual struct is irrelevant. 5. + We cannot easily change it. Because this type is embedded in many + locations, updates to this type will affect numerous schemas. Don''t + make new APIs embed an underspecified API type they do not control. + Instead of using this type, create a locally provided and used type + that is well-focused on your reference. For example, ServiceReferences + for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: + type: string + required: + - targetRef + - type + type: object + status: + description: RecommendationStatus represents the current state of a recommendation. + properties: + action: + type: string + conditions: + description: Conditions is an array of current recommendation conditions. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + currentInfo: + type: string + description: + type: string + lastUpdateTime: + description: LastUpdateTime is last time we got an update on this + status. + format: date-time + type: string + recommendedInfo: + type: string + recommendedValue: + type: string + targetRef: + description: 'ObjectReference contains enough information to let you + inspect or modify the referred object. --- New uses of this type + are discouraged because of difficulty describing its usage when + embedded in APIs. 1. Ignored fields. It includes many fields which + are not generally honored. For instance, ResourceVersion and FieldPath + are both very rarely valid in actual usage. 2. Invalid usage help. It + is impossible to add specific help for individual usage. In most + embedded usages, there are particular restrictions like, "must + refer only to types A and B" or "UID not honored" or "name must + be restricted". Those cannot be well described when embedded. 3. + Inconsistent validation. Because the usages are different, the + validation rules are different by usage, which makes it hard for + users to predict what will happen. 4. The fields are both imprecise + and overly precise. Kind is not a precise mapping to a URL. This + can produce ambiguity during interpretation and require a REST + mapping. In most cases, the dependency is on the group,resource + tuple and the version of the actual struct is irrelevant. 5. + We cannot easily change it. Because this type is embedded in many + locations, updates to this type will affect numerous schemas. Don''t + make new APIs embed an underspecified API type they do not control. + Instead of using this type, create a locally provided and used type + that is well-focused on your reference. For example, ServiceReferences + for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/autoscaling.crane.io_effectivehorizontalpodautoscalers.yaml b/deploy/manifests_1.13/autoscaling.crane.io_effectivehorizontalpodautoscalers.yaml new file mode 100644 index 000000000..2ec70ce2e --- /dev/null +++ b/deploy/manifests_1.13/autoscaling.crane.io_effectivehorizontalpodautoscalers.yaml @@ -0,0 +1,930 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: effectivehorizontalpodautoscalers.autoscaling.crane.io +spec: + group: autoscaling.crane.io + names: + kind: EffectiveHorizontalPodAutoscaler + listKind: EffectiveHorizontalPodAutoscalerList + plural: effectivehorizontalpodautoscalers + shortNames: + - ehpa + singular: effectivehorizontalpodautoscaler + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The scale strategy of ahpa. + jsonPath: .spec.scaleStrategy + name: STRATEGY + type: string + - description: The min replicas of target workload. + jsonPath: .spec.minReplicas + name: MINPODS + type: integer + - description: The max replicas of target workload. + jsonPath: .spec.maxReplicas + name: MAXPODS + type: integer + - description: The specific replicas of target workload. + jsonPath: .spec.specificReplicas + name: SPECIFICPODS + type: integer + - description: The desired replicas of target workload. + jsonPath: .status.expectReplicas + name: REPLICAS + type: integer + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: EffectiveHorizontalPodAutoscaler is the Schema for the effectivehorizontalpodautoscaler + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: EffectiveHorizontalPodAutoscalerSpec defines the desired + spec of EffectiveHorizontalPodAutoscaler + properties: + behavior: + description: behavior configures the scaling behavior of the target + in both Up and Down directions (scaleUp and scaleDown fields respectively). + If not set, the default HPAScalingRules for scale up and scale down + are used. + properties: + scaleDown: + description: scaleDown is scaling policy for scaling Down. If + not set, the default value is to allow to scale down to minReplicas + pods, with a 300 second stabilization window (i.e., the highest + recommendation for the last 300sec is used). + properties: + policies: + description: policies is a list of potential scaling polices + which can be used during scaling. At least one policy must + be specified, otherwise the HPAScalingRules will be discarded + as invalid + items: + description: HPAScalingPolicy is a single policy which must + hold true for a specified past interval. + properties: + periodSeconds: + description: PeriodSeconds specifies the window of time + for which the policy should hold true. PeriodSeconds + must be greater than zero and less than or equal to + 1800 (30 min). + format: int32 + type: integer + type: + description: Type is used to specify the scaling policy. + type: string + value: + description: Value contains the amount of change which + is permitted by the policy. It must be greater than + zero + format: int32 + type: integer + required: + - periodSeconds + - type + - value + type: object + type: array + selectPolicy: + description: selectPolicy is used to specify which policy + should be used. If not set, the default value MaxPolicySelect + is used. + type: string + stabilizationWindowSeconds: + description: 'StabilizationWindowSeconds is the number of + seconds for which past recommendations should be considered + while scaling up or scaling down. StabilizationWindowSeconds + must be greater than or equal to zero and less than or equal + to 3600 (one hour). If not set, use the default values: + - For scale up: 0 (i.e. no stabilization is done). - For + scale down: 300 (i.e. the stabilization window is 300 seconds + long).' + format: int32 + type: integer + type: object + scaleUp: + description: 'scaleUp is scaling policy for scaling Up. If not + set, the default value is the higher of: * increase no more + than 4 pods per 60 seconds * double the number of pods per + 60 seconds No stabilization is used.' + properties: + policies: + description: policies is a list of potential scaling polices + which can be used during scaling. At least one policy must + be specified, otherwise the HPAScalingRules will be discarded + as invalid + items: + description: HPAScalingPolicy is a single policy which must + hold true for a specified past interval. + properties: + periodSeconds: + description: PeriodSeconds specifies the window of time + for which the policy should hold true. PeriodSeconds + must be greater than zero and less than or equal to + 1800 (30 min). + format: int32 + type: integer + type: + description: Type is used to specify the scaling policy. + type: string + value: + description: Value contains the amount of change which + is permitted by the policy. It must be greater than + zero + format: int32 + type: integer + required: + - periodSeconds + - type + - value + type: object + type: array + selectPolicy: + description: selectPolicy is used to specify which policy + should be used. If not set, the default value MaxPolicySelect + is used. + type: string + stabilizationWindowSeconds: + description: 'StabilizationWindowSeconds is the number of + seconds for which past recommendations should be considered + while scaling up or scaling down. StabilizationWindowSeconds + must be greater than or equal to zero and less than or equal + to 3600 (one hour). If not set, use the default values: + - For scale up: 0 (i.e. no stabilization is done). - For + scale down: 300 (i.e. the stabilization window is 300 seconds + long).' + format: int32 + type: integer + type: object + type: object + crons: + description: Crons contains cron specs to use crontab to scale workloads + items: + description: CronSpec defines the cron scale info + properties: + description: + description: Description is the description of the cron + type: string + end: + description: End is a crontab format, see https://en.wikipedia.org/wiki/Cron + Define the cron schedule end, when it ended, EHPA will stop + to trigger hpa to scale. Between the start and end, EHPA will + keep replicas of the targetRef to equal to TargetReplicas, + a scaling is a process rather than a instant action, make + it as a final consistent system. + type: string + name: + description: Name is the identifier of this cron scale. name + must be unique in the same ehpa + type: string + start: + description: Start is a crontab format, see https://en.wikipedia.org/wiki/Cron + Define the cron schedule start, when the cron start is triggered, + hpa will reconcile targetRef to scale to the TargetReplicas + continuously. + type: string + targetReplicas: + description: TargetReplicas is the target replicas when it is + time to do scale between cron start and end + format: int32 + type: integer + timezone: + description: TimeZone is the time zone of this cron schedule + running in, default is UTC time. + type: string + type: object + type: array + maxReplicas: + description: MaxReplicas is the upper limit replicas to the scale + target which the autoscaler can scale up to. It cannot be less that + MinReplicas. + format: int32 + type: integer + metrics: + description: metrics contains the specifications for which to use + to calculate the desired replica count (the maximum replica count + across all metrics will be used). The desired replica count is + calculated 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 default metric + will be set to 80% average CPU utilization. + items: + description: MetricSpec specifies how to scale based on a single + metric (only `type` and one other matching field should be set + at once). + properties: + containerResource: + description: container resource 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 metrics are + built in to Kubernetes, and have special scaling options on + top of those available to normal per-pod metrics using the + "pods" source. This is an alpha feature and can be enabled + by the HPAContainerMetrics feature flag. + properties: + container: + description: container is the name of the container in the + pods of the scaling target + type: string + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the given + metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all relevant + pods, represented as a percentage of the requested + value of the resource for the pods. Currently only + valid for Resource metric source type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of the + average of the metric across all relevant pods (as + a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric type + is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - container + - name + - target + type: object + external: + description: external refers to a global metric that is not + associated with any Kubernetes object. It allows autoscaling + based on information coming from components running outside + of cluster (for example length of queue in cloud messaging + service, or QPS from loadbalancer running outside of cluster). + properties: + metric: + description: metric identifies the target metric by name + and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form of + a standard kubernetes label selector for the given + metric When set, it is passed as an additional parameter + to the metrics server for more specific metrics scoping. + When unset, just the metricName will be used to gather + metrics. + 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 + required: + - name + type: object + target: + description: target specifies the target value for the given + metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all relevant + pods, represented as a percentage of the requested + value of the resource for the pods. Currently only + valid for Resource metric source type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of the + average of the metric across all relevant pods (as + a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric type + is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + object: + description: object refers to a metric describing a single kubernetes + object (for example, hits-per-second on an Ingress object). + properties: + describedObject: + description: CrossVersionObjectReference contains enough + information to let you identify the referred resource. + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' + type: string + name: + description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names' + type: string + required: + - kind + - name + type: object + metric: + description: metric identifies the target metric by name + and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form of + a standard kubernetes label selector for the given + metric When set, it is passed as an additional parameter + to the metrics server for more specific metrics scoping. + When unset, just the metricName will be used to gather + metrics. + 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 + required: + - name + type: object + target: + description: target specifies the target value for the given + metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all relevant + pods, represented as a percentage of the requested + value of the resource for the pods. Currently only + valid for Resource metric source type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of the + average of the metric across all relevant pods (as + a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric type + is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - describedObject + - metric + - target + type: object + pods: + description: pods refers to a metric describing each pod in + the current scale target (for example, transactions-processed-per-second). The + values will be averaged together before being compared to + the target value. + properties: + metric: + description: metric identifies the target metric by name + and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form of + a standard kubernetes label selector for the given + metric When set, it is passed as an additional parameter + to the metrics server for more specific metrics scoping. + When unset, just the metricName will be used to gather + metrics. + 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 + required: + - name + type: object + target: + description: target specifies the target value for the given + metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all relevant + pods, represented as a percentage of the requested + value of the resource for the pods. Currently only + valid for Resource metric source type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of the + average of the metric across all relevant pods (as + a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric type + is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + resource: + description: resource refers to a resource metric (such as those + specified in requests and limits) known to Kubernetes describing + each pod in the current scale target (e.g. CPU or memory). + Such metrics are built in to Kubernetes, and have special + scaling options on top of those available to normal per-pod + metrics using the "pods" source. + properties: + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the given + metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all relevant + pods, represented as a percentage of the requested + value of the resource for the pods. Currently only + valid for Resource metric source type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of the + average of the metric across all relevant pods (as + a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric type + is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - name + - target + type: object + type: + description: 'type is the type of metric source. It should + be one of "ContainerResource", "External", "Object", "Pods" + or "Resource", each mapping to a matching field in the object. + Note: "ContainerResource" type is available on when the feature-gate + HPAContainerMetrics is enabled' + type: string + required: + - type + type: object + type: array + minReplicas: + default: 1 + description: MinReplicas is the lower limit replicas to the scale + target which the autoscaler can scale down to. the default MinReplicas + is 1. + format: int32 + type: integer + prediction: + description: Prediction defines configurations for predict resources. + If unspecified, defaults don't enable prediction. + properties: + predictionAlgorithm: + description: PredictionAlgorithm contains all algorithm config + that provider by prediction api. + properties: + algorithmType: + description: AlgorithmType specifies algorithm to predict + resource + type: string + dsp: + properties: + estimators: + description: Estimator + properties: + fft: + items: + properties: + highFrequencyThreshold: + type: string + lowAmplitudeThreshold: + type: string + marginFraction: + type: string + maxNumOfSpectrumItems: + format: int32 + type: integer + minNumOfSpectrumItems: + format: int32 + type: integer + type: object + type: array + maxValue: + items: + properties: + marginFraction: + type: string + type: object + type: array + type: object + historyLength: + description: HistoryLength describes how long back should + be queried against provider to get historical metrics + for prediction. + type: string + sampleInterval: + description: SampleInterval is the sampling interval of + metrics. + type: string + type: object + percentile: + properties: + aggregated: + type: boolean + histogram: + properties: + bucketSize: + type: string + bucketSizeGrowthRatio: + type: string + epsilon: + type: string + firstBucketSize: + type: string + halfLife: + type: string + maxValue: + type: string + type: object + historyLength: + type: string + marginFraction: + type: string + minSampleWeight: + type: string + percentile: + type: string + sampleInterval: + type: string + targetUtilization: + type: string + type: object + type: object + predictionWindowSeconds: + default: 3600 + description: PredictionWindowSeconds is the time window seconds + to predict metrics in the future. + format: int32 + type: integer + type: object + scaleStrategy: + default: Auto + description: ScaleStrategy indicate the strategy to scaling target, + value can be "Auto" and "Preview" the default ScaleStrategy is Auto. + enum: + - Auto + - Preview + type: string + scaleTargetRef: + description: ScaleTargetRef is the reference to the workload that + should be scaled. + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' + type: string + name: + description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names' + type: string + required: + - kind + - name + type: object + specificReplicas: + description: SpecificReplicas specify the target replicas if ScaleStrategy + is Preview If not set, when ScaleStrategy is setting to Preview, + it will just stop scaling + format: int32 + type: integer + required: + - maxReplicas + - scaleTargetRef + type: object + status: + properties: + conditions: + description: Conditions is an array of current autoscaler conditions. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + currentReplicas: + description: CurrentReplicas is the current replicas to the scale + target. + format: int32 + type: integer + expectReplicas: + description: ExpectReplicas is the expected replicas to scale to. + format: int32 + type: integer + lastScaleTime: + description: LastScaleTime indicates the last time to execute scaling. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/autoscaling.crane.io_effectiveverticalpodautoscalers.yaml b/deploy/manifests_1.13/autoscaling.crane.io_effectiveverticalpodautoscalers.yaml new file mode 100644 index 000000000..09d673380 --- /dev/null +++ b/deploy/manifests_1.13/autoscaling.crane.io_effectiveverticalpodautoscalers.yaml @@ -0,0 +1,503 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: effectiveverticalpodautoscalers.autoscaling.crane.io +spec: + group: autoscaling.crane.io + names: + kind: EffectiveVerticalPodAutoscaler + listKind: EffectiveVerticalPodAutoscalerList + plural: effectiveverticalpodautoscalers + shortNames: + - evpa + singular: effectiveverticalpodautoscaler + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: EffectiveVerticalPodAutoscaler is the Schema for the effectiveverticalpodautoscaler + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + resourceEstimators: + description: ResourceEstimators Contains the specifications for estimators. + items: + description: ResourceEstimator defines the spec for resource estimator + properties: + config: + additionalProperties: + type: string + description: 'Config contains key value pairs for this estimator + for example, we can define configs like: key1: value1 key2: + value2 these configs will pass into estimators when execute + scaling' + type: object + priority: + description: Priority defines the priority for this estimator. + type: integer + type: + description: Type defines the type for this estimator. + type: string + type: object + type: array + resourcePolicy: + description: Controls how the autoscaler computes recommended resources. + The resource policy may be used to set constraints on the recommendations + for individual containers. If not specified, the autoscaler computes + recommended resources for all containers in the pod, without additional + constraints. + properties: + containerPolicies: + description: Per-container resource policies. + items: + description: ContainerResourcePolicy controls how autoscaler + computes the recommended resources for a specific container. + properties: + containerName: + description: Name of the container or DefaultContainerResourcePolicy, + in which case the policy is used by the containers that + don't have their own policy specified. + type: string + controlledResources: + description: Specifies the type of recommendations that + will be computed (and possibly applied) by VPA. If not + specified, the default of [ResourceCPU, ResourceMemory] + will be used. + items: + type: string + type: array + controlledValues: + description: Specifies which resource values should be controlled. + The default is "RequestsAndLimits". + enum: + - RequestsAndLimits + - RequestsOnly + type: string + maxAllowed: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Specifies the maximum amount of resources that + will be recommended for the container. The default is + no maximum. + type: object + minAllowed: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Specifies the minimal amount of resources that + will be recommended for the container. The default is + no minimum. + type: object + scaleDownPolicy: + description: ScaleDownPolicy define the policy when scale + down containers resources. + properties: + metricThresholds: + additionalProperties: + properties: + utilization: + description: Utilization is the target value of + resource recommended ratio. + format: int32 + type: integer + type: object + description: MetricThresholds defines resource usages + thresholds for vertical scaling. Only if actual usage + is reached to threshold, autoscaling estimator will + be triggered. + type: object + mode: + allOf: + - enum: + - Auto + - "Off" + - enum: + - Auto + - "Off" + default: Auto + description: ScaleMode controls Whether autoscaler is + enabled for the container. The default is "Auto". + type: string + stabilizationWindowSeconds: + default: 3600 + description: StabilizationWindowSeconds is the number + of seconds for which past vertical scaling considered + while scaling up or scaling down. + format: int32 + type: integer + type: object + scaleUpPolicy: + description: ScaleUpPolicy define the policy when scale + up containers resources. + properties: + metricThresholds: + additionalProperties: + properties: + utilization: + description: Utilization is the target value of + resource recommended ratio. + format: int32 + type: integer + type: object + description: MetricThresholds defines resource usages + thresholds for vertical scaling. Only if actual usage + is reached to threshold, autoscaling estimator will + be triggered. + type: object + mode: + allOf: + - enum: + - Auto + - "Off" + - enum: + - Auto + - "Off" + default: Auto + description: ScaleMode controls Whether autoscaler is + enabled for the container. The default is "Auto". + type: string + stabilizationWindowSeconds: + default: 3600 + description: StabilizationWindowSeconds is the number + of seconds for which past vertical scaling considered + while scaling up or scaling down. + format: int32 + type: integer + type: object + type: object + type: array + type: object + targetRef: + description: TargetRef points to the controller managing the set of + pods for the autoscaler to control - e.g. Deployment, StatefulSet. + VerticalPodAutoscaler can be targeted at controller implementing + scale subresource (the pod set is retrieved from the controller's + ScaleStatus) or some well known controllers (e.g. for DaemonSet + the pod set is read from the controller's spec). If VerticalPodAutoscaler + cannot use specified target it will report ConfigUnsupported condition. + Note that VerticalPodAutoscaler does not require full implementation + of scale subresource - it will not use it to modify the replica + count. The only thing retrieved is a label selector matching pods + grouped by the target resource. + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' + type: string + name: + description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names' + type: string + required: + - kind + - name + type: object + updatePolicy: + description: Describes the rules on how changes are applied to the + pods. If not specified, all fields in the `PodUpdatePolicy` are + set to their default values. + properties: + minReplicas: + description: Minimal number of replicas which need to be alive + for Updater to attempt pod eviction (pending other checks like + PDB). Only positive values are allowed. Overrides global '--min-replicas' + flag. + format: int32 + type: integer + updateMode: + description: Controls when autoscaler applies changes to the pod + resources. The default is 'Auto'. + enum: + - "Off" + - Initial + - Recreate + - Auto + type: string + type: object + required: + - targetRef + type: object + status: + description: EffectiveVerticalPodAutoscalerStatus describes the runtime + state of the autoscaler. + properties: + conditions: + description: Conditions is an array of current autoscaler conditions. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + currentEstimators: + description: CurrentEstimators is the last state of the estimators + used by this autoscaler + items: + description: ResourceEstimatorStatus contains state for resource + estimator + properties: + lastUpdateTime: + description: LastUpdateTime is the last time the status updated. + format: date-time + type: string + recommendation: + description: The most recently computed amount of resources + recommended by the estimator for the controlled pods. + properties: + containerRecommendations: + description: Resources recommended by the autoscaler for + each container. + items: + description: RecommendedContainerResources is the recommendation + of resources computed by autoscaler for a specific container. + Respects the container resource policy if present in + the spec. In particular the recommendation is not produced + for containers with `ContainerScalingMode` set to 'Off'. + properties: + containerName: + description: Name of the container. + type: string + lowerBound: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Minimum recommended amount of resources. + Observes ContainerResourcePolicy. This amount is + not guaranteed to be sufficient for the application + to operate in a stable way, however running with + less resources is likely to have significant impact + on performance/availability. + type: object + target: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Recommended amount of resources. Observes + ContainerResourcePolicy. + type: object + uncappedTarget: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: The most recent recommended resources + target computed by the autoscaler for the controlled + pods, based only on actual resource usage, not taking + into account the ContainerResourcePolicy. May differ + from the Recommendation if the actual resource usage + causes the target to violate the ContainerResourcePolicy + (lower than MinAllowed or higher that MaxAllowed). + Used only as status indication, will not affect + actual resource assignment. + type: object + upperBound: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Maximum recommended amount of resources. + Observes ContainerResourcePolicy. Any resources + allocated beyond this value are likely wasted. This + value may be larger than the maximum amount of application + is actually capable of consuming. + type: object + required: + - target + type: object + type: array + type: object + type: + description: Type defines the type for this estimator. + type: string + type: object + type: array + recommendation: + description: The most recently computed amount of resources recommended + by the autoscaler for the controlled pods. + properties: + containerRecommendations: + description: Resources recommended by the autoscaler for each + container. + items: + description: RecommendedContainerResources is the recommendation + of resources computed by autoscaler for a specific container. + Respects the container resource policy if present in the spec. + In particular the recommendation is not produced for containers + with `ContainerScalingMode` set to 'Off'. + properties: + containerName: + description: Name of the container. + type: string + lowerBound: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Minimum recommended amount of resources. Observes + ContainerResourcePolicy. This amount is not guaranteed + to be sufficient for the application to operate in a stable + way, however running with less resources is likely to + have significant impact on performance/availability. + type: object + target: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Recommended amount of resources. Observes ContainerResourcePolicy. + type: object + uncappedTarget: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: The most recent recommended resources target + computed by the autoscaler for the controlled pods, based + only on actual resource usage, not taking into account + the ContainerResourcePolicy. May differ from the Recommendation + if the actual resource usage causes the target to violate + the ContainerResourcePolicy (lower than MinAllowed or + higher that MaxAllowed). Used only as status indication, + will not affect actual resource assignment. + type: object + upperBound: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Maximum recommended amount of resources. Observes + ContainerResourcePolicy. Any resources allocated beyond + this value are likely wasted. This value may be larger + than the maximum amount of application is actually capable + of consuming. + type: object + required: + - target + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/autoscaling.crane.io_substitutes.yaml b/deploy/manifests_1.13/autoscaling.crane.io_substitutes.yaml new file mode 100644 index 000000000..1e70dca81 --- /dev/null +++ b/deploy/manifests_1.13/autoscaling.crane.io_substitutes.yaml @@ -0,0 +1,102 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: substitutes.autoscaling.crane.io +spec: + group: autoscaling.crane.io + names: + kind: Substitute + listKind: SubstituteList + plural: substitutes + shortNames: + - subs + singular: substitute + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The replicas presents the dryRun result. + jsonPath: .status.replicas + name: REPLICAS + type: integer + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Substitute is the Schema for the Substitute API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SubstituteSpec defines the desired spec of Substitute + properties: + replicas: + description: Replicas is used by presents dryRun replicas for SubstituteTargetRef. + format: int32 + type: integer + substituteTargetRef: + description: SubstituteTargetRef is the reference to the workload + that should be Substituted. + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' + type: string + name: + description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names' + type: string + required: + - kind + - name + type: object + required: + - substituteTargetRef + type: object + status: + description: SubstituteStatus defines the status of Substitute + properties: + labelSelector: + description: LabelSelector is label selectors that is sync with SubstituteTargetRef's + labelSelector which used by HPA. + type: string + replicas: + description: Replicas is used by presents dryRun replicas for SubstituteTargetRef. + status.replicas should be equal to spec.replicas. + format: int32 + type: integer + type: object + type: object + served: true + storage: true + subresources: + scale: + labelSelectorPath: .status.labelSelector + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/ensurance.crane.io_avoidanceactions.yaml b/deploy/manifests_1.13/ensurance.crane.io_avoidanceactions.yaml new file mode 100644 index 000000000..8f7449c6f --- /dev/null +++ b/deploy/manifests_1.13/ensurance.crane.io_avoidanceactions.yaml @@ -0,0 +1,107 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: avoidanceactions.ensurance.crane.io +spec: + group: ensurance.crane.io + names: + kind: AvoidanceAction + listKind: AvoidanceActionList + plural: avoidanceactions + shortNames: + - avoid + singular: avoidanceaction + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: AvoidanceAction defines Avoidance action + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + coolDownSeconds: + default: 300 + description: CoolDownSeconds is the seconds for cool down when do + avoidance. Defaults to 300. Minimum value is 1. + format: int32 + type: integer + description: + description: Description is an arbitrary string that usually provides + guidelines on when this action should be used. + maxLength: 1024 + type: string + eviction: + description: Eviction describes the eviction action + properties: + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds is the duration in + seconds the pod needs to terminate gracefully. May be decreased + in delete request. If this value is nil, the pod's terminationGracePeriodSeconds + will be used. Otherwise, this value overrides the value provided + by the pod spec. Value must be non-negative integer. The value + zero indicates delete immediately. + format: int32 + type: integer + type: object + throttle: + description: Throttle describes the throttling action + properties: + cpuThrottle: + properties: + minCPURatio: + description: 'MinCPURatio is the min of cpu ratio for low + level pods, for example: the pod limit is 4096, ratio is + 10, the minimum is 409. MinCPURatio range [0,100]' + format: int32 + maximum: 100 + minimum: 0 + type: integer + stepCPURatio: + description: StepCPURatio is the step of cpu share and limit + for once down-size. StepCPURatio range [0,100] + format: int32 + maximum: 100 + minimum: 0 + type: integer + type: object + memoryThrottle: + properties: + forceGC: + description: ForceGC means force gc page cache for pods with + low priority + type: boolean + type: object + type: object + type: object + status: + description: AvoidanceActionStatus defines the desired status of AvoidanceAction + type: object + required: + - spec + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/ensurance.crane.io_nodeqoss.yaml b/deploy/manifests_1.13/ensurance.crane.io_nodeqoss.yaml new file mode 100644 index 000000000..5477ce136 --- /dev/null +++ b/deploy/manifests_1.13/ensurance.crane.io_nodeqoss.yaml @@ -0,0 +1,339 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: nodeqoss.ensurance.crane.io +spec: + group: ensurance.crane.io + names: + kind: NodeQOS + listKind: NodeQOSList + plural: nodeqoss + shortNames: + - nq + singular: nodeqos + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NodeQOS is the Schema for the nodeqos API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: NodeQOSSpec defines the desired status of NodeQOS + properties: + elasticCpuLimit: + description: ElasticCpuLimit is the cpu limit for workloads using + elastic cpu in the node + properties: + elasticCoreCpuLimit: + description: Limit the amount of single core CPU that can be used + by workloads which use extended resource + items: + properties: + coreNum: + type: string + percent: + format: int64 + type: integer + type: object + type: array + elasticCoreCpuLimitPeriod: + description: Limit the amount of single core CPU and its corresponding + time that can be used by workloads which use extended resource + items: + properties: + coreNum: + type: string + offlineCpuLimit: + type: string + percent: + format: int64 + type: integer + type: object + type: array + elasticCpuAvoidance: + description: Workloads which use extended resource only run on + CPUs where high priority tasks are not running + properties: + enable: + type: boolean + type: object + elasticNodeCpuLimit: + description: ElasticNodeCpuLimit is the total cpu usage limit + for the workloads which use extended resource in node Suppress + the workloads which use extended resource when the CPU usage + of the node exceedes ElasticNodeCpuLimit + properties: + percent: + format: int64 + type: integer + type: object + type: object + memLimit: + description: MemoryLimit is the mem limit in the node + properties: + pageCacheLimitGlobal: + type: boolean + pageCacheLimitRetryTimes: + format: int64 + type: integer + type: object + netLimits: + description: NetLimits is the net IO limit in the node + properties: + rxBpsMax: + format: int64 + type: integer + rxBpsMin: + format: int64 + type: integer + txBpsMax: + format: int64 + type: integer + txBpsMin: + format: int64 + type: integer + required: + - rxBpsMax + - rxBpsMin + - txBpsMax + - txBpsMin + type: object + nodeQualityProbe: + description: NodeQualityProbe defines the way to probe a node + properties: + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the pod + IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows + repeated headers. + items: + description: HTTPHeader describes a custom header to be + used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on the container. + Number must be in the range 1 to 65535. Name must be an + IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults + to HTTP. + type: string + required: + - port + type: object + nodeLocalGet: + description: NodeLocalGet specifies how to request node local + properties: + localCacheTTLSeconds: + default: 60 + description: LocalCacheTTLSeconds is the cache expired time. + Defaults to 60 + format: int32 + type: integer + type: object + timeoutSeconds: + description: TimeoutSeconds is the timeout for request. Defaults + to 0, no timeout forever. + format: int32 + type: integer + type: object + rules: + description: Rules is an array of Rules and its corresponding action + items: + properties: + actionName: + description: Avoidance action to be executed when the rule triggered + type: string + avoidanceThreshold: + default: 1 + description: How many times the rule is reach, to trigger avoidance + action. Defaults to 1. Minimum value is 1. + format: int32 + type: integer + metricRule: + description: Metric rule define the metric identifier and target + properties: + name: + description: Name is the name of the given metric + type: string + selector: + description: Selector is the selector for the given metric + it is the string-encoded form of a standard kubernetes + label selector + 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 + value: + anyOf: + - type: integer + - type: string + description: Value is the target value of the metric (as + a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - name + type: object + name: + description: Name of the objective ensurance + type: string + restoreThreshold: + default: 1 + description: How many times the rule can restore. Defaults to + 1. Minimum value is 1. + format: int32 + type: integer + strategy: + default: None + description: Action only preview, not to do the real action. + Default AvoidanceActionStrategy is None. + enum: + - None + - Preview + type: string + required: + - actionName + type: object + type: array + selector: + description: Selector is a label query over pods that should match + the policy + 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: object + status: + description: NodeQOSEnsurancePolicyStatus defines the observed status + of NodeQOSEnsurancePolicy + type: object + required: + - spec + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/ensurance.crane.io_podqoss.yaml b/deploy/manifests_1.13/ensurance.crane.io_podqoss.yaml new file mode 100644 index 000000000..0e457ef84 --- /dev/null +++ b/deploy/manifests_1.13/ensurance.crane.io_podqoss.yaml @@ -0,0 +1,363 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: podqoss.ensurance.crane.io +spec: + group: ensurance.crane.io + names: + kind: PodQOS + listKind: PodQOSList + plural: podqoss + shortNames: + - pq + singular: podqos + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + allowedActions: + description: 'AllowedActions limits the set of actions that the pods + is allowed to perform by NodeQOS Example: ["Throttle", "Evict"]' + items: + type: string + type: array + labelSelector: + description: LabelSelector is a label query over pods that should + match the PodQOS + 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 + podQualityProbe: + description: QualityProbe defines the way to probe a pod + properties: + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the pod + IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows + repeated headers. + items: + description: HTTPHeader describes a custom header to be + used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on the container. + Number must be in the range 1 to 65535. Name must be an + IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults + to HTTP. + type: string + required: + - port + type: object + timeoutSeconds: + description: TimeoutSeconds is the timeout for request. Defaults + to 0, no timeout forever + format: int32 + type: integer + type: object + resourceQOS: + description: ResourceQOS describe the QOS limit for cpu,memory,netIO,diskIO + and so on. + properties: + cpuQOS: + properties: + containerPriority: + additionalProperties: + format: int32 + type: integer + type: object + containerRdt: + additionalProperties: + properties: + l3: + additionalProperties: + type: string + type: object + mb: + additionalProperties: + type: string + type: object + type: object + type: object + cpuBurst: + properties: + burstQuota: + description: BurstQuota define the burst quota for the + pods. + type: string + type: object + cpuPriority: + description: CPUPriority define the cpu priority for the pods. + CPUPriority range [0,7], 0 is the highest level. When the + cpu resource is shortage, the low level pods would be throttled + format: int32 + maximum: 7 + minimum: 0 + type: integer + cpuSet: + properties: + cpuSet: + description: 'none/exclusive/share Provide three polices + for cpuset manager: - none: containers of this pod shares + a set of cpus which not allocated to exclusive containers + - exclusive: containers of this pod monopolize the + allocated CPUs , other containers not allowed to use. + - share: containers of this pod runs in theallocated CPUs + , but other containers can also use.' + type: string + type: object + htIsolation: + properties: + enable: + type: boolean + type: object + rdt: + properties: + l3: + additionalProperties: + type: string + type: object + mb: + additionalProperties: + type: string + type: object + type: object + type: object + diskIOQOS: + properties: + diskIOLimit: + properties: + readBps: + format: int64 + type: integer + readIOps: + format: int64 + type: integer + writeBps: + format: int64 + type: integer + writeIOps: + format: int64 + type: integer + type: object + diskIOWeight: + properties: + weight: + format: int64 + type: integer + type: object + type: object + memoryQOS: + properties: + memAsyncReclaim: + properties: + asyncDistanceFactor: + format: int64 + type: integer + asyncRatio: + format: int64 + type: integer + required: + - asyncDistanceFactor + - asyncRatio + type: object + memPageCacheLimit: + properties: + pageCacheMaxRatio: + format: int64 + type: integer + pageCacheReclaimRatio: + format: int64 + type: integer + required: + - pageCacheMaxRatio + - pageCacheReclaimRatio + type: object + memWatermark: + description: MemWatermark to set memory watermark priority + properties: + watermarkRatio: + type: integer + required: + - watermarkRatio + type: object + type: object + netIOQOS: + properties: + containersPriority: + additionalProperties: + format: int64 + type: integer + type: object + devNetIOLimits: + additionalProperties: + properties: + rxBps: + format: int64 + type: integer + txBps: + format: int64 + type: integer + required: + - rxBps + - txBps + type: object + type: object + netIOLimits: + properties: + rxBps: + format: int64 + type: integer + txBps: + format: int64 + type: integer + required: + - rxBps + - txBps + type: object + netIOPriority: + format: int64 + type: integer + whitelistPorts: + properties: + lports: + type: string + rports: + type: string + required: + - lports + - rports + type: object + type: object + type: object + scopeSelector: + description: A scope selector represents the AND of the selectors + represented by the scoped-resource selector requirements. + properties: + matchExpressions: + description: A list of scope selector requirements by scope of + the resources. + items: + description: A scoped-resource selector requirement is a selector + that contains values, a scope name, and an operator that relates + the scope name and values. + properties: + operator: + description: Represents a scope's relationship to a set + of values. Valid operators are In, NotIn. + type: string + scopeName: + description: The name of the scope that the selector applies + to. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - operator + - scopeName + type: object + type: array + type: object + type: object + status: + type: object + required: + - spec + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/prediction.crane.io_clusternodepredictions.yaml b/deploy/manifests_1.13/prediction.crane.io_clusternodepredictions.yaml new file mode 100644 index 000000000..3c348ba4d --- /dev/null +++ b/deploy/manifests_1.13/prediction.crane.io_clusternodepredictions.yaml @@ -0,0 +1,337 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: clusternodepredictions.prediction.crane.io +spec: + group: prediction.crane.io + names: + kind: ClusterNodePrediction + listKind: ClusterNodePredictionList + plural: clusternodepredictions + shortNames: + - cnp + singular: clusternodeprediction + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterNodePrediction must be created in crane root namespace + as TimeSeriesPrediction is a namespaced object now + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + nodeSelector: + additionalProperties: + type: string + type: object + template: + properties: + metadata: + type: object + spec: + description: TimeSeriesPredictionSpec is a description of a TimeSeriesPrediction. + properties: + predictionMetrics: + description: PredictionMetrics is an array of PredictionMetric + items: + description: PredictionMetric describe what metric of your + time series prediction, how to query, use which algorithm + to predict. + properties: + algorithm: + description: Algorithm is the algorithm used by this + prediction metric. + properties: + algorithmType: + description: AlgorithmType is the algorithm type, + currently supports dsp and percentile. + type: string + dsp: + description: DSP is an algorithm which use FFT to + deal with time series, typically it is used to + predict some periodic time series + properties: + estimators: + description: Estimator + properties: + fft: + items: + properties: + highFrequencyThreshold: + type: string + lowAmplitudeThreshold: + type: string + marginFraction: + type: string + maxNumOfSpectrumItems: + format: int32 + type: integer + minNumOfSpectrumItems: + format: int32 + type: integer + type: object + type: array + maxValue: + items: + properties: + marginFraction: + type: string + type: object + type: array + type: object + historyLength: + description: HistoryLength describes how long + back should be queried against provider to + get historical metrics for prediction. + type: string + sampleInterval: + description: SampleInterval is the sampling + interval of metrics. + type: string + type: object + percentile: + description: Percentile is an algorithm which use + exponential time decay histogram, it can predict + a reasonable value according your history time + series + properties: + aggregated: + type: boolean + histogram: + properties: + bucketSize: + type: string + bucketSizeGrowthRatio: + type: string + epsilon: + type: string + firstBucketSize: + type: string + halfLife: + type: string + maxValue: + type: string + type: object + historyLength: + type: string + marginFraction: + type: string + minSampleWeight: + type: string + percentile: + type: string + sampleInterval: + type: string + targetUtilization: + type: string + type: object + type: object + expressionQuery: + description: ExpressionQuery is a query with a DSL-style + expression, such as prometheus promQL + properties: + expression: + description: Expression is the query expression. + For prometheus, it is promQL. + type: string + type: object + metricQuery: + description: following QueryExpressions depend on your + crane system data source configured when the system + start. if you use different sources with your system + start params, it is not valid. MetricQuery is a query + against a metric with a set of conditions + properties: + labels: + description: QueryConditions is a query condition + list. + items: + description: QueryCondition is a key, operator, + value triple. E.g. 'namespace = default', 'role + in [Admin, Developer]' + properties: + key: + description: Key is the key of the query condition + type: string + operator: + description: Operator + type: string + value: + description: Value is the query value list. + items: + type: string + type: array + type: object + type: array + metricName: + description: MetricName is the name of the metric. + type: string + type: object + resourceIdentifier: + description: ResourceIdentifier is a resource to identify + the metric, but now it is just an identifier now. + reference otlp https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md + type: string + resourceQuery: + description: ResourceQuery is a kubernetes built in + metric, only support cpu, memory + type: string + type: + description: Type is the type of metric, now support + ResourceQuery、MetricQuery、ExpressionQuery + type: string + type: object + type: array + predictionWindowSeconds: + description: PredictionWindowSeconds is a time window in seconds, + indicating how long to predict in the future. + format: int32 + type: integer + targetRef: + description: Target is the target referent of time series + prediction. each TimeSeriesPrediction associate with just + only one target ref. all metrics in PredictionMetricConfigurations + is about the TargetRef + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that + triggered the event) or if no container name is specified + "spec.containers[2]" (container with index 2 in this + pod). This syntax is chosen only to have some well-defined + way of referencing a part of an object. TODO: this design + is not final and this field is subject to change in + the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + type: object + type: object + status: + properties: + conditions: + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + currentNumberCreated: + type: integer + desiredNumberCreated: + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/prediction.crane.io_timeseriespredictions.yaml b/deploy/manifests_1.13/prediction.crane.io_timeseriespredictions.yaml new file mode 100644 index 000000000..024b06c78 --- /dev/null +++ b/deploy/manifests_1.13/prediction.crane.io_timeseriespredictions.yaml @@ -0,0 +1,393 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: timeseriespredictions.prediction.crane.io +spec: + group: prediction.crane.io + names: + kind: TimeSeriesPrediction + listKind: TimeSeriesPredictionList + plural: timeseriespredictions + shortNames: + - tsp + singular: timeseriesprediction + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The target ref name of tsp. + jsonPath: .spec.targetRef.name + name: TargetRefName + type: string + - description: The target ref kind of tsp. + jsonPath: .spec.targetRef.kind + name: TargetRefKind + type: string + - description: The predictionWindowSeconds of tsp. + jsonPath: .spec.predictionWindowSeconds + name: PredictionWindowSeconds + type: integer + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: TimeSeriesPrediction is a prediction for a time series. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TimeSeriesPredictionSpec is a description of a TimeSeriesPrediction. + properties: + predictionMetrics: + description: PredictionMetrics is an array of PredictionMetric + items: + description: PredictionMetric describe what metric of your time + series prediction, how to query, use which algorithm to predict. + properties: + algorithm: + description: Algorithm is the algorithm used by this prediction + metric. + properties: + algorithmType: + description: AlgorithmType is the algorithm type, currently + supports dsp and percentile. + type: string + dsp: + description: DSP is an algorithm which use FFT to deal with + time series, typically it is used to predict some periodic + time series + properties: + estimators: + description: Estimator + properties: + fft: + items: + properties: + highFrequencyThreshold: + type: string + lowAmplitudeThreshold: + type: string + marginFraction: + type: string + maxNumOfSpectrumItems: + format: int32 + type: integer + minNumOfSpectrumItems: + format: int32 + type: integer + type: object + type: array + maxValue: + items: + properties: + marginFraction: + type: string + type: object + type: array + type: object + historyLength: + description: HistoryLength describes how long back should + be queried against provider to get historical metrics + for prediction. + type: string + sampleInterval: + description: SampleInterval is the sampling interval + of metrics. + type: string + type: object + percentile: + description: Percentile is an algorithm which use exponential + time decay histogram, it can predict a reasonable value + according your history time series + properties: + aggregated: + type: boolean + histogram: + properties: + bucketSize: + type: string + bucketSizeGrowthRatio: + type: string + epsilon: + type: string + firstBucketSize: + type: string + halfLife: + type: string + maxValue: + type: string + type: object + historyLength: + type: string + marginFraction: + type: string + minSampleWeight: + type: string + percentile: + type: string + sampleInterval: + type: string + targetUtilization: + type: string + type: object + type: object + expressionQuery: + description: ExpressionQuery is a query with a DSL-style expression, + such as prometheus promQL + properties: + expression: + description: Expression is the query expression. For prometheus, + it is promQL. + type: string + type: object + metricQuery: + description: following QueryExpressions depend on your crane + system data source configured when the system start. if you + use different sources with your system start params, it is + not valid. MetricQuery is a query against a metric with a + set of conditions + properties: + labels: + description: QueryConditions is a query condition list. + items: + description: QueryCondition is a key, operator, value + triple. E.g. 'namespace = default', 'role in [Admin, + Developer]' + properties: + key: + description: Key is the key of the query condition + type: string + operator: + description: Operator + type: string + value: + description: Value is the query value list. + items: + type: string + type: array + type: object + type: array + metricName: + description: MetricName is the name of the metric. + type: string + type: object + resourceIdentifier: + description: ResourceIdentifier is a resource to identify the + metric, but now it is just an identifier now. reference otlp + https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md + type: string + resourceQuery: + description: ResourceQuery is a kubernetes built in metric, + only support cpu, memory + type: string + type: + description: Type is the type of metric, now support ResourceQuery、MetricQuery、ExpressionQuery + type: string + type: object + type: array + predictionWindowSeconds: + description: PredictionWindowSeconds is a time window in seconds, + indicating how long to predict in the future. + format: int32 + type: integer + targetRef: + description: Target is the target referent of time series prediction. + each TimeSeriesPrediction associate with just only one target ref. + all metrics in PredictionMetricConfigurations is about the TargetRef + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + status: + description: TimeSeriesPredictionStatus is the status of a TimeSeriesPrediction. + properties: + conditions: + description: Conditions is the condition of TimeSeriesPrediction + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + predictionMetrics: + description: PredictionMetrics is an array of PredictionMetricStatus + of all PredictionMetrics, PredictionMetricStatus include predicted + time series data + items: + description: MetricPredictedData is predicted data of an metric, + which denote a metric by ResourceIdentifier in the PredictionMetric + properties: + prediction: + description: Prediction is the predicted time series data of + the metric + items: + description: MetricTimeSeries is a stream of samples that + belong to a metric with a set of labels + properties: + labels: + description: A collection of Labels that are attached + by monitoring system as metadata for the metrics, which + are known as dimensions. + items: + description: A Label is a Name and Value pair that provides + additional information about the metric. It is metadata + for the metric. For example, Kubernetes pod metrics + always have 'namespace' label that represents which + namespace it belongs to. + properties: + name: + type: string + value: + type: string + type: object + type: array + samples: + description: A collection of Samples in chronological + order. + items: + description: Sample pairs a Value with a Timestamp. + properties: + timestamp: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + type: array + ready: + description: Specifies whether the prediction is Ready. + type: boolean + resourceIdentifier: + description: ResourceIdentifier is a resource to identify the + metric, but now it is just an identifier now. such as cpu, + memory + type: string + required: + - ready + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/manifests_1.13/topology.crane.io_noderesourcetopologies.yaml b/deploy/manifests_1.13/topology.crane.io_noderesourcetopologies.yaml new file mode 100644 index 000000000..63780c385 --- /dev/null +++ b/deploy/manifests_1.13/topology.crane.io_noderesourcetopologies.yaml @@ -0,0 +1,180 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: "" + creationTimestamp: null + name: noderesourcetopologies.topology.crane.io +spec: + group: topology.crane.io + names: + kind: NodeResourceTopology + listKind: NodeResourceTopologyList + plural: noderesourcetopologies + shortNames: + - nrt + singular: noderesourcetopology + scope: Cluster + versions: + - additionalPrinterColumns: + - description: CPUManagerPolicy represents policy of the crane agent cpu manager. + jsonPath: .craneAgentConfiguration.cpuManagerPolicy + name: CRANE CPU MANAGER POLICY + type: string + - description: TopologyManagerPolicy represents policy of the crane agent resource + management component. Defaults to SingleNUMANodePodLevel. + jsonPath: .craneAgentConfiguration.topologyManagerPolicy + name: CRANE TOPOLOGY MANAGER POLICY + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. + jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: NodeResourceTopology describes node resources and their topology. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + attributes: + additionalProperties: + type: string + description: Attributes represents node attributes if any. + type: object + craneManagerPolicy: + description: CraneManagerPolicy describes the associated manager policy + of crane agent. + properties: + cpuManagerPolicy: + description: CPUManagerPolicy represents policy of the crane agent + cpu manager. + enum: + - None + - Static + type: string + topologyManagerPolicy: + default: SingleNUMANodePodLevel + description: TopologyManagerPolicy represents policy of the crane + agent resource management component. Defaults to SingleNUMANodePodLevel. + enum: + - None + - SingleNUMANodePodLevel + type: string + required: + - cpuManagerPolicy + - topologyManagerPolicy + type: object + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + reserved: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Reserved describes resources reserved for system and kubernetes + components. + type: object + zones: + description: Zones represents all resource topology zones of a node. + items: + description: Zone represents a resource topology zone, e.g. socket, + node, die or core. + properties: + attributes: + additionalProperties: + type: string + description: Attributes represents zone attributes if any. + type: object + costs: + description: Costs represents the cost between different zones. + items: + description: CostInfo describes the cost (or distance) between + two Zones. + properties: + name: + description: Name represents the zone name. + type: string + value: + description: Value represents the cost value. + format: int64 + type: integer + required: + - name + - value + type: object + type: array + name: + description: Name represents the zone name. + type: string + parent: + description: Parent represents the name of parent zone. + type: string + resources: + description: Resources represents the resource info of the zone. + properties: + allocatable: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Allocatable quantity of the resource, corresponding + to allocatable in node status, i.e. total amount of this resource + available to be used by pods. + type: object + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Capacity of the resource, corresponding to capacity + in node status, i.e. total amount of this resource that the + node has. + type: object + reservedCPUNums: + description: ReservedCPUNums specifies the cpu numbers reserved + for the host level system threads and kubernetes related threads. + format: int32 + type: integer + type: object + type: + description: Type represents the zone type. + enum: + - Node + - Socket + - Core + type: string + required: + - name + - type + type: object + type: array + required: + - craneManagerPolicy + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: []