
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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:
                        config:
                          additionalProperties:
                            type: string
                          description: Override Recommendation configs
                          type: object
                        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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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:
                    config:
                      additionalProperties:
                        type: string
                      description: Override Recommendation configs
                      type: object
                    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:
                        config:
                          additionalProperties:
                            type: string
                          description: Override Recommendation configs
                          type: object
                        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
              runNumber:
                description: RunNumber is the numbers of runs
                format: int32
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  creationTimestamp: null
  name: cloudcarbonfootprints.co2e.crane.io
spec:
  group: co2e.crane.io
  names:
    kind: CloudCarbonFootprint
    listKind: CloudCarbonFootprintList
    plural: cloudcarbonfootprints
    shortNames:
    - ccf
    singular: cloudcarbonfootprint
  scope: Cluster
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: CloudCarbonFootprint defines carbon footprint configuration of
          a datacenter
        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:
              computeConfig:
                description: compute power infos when there are multiple node types
                  in the cluster, define multiple compute configs
                items:
                  properties:
                    cpuEnergyConsumptionRatio:
                      description: sometimes it's hard to measure memory, storage,
                        and networking energy consumption CPUEnergyConsumptionRatio
                        can be defined to specify the percentage of cpu energy consumption
                        vs all IT equipments consumption
                      type: string
                    maxWattsPerCPU:
                      description: power when cpu utilization is 100%
                      type: string
                    memoryWattsPerGB:
                      description: power of per BG memory
                      type: string
                    minWattsPerCPU:
                      description: power when cpu is idle
                      type: string
                    nodeSelector:
                      description: when there are various types of compute server,
                        node selector selects the targets
                      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
                type: array
              emissionFactor:
                description: emission factor of the data center, unit is tCO2/MWh,
                  the average emission factor of China is 0.5810
                type: string
              locality:
                description: locality holds more information of location, e.g. ap/china/shanghai/az01/floor3
                type: string
              networkingConfig:
                description: networking power info
                items:
                  properties:
                    storageClass:
                      description: networking class, e.g. golden, server, bronze,
                        which define different redundancies of networking links, and
                        has different energy consumption
                      type: string
                    wattsPerGB:
                      description: power per GB for the class
                      type: string
                  type: object
                type: array
              provider:
                description: Provider is the provider of the ccf, when provider is
                  manual, all the properties of ccf would be configured manually when
                  a cloud provider exposes query API, a cloud provider controller
                  can query cloud api and fill the properties automatically
                type: string
              pue:
                description: power usage effectiveness = IT equipment energy usage
                  / total facility energy usage
                type: string
              region:
                description: region of the datacenter, e.g. shanghai
                type: string
              storageConfig:
                description: storage power info
                items:
                  properties:
                    storageClass:
                      description: storage class, e.g. cephfs
                      type: string
                    wattsPerTB:
                      description: power per TB for the class
                      type: string
                  type: object
                type: array
              zone:
                description: availability zone of the datacenter, e.g. shanghai-az01
                type: string
            type: object
          status:
            properties:
              condition:
                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
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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
              memoryCompression:
                properties:
                  enable:
                    type: boolean
                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: NodeQOSStatus defines the observed status of NodeQOS
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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
                        type: object
                      memPageCacheLimit:
                        properties:
                          pageCacheMaxRatio:
                            format: int64
                            type: integer
                          pageCacheReclaimRatio:
                            format: int64
                            type: integer
                        type: object
                      memPriority:
                        description: MemoryPriority define the memory priority for
                          the pods. MemoryPriority range [0,7], 0 is the highest level.
                          When the memory resource is shortage, the low level pods
                          would be OOM Killed earlier
                        format: int32
                        maximum: 7
                        minimum: 0
                        type: integer
                      memWatermark:
                        description: MemWatermark to set memory watermark priority
                        properties:
                          watermarkRatio:
                            type: integer
                        type: object
                      memoryCompression:
                        properties:
                          compressionLevel:
                            maximum: 4
                            minimum: 0
                            type: integer
                          enable:
                            type: boolean
                          oversold:
                            default: Allow
                            enum:
                            - Transparent
                            - None
                            - Allow
                            type: string
                          preference:
                            default: Tiny
                            description: CompressionPreference provides a quick way
                              to set the frequency, ratio and size of compression.
                            enum:
                            - Tiny
                            - Normal
                            - FileOnly
                            - AnonOnly
                            type: string
                        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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: []

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.7.0
  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: .craneManagerPolicy.cpuManagerPolicy
      name: CRANE CPU MANAGER POLICY
      type: string
    - description: TopologyManagerPolicy represents policy of the crane agent resource
        management component. Defaults to SingleNUMANodePodLevel.
      jsonPath: .craneManagerPolicy.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: []
