{ "$schema": "http://json-schema.org/schema#", "description": "ElasticsearchAutoscaler represents an ElasticsearchAutoscaler resource in a Kubernetes cluster.", "properties": { "apiVersion": { "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore 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.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { "type": "object" }, "spec": { "description": "ElasticsearchAutoscalerSpec holds the specification of an Elasticsearch autoscaler resource.", "properties": { "elasticsearchRef": { "description": "ElasticsearchRef is a reference to an Elasticsearch cluster that exists in the same namespace.", "properties": { "name": { "description": "Name is the name of the Elasticsearch resource to scale automatically.", "minLength": 1, "type": "string" } }, "type": "object" }, "policies": { "items": { "description": "AutoscalingPolicySpec holds a named autoscaling policy and the associated resources limits (cpu, memory, storage).", "properties": { "deciders": { "additionalProperties": { "additionalProperties": { "type": "string" }, "description": "DeciderSettings allow the user to tweak autoscaling deciders.\nThe map data structure complies with the format expected by Elasticsearch.", "type": "object" }, "description": "Deciders allow the user to override default settings for autoscaling deciders.", "type": "object" }, "name": { "description": "Name identifies the autoscaling policy in the autoscaling specification.", "type": "string" }, "resources": { "description": "AutoscalingResources model the limits, submitted by the user, for the supported resources in an autoscaling policy.\nOnly the node count range is mandatory. For other resources, a limit range is required only\nif the Elasticsearch autoscaling capacity API returns a requirement for a given resource.\nFor example, the memory limit range is only required if the autoscaling API response contains a memory requirement.\nIf there is no limit range for a resource, and if that resource is not mandatory, then the resources in the NodeSets\nmanaged by the autoscaling policy are left untouched.", "properties": { "cpu": { "description": "QuantityRange models a resource limit range for resources which can be expressed with resource.Quantity.", "properties": { "max": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Max represents the upper limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "min": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Min represents the lower limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "requestsToLimitsRatio": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "RequestsToLimitsRatio allows to customize Kubernetes resource Limit based on the Request.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true } }, "required": [ "max", "min" ], "type": "object" }, "memory": { "description": "QuantityRange models a resource limit range for resources which can be expressed with resource.Quantity.", "properties": { "max": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Max represents the upper limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "min": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Min represents the lower limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "requestsToLimitsRatio": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "RequestsToLimitsRatio allows to customize Kubernetes resource Limit based on the Request.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true } }, "required": [ "max", "min" ], "type": "object" }, "nodeCount": { "description": "NodeCountRange is used to model the minimum and the maximum number of nodes over all the NodeSets managed by the same autoscaling policy.", "properties": { "max": { "description": "Max represents the maximum number of nodes in a tier.", "format": "int32", "type": "integer" }, "min": { "description": "Min represents the minimum number of nodes in a tier.", "format": "int32", "type": "integer" } }, "required": [ "max", "min" ], "type": "object" }, "storage": { "description": "QuantityRange models a resource limit range for resources which can be expressed with resource.Quantity.", "properties": { "max": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Max represents the upper limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "min": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "Min represents the lower limit for the resources managed by the autoscaler.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true }, "requestsToLimitsRatio": { "anyOf": [ { "type": "integer" }, { "type": "string" } ], "description": "RequestsToLimitsRatio allows to customize Kubernetes resource Limit based on the Request.", "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$", "x-kubernetes-int-or-string": true } }, "required": [ "max", "min" ], "type": "object" } }, "required": [ "nodeCount" ], "type": "object" }, "roles": { "description": "An autoscaling policy must target a unique set of roles.", "items": { "type": "string" }, "type": "array" } }, "required": [ "resources" ], "type": "object" }, "type": "array" }, "pollingPeriod": { "description": "PollingPeriod is the period at which to synchronize with the Elasticsearch autoscaling API.", "type": "string" } }, "required": [ "elasticsearchRef", "policies" ], "type": "object" }, "status": { "properties": { "conditions": { "description": "Conditions holds the current service state of the autoscaling controller.", "items": { "description": "Condition represents Elasticsearch resource's condition.\n**This API is in technical preview and may be changed or removed in a future release.**", "properties": { "lastTransitionTime": { "format": "date-time", "type": "string" }, "message": { "type": "string" }, "status": { "type": "string" }, "type": { "description": "ConditionType defines the condition of an Elasticsearch resource.", "type": "string" } }, "required": [ "status", "type" ], "type": "object" }, "type": "array" }, "observedGeneration": { "description": "ObservedGeneration is the last observed generation by the controller.", "format": "int64", "type": "integer" }, "policies": { "description": "AutoscalingPolicyStatuses is used to expose state messages to user or external system.", "items": { "properties": { "lastModificationTime": { "description": "LastModificationTime is the last time the resources have been updated, used by the cooldown algorithm.", "format": "date-time", "type": "string" }, "name": { "description": "Name is the name of the autoscaling policy", "type": "string" }, "nodeSets": { "description": "NodeSetNodeCount holds the number of nodes for each nodeSet.", "items": { "description": "NodeSetNodeCount models the number of nodes expected in a given NodeSet.", "properties": { "name": { "description": "Name of the Nodeset.", "type": "string" }, "nodeCount": { "description": "NodeCount is the number of nodes, as computed by the autoscaler, expected in this NodeSet.", "format": "int32", "type": "integer" } }, "required": [ "name", "nodeCount" ], "type": "object" }, "type": "array" }, "resources": { "description": "ResourcesSpecification holds the resource values common to all the nodeSets managed by a same autoscaling policy.\nOnly the resources managed by the autoscaling controller are saved in the Status.", "properties": { "limits": { "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": "ResourceList is a set of (resource name, quantity) pairs.", "type": "object" }, "requests": { "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": "ResourceList is a set of (resource name, quantity) pairs.", "type": "object" } }, "type": "object" }, "state": { "description": "PolicyStates may contain various messages regarding the current state of this autoscaling policy.", "items": { "properties": { "messages": { "items": { "type": "string" }, "type": "array" }, "type": { "type": "string" } }, "required": [ "messages", "type" ], "type": "object" }, "type": "array" } }, "required": [ "name" ], "type": "object" }, "type": "array" } }, "type": "object" } }, "type": "object" }