diff --git a/CHANGELOG.md b/CHANGELOG.md index dc68ac940..f1e06163c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - (Feature) ServerGroup Pointer - (Feature) Envoy AuthV3 Integration - (Maintenance) Switch to ubuntu:24.04 base image +- (Feature) Gateway Group for ArangoDeployment ## [1.2.42](https://github.com/arangodb/kube-arangodb/tree/1.2.42) (2024-07-23) - (Maintenance) Go 1.22.4 & Kubernetes 1.29.6 libraries diff --git a/Makefile b/Makefile index 62c999662..d33c24fc9 100644 --- a/Makefile +++ b/Makefile @@ -475,7 +475,7 @@ $(BIN): $(VBIN_LINUX_AMD64) $(VBIN_OPS_LINUX_AMD64) $(VBIN_INT_LINUX_AMD64) @cp "$(VBIN_OPS_LINUX_AMD64)" "$(BIN_OPS)" .PHONY: docker -docker: check-vars $(VBIN_LINUX_AMD64) $(VBIN_LINUX_ARM64) +docker: clean check-vars $(VBIN_LINUX_AMD64) $(VBIN_LINUX_ARM64) ifdef PUSHIMAGES docker buildx build --no-cache -f $(DOCKERFILE) --build-arg GOVERSION=$(GOVERSION) --build-arg DISTRIBUTION=$(DISTRIBUTION) \ --build-arg "VERSION=${VERSION_MAJOR_MINOR_PATCH}" --build-arg "RELEASE_MODE=$(RELEASE_MODE)" \ diff --git a/README.md b/README.md index ddcded77c..f863b2e4e 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ covers individual newer features separately. | Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | |:------------------------------------------------------------------------------|:-----------------|:-----------|:-----------------|:----------------------|:-------------|:--------|:-------------------------------------------------------|:------------------------------------------------------------------------------------------| +| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | | Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | | Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | | Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | diff --git a/docs/api/ArangoDeployment.V1.md b/docs/api/ArangoDeployment.V1.md index cb4436d8e..8bbbf460d 100644 --- a/docs/api/ArangoDeployment.V1.md +++ b/docs/api/ArangoDeployment.V1.md @@ -973,7 +973,7 @@ Possible Values: ### .spec.architecture -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L254) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L257) Architecture defines the list of supported architectures. First element on the list is marked as default architecture. @@ -1050,7 +1050,7 @@ KillPodProbability is the chance of a pod being killed during an event ### .spec.ClusterDomain -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L226) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L229) ClusterDomain define domain used in the kubernetes cluster. Required only of domain is not set to default (cluster.local) @@ -1061,7 +1061,7 @@ Default Value: `cluster.local` ### .spec.communicationMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L234) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L237) CommunicationMethod define communication method used in deployment @@ -3043,6 +3043,932 @@ Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1. *** +### .spec.gateways.affinity + +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L185) + +Affinity specified additional affinity settings in ArangoDB Pod definitions + +Links: +* [Documentation of core.PodAffinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#podaffinity-v1-core) + +*** + +### .spec.gateways.allowMemberRecreation + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L227) + +AllowMemberRecreation allows to recreate member. +This setting changes the member recreation logic based on group: +- For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) +- For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + +*** + +### .spec.gateways.annotations + +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L128) + +Annotations specified the annotations added to Pods in this group. +Annotations are merged with `spec.annotations`. + +*** + +### .spec.gateways.annotationsIgnoreList + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L130) + +AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + +*** + +### .spec.gateways.annotationsMode + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L132) + +AnnotationsMode Define annotations mode which should be use while overriding annotations + +*** + +### .spec.gateways.antiAffinity + +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L181) + +AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + +Links: +* [Documentation of core.Pod.AntiAffinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#podantiaffinity-v1-core) + +*** + +### .spec.gateways.args + +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L86) + +Args setting specifies additional command-line arguments passed to all servers of this group. + +Default Value: `[]` + +*** + +### .spec.gateways.count + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L78) + +Count setting specifies the number of servers to start for the given group. +For the Agent group, this value must be a positive, odd number. +The default value is `3` for all groups except `single` (there the default is `1` +for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). +For the `syncworkers` group, it is highly recommended to use the same number +as for the `dbservers` group. + +*** + +### .spec.gateways.entrypoint + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L88) + +Entrypoint overrides container executable + +*** + +### .spec.gateways.envs\[int\].name + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_env_var.go#L26) + +*** + +### .spec.gateways.envs\[int\].value + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_env_var.go#L27) + +*** + +### .spec.gateways.ephemeralVolumes.apps.size + +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) + +Size define size of the ephemeral volume + +Links: +* [Documentation of resource.Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#quantity-resource-core) + +*** + +### .spec.gateways.ephemeralVolumes.temp.size + +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) + +Size define size of the ephemeral volume + +Links: +* [Documentation of resource.Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#quantity-resource-core) + +*** + +### .spec.gateways.exporterPort + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L240) + +ExporterPort define Port used by exporter + +*** + +### .spec.gateways.extendedRotationCheck + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L210) + +ExtendedRotationCheck extend checks for rotation + +*** + +### .spec.gateways.externalPortEnabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L222) + +ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + +*** + +### .spec.gateways.indexMethod + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L233) + +IndexMethod define group Indexing method + +Possible Values: +* `"random"` (default) - Pick random ID for member. Enforced on the Community Operator. +* `"ordered"` - Use sequential number as Member ID, starting from 0. Enterprise Operator required. + +*** + +### .spec.gateways.initContainers.containers + +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_init_containers.go#L91) + +Containers contains list of containers + +Links: +* [Documentation of core.Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#container-v1-core) + +*** + +### .spec.gateways.initContainers.mode + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_init_containers.go#L94) + +Mode keep container replace mode + +*** + +### .spec.gateways.internalPort + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L218) + +InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + +*** + +### .spec.gateways.internalPortProtocol + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L220) + +InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + +*** + +### .spec.gateways.labels + +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L134) + +Labels specified the labels added to Pods in this group. + +*** + +### .spec.gateways.labelsIgnoreList + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L136) + +LabelsIgnoreList list regexp or plain definitions which labels should be ignored + +*** + +### .spec.gateways.labelsMode + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L138) + +LabelsMode Define labels mode which should be use while overriding labels + +*** + +### .spec.gateways.maxCount + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L82) + +MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + +*** + +### .spec.gateways.memoryReservation + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L110) + +MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. +If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. +Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + +Links: +* [Documentation of the ArangoDB Envs](https://docs.arangodb.com/devel/components/arangodb-server/environment-variables/) + +Default Value: `0` + +*** + +### .spec.gateways.minCount + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L80) + +MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + +*** + +### .spec.gateways.nodeAffinity + +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L189) + +NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + +Links: +* [Documentation of code.NodeAffinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#nodeaffinity-v1-core) + +*** + +### .spec.gateways.nodeSelector + +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L153) + +NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + +Links: +* [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/) + +*** + +### .spec.gateways.numactl.args + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) + +Args define list of the numactl process + +Default Value: `[]` + +*** + +### .spec.gateways.numactl.enabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) + +Enabled define if numactl should be enabled + +Default Value: `false` + +*** + +### .spec.gateways.numactl.path + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) + +Path define numactl path within the container + +Default Value: `/usr/bin/numactl` + +*** + +### .spec.gateways.overrideDetectedNumberOfCores + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L116) + +> [!IMPORTANT] +> **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** + +OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. +If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. + +Links: +* [Documentation of the ArangoDB Envs](https://docs.arangodb.com/devel/components/arangodb-server/environment-variables/) + +Default Value: `true` + +*** + +### .spec.gateways.overrideDetectedTotalMemory + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L104) + +> [!IMPORTANT] +> **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** + +OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. +If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + +Links: +* [Documentation of the ArangoDB Envs](https://docs.arangodb.com/devel/components/arangodb-server/environment-variables/) + +Default Value: `true` + +*** + +### .spec.gateways.podModes.network + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) + +*** + +### .spec.gateways.podModes.pid + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) + +*** + +### .spec.gateways.port + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L238) + +Port define Port used by member + +*** + +### .spec.gateways.priorityClassName + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L159) + +PriorityClassName specifies a priority class name +Will be forwarded to the pod spec. + +Links: +* [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) + +*** + +### .spec.gateways.probes.livenessProbeDisabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L250) + +LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + +Default Value: `false` + +*** + +### .spec.gateways.probes.livenessProbeSpec.failureThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L300) + +FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. +Giving up means restarting the container. +Minimum value is 1. + +Default Value: `3` + +*** + +### .spec.gateways.probes.livenessProbeSpec.initialDelaySeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L283) + +InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. +Minimum value is 0. + +Default Value: `2` + +*** + +### .spec.gateways.probes.livenessProbeSpec.periodSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L287) + +PeriodSeconds How often (in seconds) to perform the probe. +Minimum value is 1. + +Default Value: `10` + +*** + +### .spec.gateways.probes.livenessProbeSpec.successThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L295) + +SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. +Minimum value is 1. + +Default Value: `1` + +*** + +### .spec.gateways.probes.livenessProbeSpec.timeoutSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L291) + +TimeoutSeconds specifies number of seconds after which the probe times out +Minimum value is 1. + +Default Value: `2` + +*** + +### .spec.gateways.probes.ReadinessProbeDisabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L257) + +> [!WARNING] +> ***DEPRECATED*** +> +> **This field is deprecated, kept only for backward compatibility.** + +OldReadinessProbeDisabled if true readinessProbes are disabled + +*** + +### .spec.gateways.probes.readinessProbeDisabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L259) + +ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + +*** + +### .spec.gateways.probes.readinessProbeSpec.failureThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L300) + +FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. +Giving up means restarting the container. +Minimum value is 1. + +Default Value: `3` + +*** + +### .spec.gateways.probes.readinessProbeSpec.initialDelaySeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L283) + +InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. +Minimum value is 0. + +Default Value: `2` + +*** + +### .spec.gateways.probes.readinessProbeSpec.periodSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L287) + +PeriodSeconds How often (in seconds) to perform the probe. +Minimum value is 1. + +Default Value: `10` + +*** + +### .spec.gateways.probes.readinessProbeSpec.successThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L295) + +SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. +Minimum value is 1. + +Default Value: `1` + +*** + +### .spec.gateways.probes.readinessProbeSpec.timeoutSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L291) + +TimeoutSeconds specifies number of seconds after which the probe times out +Minimum value is 1. + +Default Value: `2` + +*** + +### .spec.gateways.probes.startupProbeDisabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L264) + +StartupProbeDisabled if true startupProbes are disabled + +*** + +### .spec.gateways.probes.startupProbeSpec.failureThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L300) + +FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. +Giving up means restarting the container. +Minimum value is 1. + +Default Value: `3` + +*** + +### .spec.gateways.probes.startupProbeSpec.initialDelaySeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L283) + +InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. +Minimum value is 0. + +Default Value: `2` + +*** + +### .spec.gateways.probes.startupProbeSpec.periodSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L287) + +PeriodSeconds How often (in seconds) to perform the probe. +Minimum value is 1. + +Default Value: `10` + +*** + +### .spec.gateways.probes.startupProbeSpec.successThreshold + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L295) + +SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. +Minimum value is 1. + +Default Value: `1` + +*** + +### .spec.gateways.probes.startupProbeSpec.timeoutSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L291) + +TimeoutSeconds specifies number of seconds after which the probe times out +Minimum value is 1. + +Default Value: `2` + +*** + +### .spec.gateways.pvcResizeMode + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L173) + +VolumeResizeMode specified resize mode for PVCs and PVs + +Possible Values: +* `"runtime"` (default) - PVC will be resized in Pod runtime (EKS, GKE) +* `"rotate"` - Pod will be shutdown and PVC will be resized (AKS) + +*** + +### .spec.gateways.resources + +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L98) + +Resources holds resource requests & limits + +Links: +* [Documentation of core.ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#resourcerequirements-v1-core) + +*** + +### .spec.gateways.schedulerName + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L90) + +SchedulerName define scheduler name used for group + +*** + +### .spec.gateways.securityContext.addCapabilities + +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) + +AddCapabilities add new capabilities to containers + +*** + +### .spec.gateways.securityContext.allowPrivilegeEscalation + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) + +AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + +*** + +### .spec.gateways.securityContext.dropAllCapabilities + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) + +> [!WARNING] +> ***DEPRECATED*** +> +> **This field is added for backward compatibility. Will be removed in 1.1.0.** + +DropAllCapabilities specifies if capabilities should be dropped for this pod containers + +*** + +### .spec.gateways.securityContext.fsGroup + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) + +FSGroup is a special supplemental group that applies to all containers in a pod. + +*** + +### .spec.gateways.securityContext.privileged + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) + +Privileged If true, runs container in privileged mode. Processes in privileged containers are +essentially equivalent to root on the host. + +*** + +### .spec.gateways.securityContext.readOnlyRootFilesystem + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) + +ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + +*** + +### .spec.gateways.securityContext.runAsGroup + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) + +RunAsGroup is the GID to run the entrypoint of the container process. + +*** + +### .spec.gateways.securityContext.runAsNonRoot + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) + +RunAsNonRoot if true, indicates that the container must run as a non-root user. + +*** + +### .spec.gateways.securityContext.runAsUser + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) + +RunAsUser is the UID to run the entrypoint of the container process. + +*** + +### .spec.gateways.securityContext.seccompProfile + +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) + +SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + +Links: +* [Documentation of core.SeccompProfile](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#seccompprofile-v1-core) + +*** + +### .spec.gateways.securityContext.seLinuxOptions + +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) + +SELinuxOptions are the labels to be applied to the container + +Links: +* [Documentation of core.SELinuxOptions](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#selinuxoptions-v1-core) + +*** + +### .spec.gateways.securityContext.supplementalGroups + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) + +SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, +the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + +*** + +### .spec.gateways.securityContext.sysctls + +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) + +Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported +sysctls (by the container runtime) might fail to launch. +Map Value can be String or Int + +Links: +* [Documentation](https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/) + +Example: +```yaml +sysctls: + "kernel.shm_rmid_forced": "0" + "net.core.somaxconn": 1024 + "kernel.msgmax": "65536" +``` + +*** + +### .spec.gateways.serviceAccountName + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L149) + +ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created +for each server of this group. If empty, it defaults to using the +`default` service account. +Using an alternative `ServiceAccount` is typically used to separate access rights. +The ArangoDB deployments need some very minimal access rights. With the +deployment of the operator, we grant the rights to 'get' all 'pod' resources. +If you are using a different service account, please grant these rights +to that service account. + +*** + +### .spec.gateways.shutdownDelay + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L216) + +ShutdownDelay define how long operator should delay finalizer removal after shutdown + +*** + +### .spec.gateways.shutdownMethod + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L214) + +ShutdownMethod describe procedure of member shutdown taken by Operator + +*** + +### .spec.gateways.sidecarCoreNames + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L192) + +SidecarCoreNames is a list of sidecar containers which must run in the pod. +Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + +*** + +### .spec.gateways.sidecars + +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L196) + +Sidecars specifies a list of additional containers to be started + +Links: +* [Documentation of core.Container](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#container-v1-core) + +*** + +### .spec.gateways.storageClassName + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L94) + +> [!WARNING] +> ***DEPRECATED*** +> +> **Use VolumeClaimTemplate instead.** + +StorageClassName specifies the classname for storage of the servers. + +*** + +### .spec.gateways.terminationGracePeriodSeconds + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L229) + +TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + +*** + +### .spec.gateways.tolerations + +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L125) + +Tolerations specifies the tolerations added to Pods in this group. +By default, suitable tolerations are set for the following keys with the `NoExecute` effect: +- `node.kubernetes.io/not-ready` +- `node.kubernetes.io/unreachable` +- `node.alpha.kubernetes.io/unreachable` (will be removed in future version) +For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + +Links: +* [Documentation of core.Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#toleration-v1-core) + +*** + +### .spec.gateways.volumeAllowShrink + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L177) + +> [!WARNING] +> ***DEPRECATED*** +> +> **Not used anymore** + +VolumeAllowShrink allows shrinking of the volume + +*** + +### .spec.gateways.volumeClaimTemplate + +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L168) + +VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. +This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. +The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. +If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim +with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` +and `iops` is not forwarded to the pods resource requirements. + +Links: +* [Documentation of core.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#persistentvolumeclaim-v1-core) + +*** + +### .spec.gateways.volumeMounts + +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_spec.go#L206) + +VolumeMounts define list of volume mounts mounted into server container + +Links: +* [Documentation of ServerGroupSpecVolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#volumemount-v1-core) + +*** + +### .spec.gateways.volumes\[int\].configMap + +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L138) + +ConfigMap which should be mounted into pod + +Links: +* [Documentation of core.ConfigMapVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#configmapvolumesource-v1-core) + +*** + +### .spec.gateways.volumes\[int\].emptyDir + +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L143) + +EmptyDir + +Links: +* [Documentation of core.EmptyDirVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#emptydirvolumesource-v1-core) + +*** + +### .spec.gateways.volumes\[int\].hostPath + +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L148) + +HostPath + +Links: +* [Documentation of core.HostPathVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#hostpathvolumesource-v1-core) + +*** + +### .spec.gateways.volumes\[int\].name + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L128) + +Name of volume + +*** + +### .spec.gateways.volumes\[int\].persistentVolumeClaim + +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L153) + +PersistentVolumeClaim + +Links: +* [Documentation of core.PersistentVolumeClaimVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#persistentvolumeclaimvolumesource-v1-core) + +*** + +### .spec.gateways.volumes\[int\].secret + +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_group_volume.go#L133) + +Secret which should be mounted into pod + +Links: +* [Documentation of core.SecretVolumeSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#secretvolumesource-v1-core) + +*** + ### .spec.id.affinity Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/server_id_group_spec.go#L48) @@ -3369,7 +4295,7 @@ Links: ### .spec.memberPropagationMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L209) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L212) MemberPropagationMode defines how changes to pod spec should be propogated. Changes to a pod’s configuration require a restart of that pod in almost all cases. @@ -6605,7 +7531,7 @@ MaintenanceGracePeriod action timeout ### .spec.timezone -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L258) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/deployment/v1/deployment_spec.go#L261) Timezone if specified, will set a timezone for deployment. Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` diff --git a/docs/features/README.md b/docs/features/README.md index 5efce638b..c59b17ffb 100644 --- a/docs/features/README.md +++ b/docs/features/README.md @@ -8,6 +8,7 @@ title: List of all features | Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | |:----------------------------------------------------------------|:-----------------|:-----------|:-----------------|:----------------------|:-------------|:--------|:-------------------------------------------------------|:------------------------------------------------------------------------------------------| +| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | | Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | | Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | | Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | diff --git a/internal/features.yaml b/internal/features.yaml index 3fce1a5f9..fddd3f509 100644 --- a/internal/features.yaml +++ b/internal/features.yaml @@ -257,3 +257,8 @@ features: releases: - operatorVersion: 1.2.36 state: Alpha + - name: Gateway + remarks: Support for ArangoDeployment Gateway Group + releases: + - operatorVersion: 1.2.43 + state: Alpha diff --git a/pkg/apis/deployment/v1/deployment.go b/pkg/apis/deployment/v1/deployment.go index 4f5d186b8..ec8bb763d 100644 --- a/pkg/apis/deployment/v1/deployment.go +++ b/pkg/apis/deployment/v1/deployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -73,7 +73,7 @@ func (d *ArangoDeployment) AsOwner() meta.OwnerReference { // ForeachServerGroup calls the given callback for all server groups. // If the callback returns an error, this error is returned and no other server // groups are processed. -// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers +// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers, gateways func (d *ArangoDeployment) ForeachServerGroup(cb ServerGroupFunc, status *DeploymentStatus) error { if status == nil { status = &d.Status @@ -84,7 +84,7 @@ func (d *ArangoDeployment) ForeachServerGroup(cb ServerGroupFunc, status *Deploy // ForeachServerGroupAccepted calls the given callback for all accepted server groups. // If the callback returns an error, this error is returned and no other server // groups are processed. -// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers +// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers, gateways func (d *ArangoDeployment) ForeachServerGroupAccepted(cb ServerGroupFunc, status *DeploymentStatus) error { if status == nil { status = &d.Status @@ -115,6 +115,9 @@ func (d *ArangoDeployment) foreachServerGroup(cb ServerGroupFunc, spec Deploymen if err := cb(ServerGroupSyncWorkers, spec.SyncWorkers, &status.Members.SyncWorkers); err != nil { return errors.WithStack(err) } + if err := cb(ServerGroupGateways, spec.Gateways.Get(), &status.Members.Gateways); err != nil { + return errors.WithStack(err) + } return nil } diff --git a/pkg/apis/deployment/v1/deployment_spec.go b/pkg/apis/deployment/v1/deployment_spec.go index 12a8690d6..d25070f04 100644 --- a/pkg/apis/deployment/v1/deployment_spec.go +++ b/pkg/apis/deployment/v1/deployment_spec.go @@ -199,6 +199,9 @@ type DeploymentSpec struct { // SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. SyncWorkers ServerGroupSpec `json:"syncworkers"` + // Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. + Gateways *ServerGroupSpec `json:"gateways,omitempty"` + // MemberPropagationMode defines how changes to pod spec should be propogated. // Changes to a pod’s configuration require a restart of that pod in almost all cases. // Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. @@ -256,6 +259,9 @@ type DeploymentSpec struct { // Timezone if specified, will set a timezone for deployment. // Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` Timezone *string `json:"timezone,omitempty"` + + // Gateway defined main Gateway configuration. + Gateway *DeploymentSpecGateway `json:"gateway,omitempty"` } // GetAllowMemberRecreation returns member recreation policy based on group and settings @@ -267,6 +273,8 @@ func (s *DeploymentSpec) GetAllowMemberRecreation(group ServerGroup) bool { groupSpec := s.GetServerGroupSpec(group) switch group { + case ServerGroupGateways: + return true case ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: if v := groupSpec.AllowMemberRecreation; v == nil { return true @@ -326,6 +334,11 @@ func (s DeploymentSpec) GetSyncImage() string { return s.GetImage() } +// IsGatewayEnabled returns true when the deployment has gateways enabled. +func (s DeploymentSpec) IsGatewayEnabled() bool { + return s.Gateway.IsEnabled() +} + // GetImagePullPolicy returns the value of imagePullPolicy. func (s DeploymentSpec) GetImagePullPolicy() core.PullPolicy { return util.TypeOrDefault[core.PullPolicy](s.ImagePullPolicy) @@ -364,8 +377,7 @@ func (s DeploymentSpec) IsSecure() bool { return s.TLS.IsSecure() } -// GetServerGroupSpec returns the server group spec (from this -// deployment spec) for the given group. +// GetServerGroupSpec returns the server group spec (from this deployment spec) for the given group. func (s DeploymentSpec) GetServerGroupSpec(group ServerGroup) ServerGroupSpec { switch group { case ServerGroupSingle: @@ -380,13 +392,14 @@ func (s DeploymentSpec) GetServerGroupSpec(group ServerGroup) ServerGroupSpec { return s.SyncMasters.WithGroup(group) case ServerGroupSyncWorkers: return s.SyncWorkers.WithGroup(group) + case ServerGroupGateways: + return s.Gateways.WithGroup(group) default: return ServerGroupSpec{} } } -// UpdateServerGroupSpec returns the server group spec (from this -// deployment spec) for the given group. +// UpdateServerGroupSpec returns the server group spec (from this deployment spec) for the given group. func (s *DeploymentSpec) UpdateServerGroupSpec(group ServerGroup, gspec ServerGroupSpec) { switch group { case ServerGroupSingle: @@ -401,6 +414,8 @@ func (s *DeploymentSpec) UpdateServerGroupSpec(group ServerGroup, gspec ServerGr s.SyncMasters = gspec case ServerGroupSyncWorkers: s.SyncWorkers = gspec + case ServerGroupGateways: + s.Gateways = gspec.DeepCopy() } } @@ -421,6 +436,11 @@ func (s *DeploymentSpec) SetDefaults(deploymentName string) { if s.GetImagePullPolicy() == "" { s.ImagePullPolicy = util.NewType[core.PullPolicy](core.PullIfNotPresent) } + if s.Gateway.IsEnabled() { + if s.Gateways == nil { + s.Gateways = &ServerGroupSpec{} + } + } s.ExternalAccess.SetDefaults() s.RocksDB.SetDefaults() s.Authentication.SetDefaults(deploymentName + "-jwt") @@ -432,6 +452,7 @@ func (s *DeploymentSpec) SetDefaults(deploymentName string) { s.Coordinators.SetDefaults(ServerGroupCoordinators, s.GetMode().HasCoordinators(), s.GetMode()) s.SyncMasters.SetDefaults(ServerGroupSyncMasters, s.Sync.IsEnabled(), s.GetMode()) s.SyncWorkers.SetDefaults(ServerGroupSyncWorkers, s.Sync.IsEnabled(), s.GetMode()) + s.Gateways.SetDefaults(ServerGroupGateways, s.IsGatewayEnabled(), s.GetMode()) s.Metrics.SetDefaults(deploymentName+"-exporter-jwt-token", s.Authentication.IsAuthenticated()) s.Chaos.SetDefaults() s.Bootstrap.SetDefaults(deploymentName) @@ -480,6 +501,7 @@ func (s *DeploymentSpec) SetDefaultsFrom(source DeploymentSpec) { s.Coordinators.SetDefaultsFrom(source.Coordinators) s.SyncMasters.SetDefaultsFrom(source.SyncMasters) s.SyncWorkers.SetDefaultsFrom(source.SyncWorkers) + s.Gateways.SetDefaultsFrom(source.Gateways.Get()) s.Metrics.SetDefaultsFrom(source.Metrics) s.Lifecycle.SetDefaultsFrom(source.Lifecycle) s.Chaos.SetDefaultsFrom(source.Chaos) @@ -539,6 +561,11 @@ func (s *DeploymentSpec) Validate() error { if err := s.SyncWorkers.Validate(ServerGroupSyncWorkers, s.Sync.IsEnabled(), s.GetMode(), s.GetEnvironment()); err != nil { return errors.WithStack(err) } + if s.IsGatewayEnabled() { + if err := s.Gateways.Validate(ServerGroupGateways, s.IsGatewayEnabled(), s.GetMode(), s.GetEnvironment()); err != nil { + return errors.WithStack(err) + } + } if err := s.Metrics.Validate(); err != nil { return errors.WithStack(errors.Wrap(err, "spec.metrics")) } @@ -554,6 +581,9 @@ func (s *DeploymentSpec) Validate() error { if err := s.Architecture.Validate(); err != nil { return errors.WithStack(errors.Wrap(err, "spec.architecture")) } + if err := s.Gateway.Validate(); err != nil { + return errors.WithStack(errors.Wrap(err, "spec.architecture")) + } return nil } @@ -614,6 +644,14 @@ func (s DeploymentSpec) ResetImmutableFields(target *DeploymentSpec) []string { if l := s.SyncWorkers.ResetImmutableFields(ServerGroupSyncWorkers, "syncworkers", &target.SyncWorkers); l != nil { resetFields = append(resetFields, l...) } + if s.Gateways != nil { + if target.Gateways == nil { + target.Gateways = &ServerGroupSpec{} + } + if l := s.Gateways.ResetImmutableFields(ServerGroupGateways, "gateways", target.Gateways); l != nil { + resetFields = append(resetFields, l...) + } + } if l := s.Metrics.ResetImmutableFields("metrics", &target.Metrics); l != nil { resetFields = append(resetFields, l...) } diff --git a/pkg/apis/deployment/v1/deployment_spec_gateway.go b/pkg/apis/deployment/v1/deployment_spec_gateway.go new file mode 100644 index 000000000..ecb4f9389 --- /dev/null +++ b/pkg/apis/deployment/v1/deployment_spec_gateway.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package v1 + +type DeploymentSpecGateway struct { + Enabled *bool `json:"enabled,omitempty"` +} + +func (d *DeploymentSpecGateway) IsEnabled() bool { + if d == nil || d.Enabled == nil { + return false + } + + return *d.Enabled +} + +func (d *DeploymentSpecGateway) Validate() error { + return nil +} diff --git a/pkg/apis/deployment/v1/deployment_status.go b/pkg/apis/deployment/v1/deployment_status.go index d6f0fcd9a..6f422ff8c 100644 --- a/pkg/apis/deployment/v1/deployment_status.go +++ b/pkg/apis/deployment/v1/deployment_status.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -103,6 +103,7 @@ type DeploymentStatus struct { Coordinators *ServerGroupStatus `json:"coordinators,omitempty"` SyncMasters *ServerGroupStatus `json:"syncmasters,omitempty"` SyncWorkers *ServerGroupStatus `json:"syncworkers,omitempty"` + Gateways *ServerGroupStatus `json:"gateways,omitempty"` } // Equal checks for equality @@ -174,6 +175,8 @@ func (ds DeploymentStatus) getServerGroupStatus(group ServerGroup) *ServerGroupS return ds.SyncMasters.DeepCopy() case ServerGroupSyncWorkers: return ds.SyncWorkers.DeepCopy() + case ServerGroupGateways: + return ds.Gateways.DeepCopy() default: return nil } @@ -195,5 +198,7 @@ func (ds *DeploymentStatus) UpdateServerGroupStatus(group ServerGroup, gspec Ser ds.SyncMasters = &gspec case ServerGroupSyncWorkers: ds.SyncWorkers = &gspec + case ServerGroupGateways: + ds.Gateways = &gspec } } diff --git a/pkg/apis/deployment/v1/deployment_status_members.go b/pkg/apis/deployment/v1/deployment_status_members.go index 8215de38e..25fce7f47 100644 --- a/pkg/apis/deployment/v1/deployment_status_members.go +++ b/pkg/apis/deployment/v1/deployment_status_members.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ type DeploymentStatusMembers struct { Coordinators MemberStatusList `json:"coordinators,omitempty"` SyncMasters MemberStatusList `json:"syncmasters,omitempty"` SyncWorkers MemberStatusList `json:"syncworkers,omitempty"` + Gateways MemberStatusList `json:"gateways,omitempty"` } // Equal checks for equality @@ -44,7 +45,8 @@ func (ds DeploymentStatusMembers) Equal(other DeploymentStatusMembers) bool { ds.DBServers.Equal(other.DBServers) && ds.Coordinators.Equal(other.Coordinators) && ds.SyncMasters.Equal(other.SyncMasters) && - ds.SyncWorkers.Equal(other.SyncWorkers) + ds.SyncWorkers.Equal(other.SyncWorkers) && + ds.Gateways.Equal(other.Gateways) } // ContainsID returns true if the given set of members contains a member with given ID. @@ -54,7 +56,8 @@ func (ds DeploymentStatusMembers) ContainsID(id string) bool { ds.DBServers.ContainsID(id) || ds.Coordinators.ContainsID(id) || ds.SyncMasters.ContainsID(id) || - ds.SyncWorkers.ContainsID(id) + ds.SyncWorkers.ContainsID(id) || + ds.Gateways.ContainsID(id) } // ElementByID returns the element in the given list that has the given ID and true. @@ -78,6 +81,9 @@ func (ds DeploymentStatusMembers) ElementByID(id string) (MemberStatus, ServerGr if result, found := ds.SyncWorkers.ElementByID(id); found { return result, ServerGroupSyncWorkers, true } + if result, found := ds.Gateways.ElementByID(id); found { + return result, ServerGroupGateways, true + } return MemberStatus{}, 0, false } @@ -129,6 +135,10 @@ func (ds DeploymentStatusMembers) ForServerGroup(cb MemberStatusFunc, group Serv if err := cb(ServerGroupSyncWorkers, ds.SyncWorkers); err != nil { return errors.WithStack(err) } + case ServerGroupGateways: + if err := cb(ServerGroupGateways, ds.Gateways); err != nil { + return errors.WithStack(err) + } } return nil } @@ -155,6 +165,9 @@ func (ds DeploymentStatusMembers) MemberStatusByPodName(podName string) (MemberS if result, found := ds.SyncWorkers.ElementByPodName(podName); found { return result, ServerGroupSyncWorkers, true } + if result, found := ds.Gateways.ElementByPodName(podName); found { + return result, ServerGroupGateways, true + } return MemberStatus{}, 0, false } @@ -190,6 +203,8 @@ func (ds *DeploymentStatusMembers) Add(status MemberStatus, group ServerGroup) e err = ds.SyncMasters.add(status) case ServerGroupSyncWorkers: err = ds.SyncWorkers.add(status) + case ServerGroupGateways: + err = ds.Gateways.add(status) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -215,6 +230,8 @@ func (ds *DeploymentStatusMembers) Update(status MemberStatus, group ServerGroup err = ds.SyncMasters.update(status) case ServerGroupSyncWorkers: err = ds.SyncWorkers.update(status) + case ServerGroupGateways: + err = ds.Gateways.update(status) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -241,6 +258,8 @@ func (ds *DeploymentStatusMembers) RemoveByID(id string, group ServerGroup) erro err = ds.SyncMasters.removeByID(id) case ServerGroupSyncWorkers: err = ds.SyncWorkers.removeByID(id) + case ServerGroupGateways: + err = ds.Gateways.removeByID(id) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -250,23 +269,30 @@ func (ds *DeploymentStatusMembers) RemoveByID(id string, group ServerGroup) erro return nil } -// AllMembersReady returns true when all members, that must be ready for the given mode, are in the Ready state. -func (ds DeploymentStatusMembers) AllMembersReady(mode DeploymentMode, syncEnabled bool) bool { +// AllMembersReady returns true when all members, that must be ready for the given mode are in the Ready state. +func (ds DeploymentStatusMembers) AllMembersReady(mode DeploymentMode, syncEnabled, gatewayEnabled bool) bool { syncReady := func() bool { if syncEnabled { return ds.SyncMasters.AllMembersReady() && ds.SyncWorkers.AllMembersReady() } return true } + gatewayReady := func() bool { + if gatewayEnabled { + return ds.Gateways.AllMembersReady() + } + return true + } switch mode { case DeploymentModeSingle: - return ds.Single.MembersReady() > 0 + return ds.Single.MembersReady() > 0 && gatewayReady() case DeploymentModeActiveFailover: return ds.Agents.AllMembersReady() && ds.Single.MembersReady() > 0 case DeploymentModeCluster: return ds.Agents.AllMembersReady() && ds.DBServers.AllMembersReady() && ds.Coordinators.AllMembersReady() && + gatewayReady() && syncReady() default: return false @@ -288,6 +314,8 @@ func (ds DeploymentStatusMembers) MembersOfGroup(group ServerGroup) MemberStatus return ds.SyncMasters case ServerGroupSyncWorkers: return ds.SyncWorkers + case ServerGroupGateways: + return ds.Gateways default: return MemberStatusList{} } diff --git a/pkg/apis/deployment/v1/deployment_status_members_test.go b/pkg/apis/deployment/v1/deployment_status_members_test.go index aea0020b7..e88f2a1e9 100644 --- a/pkg/apis/deployment/v1/deployment_status_members_test.go +++ b/pkg/apis/deployment/v1/deployment_status_members_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ func newMemberList() DeploymentStatusMembers { Coordinators: MemberStatusList{{ID: ServerGroupCoordinators.AsRole()}}, SyncMasters: MemberStatusList{{ID: ServerGroupSyncMasters.AsRole()}}, SyncWorkers: MemberStatusList{{ID: ServerGroupSyncWorkers.AsRole()}}, + Gateways: MemberStatusList{{ID: ServerGroupGateways.AsRole()}}, } } diff --git a/pkg/apis/deployment/v1/server_group.go b/pkg/apis/deployment/v1/server_group.go index b504f1cd9..d3795422e 100644 --- a/pkg/apis/deployment/v1/server_group.go +++ b/pkg/apis/deployment/v1/server_group.go @@ -84,6 +84,7 @@ const ( ServerGroupCoordinators ServerGroup = 4 ServerGroupSyncMasters ServerGroup = 5 ServerGroupSyncWorkers ServerGroup = 6 + ServerGroupGateways ServerGroup = 7 ServerGroupImageDiscovery ServerGroup = -1 ServerGroupSingleString = "single" @@ -92,6 +93,7 @@ const ( ServerGroupCoordinatorsString = "coordinator" ServerGroupSyncMastersString = "syncmaster" ServerGroupSyncWorkersString = "syncworker" + ServerGroupGatewaysString = "gateways" ServerGroupImageDiscoveryString = "id" ServerGroupSingleAbbreviatedString = "sngl" @@ -100,6 +102,7 @@ const ( ServerGroupCoordinatorsAbbreviatedString = "crdn" ServerGroupSyncMastersAbbreviatedString = "syma" ServerGroupSyncWorkersAbbreviatedString = "sywo" + ServerGroupGatewaysAbbreviatedString = "gway" ServerGroupImageDiscoveryAbbreviatedString = "id" ) @@ -112,6 +115,7 @@ var ( ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, + ServerGroupGateways, } // AllArangoDServerGroups contains a constant list of all ArangoD server groups AllArangoDServerGroups = []ServerGroup{ @@ -131,6 +135,8 @@ func (g ServerGroup) Type() ServerGroupType { return ServerGroupTypeID case ServerGroupSyncMasters, ServerGroupSyncWorkers: return ServerGroupTypeArangoSync + case ServerGroupGateways: + return ServerGroupTypeGateway default: return ServerGroupTypeUnknown } @@ -151,6 +157,8 @@ func (g ServerGroup) AsRole() string { return ServerGroupSyncMastersString case ServerGroupSyncWorkers: return ServerGroupSyncWorkersString + case ServerGroupGateways: + return ServerGroupGatewaysString case ServerGroupImageDiscovery: return ServerGroupImageDiscoveryString default: @@ -163,14 +171,14 @@ func (g ServerGroup) Enabled(mode DeploymentMode) bool { switch mode { case DeploymentModeSingle: switch g { - case ServerGroupSingle: + case ServerGroupSingle, ServerGroupGateways: return true default: return false } case DeploymentModeCluster: switch g { - case ServerGroupAgents, ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupAgents, ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, ServerGroupGateways: return true default: return false @@ -202,6 +210,8 @@ func (g ServerGroup) AsRoleAbbreviated() string { return ServerGroupSyncMastersAbbreviatedString case ServerGroupSyncWorkers: return ServerGroupSyncWorkersAbbreviatedString + case ServerGroupGateways: + return ServerGroupGatewaysAbbreviatedString case ServerGroupImageDiscovery: return ServerGroupImageDiscoveryAbbreviatedString default: @@ -228,7 +238,7 @@ func (g ServerGroup) DefaultTerminationGracePeriod() time.Duration { // IsStateless returns true when the groups runs servers without a persistent volume. func (g ServerGroup) IsStateless() bool { switch g { - case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, ServerGroupGateways: return true default: return false @@ -255,6 +265,16 @@ func (g ServerGroup) IsArangosync() bool { } } +// IsGateway returns true when the group is a gateway group +func (g ServerGroup) IsGateway() bool { + switch g { + case ServerGroupGateways: + return true + default: + return false + } +} + // IsExportMetrics return true when the group can be used with the arangodbexporter func (g ServerGroup) IsExportMetrics() bool { switch g { @@ -280,6 +300,8 @@ func ServerGroupFromAbbreviatedRole(label string) ServerGroup { return ServerGroupSyncMasters case ServerGroupSyncWorkersAbbreviatedString: return ServerGroupSyncWorkers + case ServerGroupGatewaysAbbreviatedString: + return ServerGroupGateways case ServerGroupImageDiscoveryAbbreviatedString: return ServerGroupImageDiscovery default: @@ -287,7 +309,7 @@ func ServerGroupFromAbbreviatedRole(label string) ServerGroup { } } -// ServerGroupFromAbbreviatedRole returns ServerGroup from role +// ServerGroupFromRole returns ServerGroup from role func ServerGroupFromRole(label string) ServerGroup { switch label { case ServerGroupSingleString: @@ -302,6 +324,8 @@ func ServerGroupFromRole(label string) ServerGroup { return ServerGroupSyncMasters case ServerGroupSyncWorkersString: return ServerGroupSyncWorkers + case ServerGroupGatewaysString: + return ServerGroupGateways case ServerGroupImageDiscoveryString: return ServerGroupImageDiscovery default: diff --git a/pkg/apis/deployment/v1/server_group_spec_test.go b/pkg/apis/deployment/v1/server_group_spec_test.go index df285d998..e3ec3e3ce 100644 --- a/pkg/apis/deployment/v1/server_group_spec_test.go +++ b/pkg/apis/deployment/v1/server_group_spec_test.go @@ -46,6 +46,7 @@ func TestServerGroupSpecValidateCount(t *testing.T) { assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupSyncMasters).New().Validate(ServerGroupSyncMasters, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupSyncWorkers).New().Validate(ServerGroupSyncWorkers, true, DeploymentModeCluster, EnvironmentProduction)) + assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupGateways).New().Validate(ServerGroupGateways, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2), MinCount: util.NewType[int](2), MaxCount: util.NewType[int](5)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentDevelopment)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](1), MaxCount: util.NewType[int](5)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentDevelopment)) @@ -112,6 +113,10 @@ func TestServerGroupSpecDefault(t *testing.T) { assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupSyncWorkers, false, DeploymentModeActiveFailover).New().GetCount()) assert.Equal(t, 3, def(ServerGroupSpec{}, ServerGroupSyncWorkers, true, DeploymentModeCluster).New().GetCount()) + assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupGateways, false, DeploymentModeSingle).New().GetCount()) + assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupGateways, false, DeploymentModeActiveFailover).New().GetCount()) + assert.Equal(t, 3, def(ServerGroupSpec{}, ServerGroupGateways, true, DeploymentModeCluster).New().GetCount()) + for _, g := range AllServerGroups { assert.Equal(t, 0, len(def(ServerGroupSpec{}, g, true, DeploymentModeSingle).Args)) assert.Equal(t, "", def(ServerGroupSpec{}, g, true, DeploymentModeSingle).New().GetStorageClassName()) diff --git a/pkg/apis/deployment/v1/server_group_test.go b/pkg/apis/deployment/v1/server_group_test.go index ef2ddc8d9..d182c2399 100644 --- a/pkg/apis/deployment/v1/server_group_test.go +++ b/pkg/apis/deployment/v1/server_group_test.go @@ -33,6 +33,7 @@ func TestServerGroupAsRole(t *testing.T) { assert.Equal(t, "coordinator", ServerGroupCoordinators.AsRole()) assert.Equal(t, "syncmaster", ServerGroupSyncMasters.AsRole()) assert.Equal(t, "syncworker", ServerGroupSyncWorkers.AsRole()) + assert.Equal(t, "gateways", ServerGroupGateways.AsRole()) } func TestServerGroupAsRoleAbbreviated(t *testing.T) { @@ -42,6 +43,7 @@ func TestServerGroupAsRoleAbbreviated(t *testing.T) { assert.Equal(t, "crdn", ServerGroupCoordinators.AsRoleAbbreviated()) assert.Equal(t, "syma", ServerGroupSyncMasters.AsRoleAbbreviated()) assert.Equal(t, "sywo", ServerGroupSyncWorkers.AsRoleAbbreviated()) + assert.Equal(t, "gway", ServerGroupGateways.AsRoleAbbreviated()) } func TestServerGroupIsArangod(t *testing.T) { @@ -51,6 +53,7 @@ func TestServerGroupIsArangod(t *testing.T) { assert.True(t, ServerGroupCoordinators.IsArangod()) assert.False(t, ServerGroupSyncMasters.IsArangod()) assert.False(t, ServerGroupSyncWorkers.IsArangod()) + assert.False(t, ServerGroupGateways.IsArangod()) } func TestServerGroupIsArangosync(t *testing.T) { @@ -60,6 +63,7 @@ func TestServerGroupIsArangosync(t *testing.T) { assert.False(t, ServerGroupCoordinators.IsArangosync()) assert.True(t, ServerGroupSyncMasters.IsArangosync()) assert.True(t, ServerGroupSyncWorkers.IsArangosync()) + assert.False(t, ServerGroupGateways.IsArangosync()) } func TestServerGroupType(t *testing.T) { @@ -71,4 +75,6 @@ func TestServerGroupType(t *testing.T) { assert.Equal(t, ServerGroupTypeArangoD, ServerGroupCoordinators.Type()) assert.Equal(t, ServerGroupTypeArangoSync, ServerGroupSyncMasters.Type()) assert.Equal(t, ServerGroupTypeArangoSync, ServerGroupSyncWorkers.Type()) + assert.Equal(t, ServerGroupTypeGateway, ServerGroupGateways.Type()) + } diff --git a/pkg/apis/deployment/v1/server_group_type.go b/pkg/apis/deployment/v1/server_group_type.go index 1c3c24f5d..70ce15bc4 100644 --- a/pkg/apis/deployment/v1/server_group_type.go +++ b/pkg/apis/deployment/v1/server_group_type.go @@ -27,4 +27,5 @@ const ( ServerGroupTypeArangoD ServerGroupTypeArangoSync ServerGroupTypeID + ServerGroupTypeGateway ) diff --git a/pkg/apis/deployment/v1/zz_generated.deepcopy.go b/pkg/apis/deployment/v1/zz_generated.deepcopy.go index 2b9c00f0f..6b0d6bae1 100644 --- a/pkg/apis/deployment/v1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1/zz_generated.deepcopy.go @@ -1101,6 +1101,11 @@ func (in *DeploymentSpec) DeepCopyInto(out *DeploymentSpec) { in.Coordinators.DeepCopyInto(&out.Coordinators) in.SyncMasters.DeepCopyInto(&out.SyncMasters) in.SyncWorkers.DeepCopyInto(&out.SyncWorkers) + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = new(ServerGroupSpec) + (*in).DeepCopyInto(*out) + } if in.MemberPropagationMode != nil { in, out := &in.MemberPropagationMode, &out.MemberPropagationMode *out = new(DeploymentMemberPropagationMode) @@ -1148,6 +1153,11 @@ func (in *DeploymentSpec) DeepCopyInto(out *DeploymentSpec) { *out = new(string) **out = **in } + if in.Gateway != nil { + in, out := &in.Gateway, &out.Gateway + *out = new(DeploymentSpecGateway) + (*in).DeepCopyInto(*out) + } return } @@ -1161,6 +1171,27 @@ func (in *DeploymentSpec) DeepCopy() *DeploymentSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentSpecGateway) DeepCopyInto(out *DeploymentSpecGateway) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentSpecGateway. +func (in *DeploymentSpecGateway) DeepCopy() *DeploymentSpecGateway { + if in == nil { + return nil + } + out := new(DeploymentSpecGateway) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeploymentStatus) DeepCopyInto(out *DeploymentStatus) { *out = *in @@ -1291,6 +1322,11 @@ func (in *DeploymentStatus) DeepCopyInto(out *DeploymentStatus) { *out = new(ServerGroupStatus) (*in).DeepCopyInto(*out) } + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = new(ServerGroupStatus) + (*in).DeepCopyInto(*out) + } return } @@ -1521,6 +1557,13 @@ func (in *DeploymentStatusMembers) DeepCopyInto(out *DeploymentStatusMembers) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = make(MemberStatusList, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/pkg/apis/deployment/v2alpha1/deployment.go b/pkg/apis/deployment/v2alpha1/deployment.go index 11c4326ce..53472fcdd 100644 --- a/pkg/apis/deployment/v2alpha1/deployment.go +++ b/pkg/apis/deployment/v2alpha1/deployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -73,7 +73,7 @@ func (d *ArangoDeployment) AsOwner() meta.OwnerReference { // ForeachServerGroup calls the given callback for all server groups. // If the callback returns an error, this error is returned and no other server // groups are processed. -// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers +// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers, gateways func (d *ArangoDeployment) ForeachServerGroup(cb ServerGroupFunc, status *DeploymentStatus) error { if status == nil { status = &d.Status @@ -84,7 +84,7 @@ func (d *ArangoDeployment) ForeachServerGroup(cb ServerGroupFunc, status *Deploy // ForeachServerGroupAccepted calls the given callback for all accepted server groups. // If the callback returns an error, this error is returned and no other server // groups are processed. -// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers +// Groups are processed in this order: agents, single, dbservers, coordinators, syncmasters, syncworkers, gateways func (d *ArangoDeployment) ForeachServerGroupAccepted(cb ServerGroupFunc, status *DeploymentStatus) error { if status == nil { status = &d.Status @@ -115,6 +115,9 @@ func (d *ArangoDeployment) foreachServerGroup(cb ServerGroupFunc, spec Deploymen if err := cb(ServerGroupSyncWorkers, spec.SyncWorkers, &status.Members.SyncWorkers); err != nil { return errors.WithStack(err) } + if err := cb(ServerGroupGateways, spec.Gateways.Get(), &status.Members.Gateways); err != nil { + return errors.WithStack(err) + } return nil } diff --git a/pkg/apis/deployment/v2alpha1/deployment_spec.go b/pkg/apis/deployment/v2alpha1/deployment_spec.go index 0f0192cb9..4e979fa22 100644 --- a/pkg/apis/deployment/v2alpha1/deployment_spec.go +++ b/pkg/apis/deployment/v2alpha1/deployment_spec.go @@ -199,6 +199,9 @@ type DeploymentSpec struct { // SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. SyncWorkers ServerGroupSpec `json:"syncworkers"` + // Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. + Gateways *ServerGroupSpec `json:"gateways,omitempty"` + // MemberPropagationMode defines how changes to pod spec should be propogated. // Changes to a pod’s configuration require a restart of that pod in almost all cases. // Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. @@ -256,6 +259,9 @@ type DeploymentSpec struct { // Timezone if specified, will set a timezone for deployment. // Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` Timezone *string `json:"timezone,omitempty"` + + // Gateway defined main Gateway configuration. + Gateway *DeploymentSpecGateway `json:"gateway,omitempty"` } // GetAllowMemberRecreation returns member recreation policy based on group and settings @@ -267,6 +273,8 @@ func (s *DeploymentSpec) GetAllowMemberRecreation(group ServerGroup) bool { groupSpec := s.GetServerGroupSpec(group) switch group { + case ServerGroupGateways: + return true case ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: if v := groupSpec.AllowMemberRecreation; v == nil { return true @@ -326,6 +334,11 @@ func (s DeploymentSpec) GetSyncImage() string { return s.GetImage() } +// IsGatewayEnabled returns true when the deployment has gateways enabled. +func (s DeploymentSpec) IsGatewayEnabled() bool { + return s.Gateway.IsEnabled() +} + // GetImagePullPolicy returns the value of imagePullPolicy. func (s DeploymentSpec) GetImagePullPolicy() core.PullPolicy { return util.TypeOrDefault[core.PullPolicy](s.ImagePullPolicy) @@ -364,8 +377,7 @@ func (s DeploymentSpec) IsSecure() bool { return s.TLS.IsSecure() } -// GetServerGroupSpec returns the server group spec (from this -// deployment spec) for the given group. +// GetServerGroupSpec returns the server group spec (from this deployment spec) for the given group. func (s DeploymentSpec) GetServerGroupSpec(group ServerGroup) ServerGroupSpec { switch group { case ServerGroupSingle: @@ -380,13 +392,14 @@ func (s DeploymentSpec) GetServerGroupSpec(group ServerGroup) ServerGroupSpec { return s.SyncMasters.WithGroup(group) case ServerGroupSyncWorkers: return s.SyncWorkers.WithGroup(group) + case ServerGroupGateways: + return s.Gateways.WithGroup(group) default: return ServerGroupSpec{} } } -// UpdateServerGroupSpec returns the server group spec (from this -// deployment spec) for the given group. +// UpdateServerGroupSpec returns the server group spec (from this deployment spec) for the given group. func (s *DeploymentSpec) UpdateServerGroupSpec(group ServerGroup, gspec ServerGroupSpec) { switch group { case ServerGroupSingle: @@ -401,6 +414,8 @@ func (s *DeploymentSpec) UpdateServerGroupSpec(group ServerGroup, gspec ServerGr s.SyncMasters = gspec case ServerGroupSyncWorkers: s.SyncWorkers = gspec + case ServerGroupGateways: + s.Gateways = gspec.DeepCopy() } } @@ -421,6 +436,11 @@ func (s *DeploymentSpec) SetDefaults(deploymentName string) { if s.GetImagePullPolicy() == "" { s.ImagePullPolicy = util.NewType[core.PullPolicy](core.PullIfNotPresent) } + if s.Gateway.IsEnabled() { + if s.Gateways == nil { + s.Gateways = &ServerGroupSpec{} + } + } s.ExternalAccess.SetDefaults() s.RocksDB.SetDefaults() s.Authentication.SetDefaults(deploymentName + "-jwt") @@ -432,6 +452,7 @@ func (s *DeploymentSpec) SetDefaults(deploymentName string) { s.Coordinators.SetDefaults(ServerGroupCoordinators, s.GetMode().HasCoordinators(), s.GetMode()) s.SyncMasters.SetDefaults(ServerGroupSyncMasters, s.Sync.IsEnabled(), s.GetMode()) s.SyncWorkers.SetDefaults(ServerGroupSyncWorkers, s.Sync.IsEnabled(), s.GetMode()) + s.Gateways.SetDefaults(ServerGroupGateways, s.IsGatewayEnabled(), s.GetMode()) s.Metrics.SetDefaults(deploymentName+"-exporter-jwt-token", s.Authentication.IsAuthenticated()) s.Chaos.SetDefaults() s.Bootstrap.SetDefaults(deploymentName) @@ -480,6 +501,7 @@ func (s *DeploymentSpec) SetDefaultsFrom(source DeploymentSpec) { s.Coordinators.SetDefaultsFrom(source.Coordinators) s.SyncMasters.SetDefaultsFrom(source.SyncMasters) s.SyncWorkers.SetDefaultsFrom(source.SyncWorkers) + s.Gateways.SetDefaultsFrom(source.Gateways.Get()) s.Metrics.SetDefaultsFrom(source.Metrics) s.Lifecycle.SetDefaultsFrom(source.Lifecycle) s.Chaos.SetDefaultsFrom(source.Chaos) @@ -539,6 +561,11 @@ func (s *DeploymentSpec) Validate() error { if err := s.SyncWorkers.Validate(ServerGroupSyncWorkers, s.Sync.IsEnabled(), s.GetMode(), s.GetEnvironment()); err != nil { return errors.WithStack(err) } + if s.IsGatewayEnabled() { + if err := s.Gateways.Validate(ServerGroupGateways, s.IsGatewayEnabled(), s.GetMode(), s.GetEnvironment()); err != nil { + return errors.WithStack(err) + } + } if err := s.Metrics.Validate(); err != nil { return errors.WithStack(errors.Wrap(err, "spec.metrics")) } @@ -554,6 +581,9 @@ func (s *DeploymentSpec) Validate() error { if err := s.Architecture.Validate(); err != nil { return errors.WithStack(errors.Wrap(err, "spec.architecture")) } + if err := s.Gateway.Validate(); err != nil { + return errors.WithStack(errors.Wrap(err, "spec.architecture")) + } return nil } @@ -614,6 +644,14 @@ func (s DeploymentSpec) ResetImmutableFields(target *DeploymentSpec) []string { if l := s.SyncWorkers.ResetImmutableFields(ServerGroupSyncWorkers, "syncworkers", &target.SyncWorkers); l != nil { resetFields = append(resetFields, l...) } + if s.Gateways != nil { + if target.Gateways == nil { + target.Gateways = &ServerGroupSpec{} + } + if l := s.Gateways.ResetImmutableFields(ServerGroupGateways, "gateways", target.Gateways); l != nil { + resetFields = append(resetFields, l...) + } + } if l := s.Metrics.ResetImmutableFields("metrics", &target.Metrics); l != nil { resetFields = append(resetFields, l...) } diff --git a/pkg/apis/deployment/v2alpha1/deployment_spec_gateway.go b/pkg/apis/deployment/v2alpha1/deployment_spec_gateway.go new file mode 100644 index 000000000..fba747bbf --- /dev/null +++ b/pkg/apis/deployment/v2alpha1/deployment_spec_gateway.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package v2alpha1 + +type DeploymentSpecGateway struct { + Enabled *bool `json:"enabled,omitempty"` +} + +func (d *DeploymentSpecGateway) IsEnabled() bool { + if d == nil || d.Enabled == nil { + return false + } + + return *d.Enabled +} + +func (d *DeploymentSpecGateway) Validate() error { + return nil +} diff --git a/pkg/apis/deployment/v2alpha1/deployment_status.go b/pkg/apis/deployment/v2alpha1/deployment_status.go index a765df6ba..b348225f5 100644 --- a/pkg/apis/deployment/v2alpha1/deployment_status.go +++ b/pkg/apis/deployment/v2alpha1/deployment_status.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -103,6 +103,7 @@ type DeploymentStatus struct { Coordinators *ServerGroupStatus `json:"coordinators,omitempty"` SyncMasters *ServerGroupStatus `json:"syncmasters,omitempty"` SyncWorkers *ServerGroupStatus `json:"syncworkers,omitempty"` + Gateways *ServerGroupStatus `json:"gateways,omitempty"` } // Equal checks for equality @@ -174,6 +175,8 @@ func (ds DeploymentStatus) getServerGroupStatus(group ServerGroup) *ServerGroupS return ds.SyncMasters.DeepCopy() case ServerGroupSyncWorkers: return ds.SyncWorkers.DeepCopy() + case ServerGroupGateways: + return ds.Gateways.DeepCopy() default: return nil } @@ -195,5 +198,7 @@ func (ds *DeploymentStatus) UpdateServerGroupStatus(group ServerGroup, gspec Ser ds.SyncMasters = &gspec case ServerGroupSyncWorkers: ds.SyncWorkers = &gspec + case ServerGroupGateways: + ds.Gateways = &gspec } } diff --git a/pkg/apis/deployment/v2alpha1/deployment_status_members.go b/pkg/apis/deployment/v2alpha1/deployment_status_members.go index 54518c4f6..acdedb3cf 100644 --- a/pkg/apis/deployment/v2alpha1/deployment_status_members.go +++ b/pkg/apis/deployment/v2alpha1/deployment_status_members.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ type DeploymentStatusMembers struct { Coordinators MemberStatusList `json:"coordinators,omitempty"` SyncMasters MemberStatusList `json:"syncmasters,omitempty"` SyncWorkers MemberStatusList `json:"syncworkers,omitempty"` + Gateways MemberStatusList `json:"gateways,omitempty"` } // Equal checks for equality @@ -44,7 +45,8 @@ func (ds DeploymentStatusMembers) Equal(other DeploymentStatusMembers) bool { ds.DBServers.Equal(other.DBServers) && ds.Coordinators.Equal(other.Coordinators) && ds.SyncMasters.Equal(other.SyncMasters) && - ds.SyncWorkers.Equal(other.SyncWorkers) + ds.SyncWorkers.Equal(other.SyncWorkers) && + ds.Gateways.Equal(other.Gateways) } // ContainsID returns true if the given set of members contains a member with given ID. @@ -54,7 +56,8 @@ func (ds DeploymentStatusMembers) ContainsID(id string) bool { ds.DBServers.ContainsID(id) || ds.Coordinators.ContainsID(id) || ds.SyncMasters.ContainsID(id) || - ds.SyncWorkers.ContainsID(id) + ds.SyncWorkers.ContainsID(id) || + ds.Gateways.ContainsID(id) } // ElementByID returns the element in the given list that has the given ID and true. @@ -78,6 +81,9 @@ func (ds DeploymentStatusMembers) ElementByID(id string) (MemberStatus, ServerGr if result, found := ds.SyncWorkers.ElementByID(id); found { return result, ServerGroupSyncWorkers, true } + if result, found := ds.Gateways.ElementByID(id); found { + return result, ServerGroupGateways, true + } return MemberStatus{}, 0, false } @@ -129,6 +135,10 @@ func (ds DeploymentStatusMembers) ForServerGroup(cb MemberStatusFunc, group Serv if err := cb(ServerGroupSyncWorkers, ds.SyncWorkers); err != nil { return errors.WithStack(err) } + case ServerGroupGateways: + if err := cb(ServerGroupGateways, ds.Gateways); err != nil { + return errors.WithStack(err) + } } return nil } @@ -155,6 +165,9 @@ func (ds DeploymentStatusMembers) MemberStatusByPodName(podName string) (MemberS if result, found := ds.SyncWorkers.ElementByPodName(podName); found { return result, ServerGroupSyncWorkers, true } + if result, found := ds.Gateways.ElementByPodName(podName); found { + return result, ServerGroupGateways, true + } return MemberStatus{}, 0, false } @@ -190,6 +203,8 @@ func (ds *DeploymentStatusMembers) Add(status MemberStatus, group ServerGroup) e err = ds.SyncMasters.add(status) case ServerGroupSyncWorkers: err = ds.SyncWorkers.add(status) + case ServerGroupGateways: + err = ds.Gateways.add(status) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -215,6 +230,8 @@ func (ds *DeploymentStatusMembers) Update(status MemberStatus, group ServerGroup err = ds.SyncMasters.update(status) case ServerGroupSyncWorkers: err = ds.SyncWorkers.update(status) + case ServerGroupGateways: + err = ds.Gateways.update(status) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -241,6 +258,8 @@ func (ds *DeploymentStatusMembers) RemoveByID(id string, group ServerGroup) erro err = ds.SyncMasters.removeByID(id) case ServerGroupSyncWorkers: err = ds.SyncWorkers.removeByID(id) + case ServerGroupGateways: + err = ds.Gateways.removeByID(id) default: return errors.WithStack(errors.Wrapf(NotFoundError, "ServerGroup %d is not known", group)) } @@ -250,23 +269,30 @@ func (ds *DeploymentStatusMembers) RemoveByID(id string, group ServerGroup) erro return nil } -// AllMembersReady returns true when all members, that must be ready for the given mode, are in the Ready state. -func (ds DeploymentStatusMembers) AllMembersReady(mode DeploymentMode, syncEnabled bool) bool { +// AllMembersReady returns true when all members, that must be ready for the given mode are in the Ready state. +func (ds DeploymentStatusMembers) AllMembersReady(mode DeploymentMode, syncEnabled, gatewayEnabled bool) bool { syncReady := func() bool { if syncEnabled { return ds.SyncMasters.AllMembersReady() && ds.SyncWorkers.AllMembersReady() } return true } + gatewayReady := func() bool { + if gatewayEnabled { + return ds.Gateways.AllMembersReady() + } + return true + } switch mode { case DeploymentModeSingle: - return ds.Single.MembersReady() > 0 + return ds.Single.MembersReady() > 0 && gatewayReady() case DeploymentModeActiveFailover: return ds.Agents.AllMembersReady() && ds.Single.MembersReady() > 0 case DeploymentModeCluster: return ds.Agents.AllMembersReady() && ds.DBServers.AllMembersReady() && ds.Coordinators.AllMembersReady() && + gatewayReady() && syncReady() default: return false @@ -288,6 +314,8 @@ func (ds DeploymentStatusMembers) MembersOfGroup(group ServerGroup) MemberStatus return ds.SyncMasters case ServerGroupSyncWorkers: return ds.SyncWorkers + case ServerGroupGateways: + return ds.Gateways default: return MemberStatusList{} } diff --git a/pkg/apis/deployment/v2alpha1/deployment_status_members_test.go b/pkg/apis/deployment/v2alpha1/deployment_status_members_test.go index 64237784a..723ef50f0 100644 --- a/pkg/apis/deployment/v2alpha1/deployment_status_members_test.go +++ b/pkg/apis/deployment/v2alpha1/deployment_status_members_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ func newMemberList() DeploymentStatusMembers { Coordinators: MemberStatusList{{ID: ServerGroupCoordinators.AsRole()}}, SyncMasters: MemberStatusList{{ID: ServerGroupSyncMasters.AsRole()}}, SyncWorkers: MemberStatusList{{ID: ServerGroupSyncWorkers.AsRole()}}, + Gateways: MemberStatusList{{ID: ServerGroupGateways.AsRole()}}, } } diff --git a/pkg/apis/deployment/v2alpha1/server_group.go b/pkg/apis/deployment/v2alpha1/server_group.go index bc3c2be6c..1de521e7e 100644 --- a/pkg/apis/deployment/v2alpha1/server_group.go +++ b/pkg/apis/deployment/v2alpha1/server_group.go @@ -84,6 +84,7 @@ const ( ServerGroupCoordinators ServerGroup = 4 ServerGroupSyncMasters ServerGroup = 5 ServerGroupSyncWorkers ServerGroup = 6 + ServerGroupGateways ServerGroup = 7 ServerGroupImageDiscovery ServerGroup = -1 ServerGroupSingleString = "single" @@ -92,6 +93,7 @@ const ( ServerGroupCoordinatorsString = "coordinator" ServerGroupSyncMastersString = "syncmaster" ServerGroupSyncWorkersString = "syncworker" + ServerGroupGatewaysString = "gateways" ServerGroupImageDiscoveryString = "id" ServerGroupSingleAbbreviatedString = "sngl" @@ -100,6 +102,7 @@ const ( ServerGroupCoordinatorsAbbreviatedString = "crdn" ServerGroupSyncMastersAbbreviatedString = "syma" ServerGroupSyncWorkersAbbreviatedString = "sywo" + ServerGroupGatewaysAbbreviatedString = "gway" ServerGroupImageDiscoveryAbbreviatedString = "id" ) @@ -112,6 +115,7 @@ var ( ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, + ServerGroupGateways, } // AllArangoDServerGroups contains a constant list of all ArangoD server groups AllArangoDServerGroups = []ServerGroup{ @@ -131,6 +135,8 @@ func (g ServerGroup) Type() ServerGroupType { return ServerGroupTypeID case ServerGroupSyncMasters, ServerGroupSyncWorkers: return ServerGroupTypeArangoSync + case ServerGroupGateways: + return ServerGroupTypeGateway default: return ServerGroupTypeUnknown } @@ -151,6 +157,8 @@ func (g ServerGroup) AsRole() string { return ServerGroupSyncMastersString case ServerGroupSyncWorkers: return ServerGroupSyncWorkersString + case ServerGroupGateways: + return ServerGroupGatewaysString case ServerGroupImageDiscovery: return ServerGroupImageDiscoveryString default: @@ -163,14 +171,14 @@ func (g ServerGroup) Enabled(mode DeploymentMode) bool { switch mode { case DeploymentModeSingle: switch g { - case ServerGroupSingle: + case ServerGroupSingle, ServerGroupGateways: return true default: return false } case DeploymentModeCluster: switch g { - case ServerGroupAgents, ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupAgents, ServerGroupDBServers, ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, ServerGroupGateways: return true default: return false @@ -202,6 +210,8 @@ func (g ServerGroup) AsRoleAbbreviated() string { return ServerGroupSyncMastersAbbreviatedString case ServerGroupSyncWorkers: return ServerGroupSyncWorkersAbbreviatedString + case ServerGroupGateways: + return ServerGroupGatewaysAbbreviatedString case ServerGroupImageDiscovery: return ServerGroupImageDiscoveryAbbreviatedString default: @@ -228,7 +238,7 @@ func (g ServerGroup) DefaultTerminationGracePeriod() time.Duration { // IsStateless returns true when the groups runs servers without a persistent volume. func (g ServerGroup) IsStateless() bool { switch g { - case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers: + case ServerGroupCoordinators, ServerGroupSyncMasters, ServerGroupSyncWorkers, ServerGroupGateways: return true default: return false @@ -255,6 +265,16 @@ func (g ServerGroup) IsArangosync() bool { } } +// IsGateway returns true when the group is a gateway group +func (g ServerGroup) IsGateway() bool { + switch g { + case ServerGroupGateways: + return true + default: + return false + } +} + // IsExportMetrics return true when the group can be used with the arangodbexporter func (g ServerGroup) IsExportMetrics() bool { switch g { @@ -280,6 +300,8 @@ func ServerGroupFromAbbreviatedRole(label string) ServerGroup { return ServerGroupSyncMasters case ServerGroupSyncWorkersAbbreviatedString: return ServerGroupSyncWorkers + case ServerGroupGatewaysAbbreviatedString: + return ServerGroupGateways case ServerGroupImageDiscoveryAbbreviatedString: return ServerGroupImageDiscovery default: @@ -287,7 +309,7 @@ func ServerGroupFromAbbreviatedRole(label string) ServerGroup { } } -// ServerGroupFromAbbreviatedRole returns ServerGroup from role +// ServerGroupFromRole returns ServerGroup from role func ServerGroupFromRole(label string) ServerGroup { switch label { case ServerGroupSingleString: @@ -302,6 +324,8 @@ func ServerGroupFromRole(label string) ServerGroup { return ServerGroupSyncMasters case ServerGroupSyncWorkersString: return ServerGroupSyncWorkers + case ServerGroupGatewaysString: + return ServerGroupGateways case ServerGroupImageDiscoveryString: return ServerGroupImageDiscovery default: diff --git a/pkg/apis/deployment/v2alpha1/server_group_spec_test.go b/pkg/apis/deployment/v2alpha1/server_group_spec_test.go index 6383cef37..446db456e 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_spec_test.go +++ b/pkg/apis/deployment/v2alpha1/server_group_spec_test.go @@ -46,6 +46,7 @@ func TestServerGroupSpecValidateCount(t *testing.T) { assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupSyncMasters).New().Validate(ServerGroupSyncMasters, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupSyncWorkers).New().Validate(ServerGroupSyncWorkers, true, DeploymentModeCluster, EnvironmentProduction)) + assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2)}.New().WithGroup(ServerGroupGateways).New().Validate(ServerGroupGateways, true, DeploymentModeCluster, EnvironmentProduction)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](2), MinCount: util.NewType[int](2), MaxCount: util.NewType[int](5)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentDevelopment)) assert.Nil(t, ServerGroupSpec{Count: util.NewType[int](1), MaxCount: util.NewType[int](5)}.New().WithGroup(ServerGroupCoordinators).New().Validate(ServerGroupCoordinators, true, DeploymentModeCluster, EnvironmentDevelopment)) @@ -112,6 +113,10 @@ func TestServerGroupSpecDefault(t *testing.T) { assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupSyncWorkers, false, DeploymentModeActiveFailover).New().GetCount()) assert.Equal(t, 3, def(ServerGroupSpec{}, ServerGroupSyncWorkers, true, DeploymentModeCluster).New().GetCount()) + assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupGateways, false, DeploymentModeSingle).New().GetCount()) + assert.Equal(t, 0, def(ServerGroupSpec{}, ServerGroupGateways, false, DeploymentModeActiveFailover).New().GetCount()) + assert.Equal(t, 3, def(ServerGroupSpec{}, ServerGroupGateways, true, DeploymentModeCluster).New().GetCount()) + for _, g := range AllServerGroups { assert.Equal(t, 0, len(def(ServerGroupSpec{}, g, true, DeploymentModeSingle).Args)) assert.Equal(t, "", def(ServerGroupSpec{}, g, true, DeploymentModeSingle).New().GetStorageClassName()) diff --git a/pkg/apis/deployment/v2alpha1/server_group_test.go b/pkg/apis/deployment/v2alpha1/server_group_test.go index 03eae5314..c9bb251e0 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_test.go +++ b/pkg/apis/deployment/v2alpha1/server_group_test.go @@ -33,6 +33,7 @@ func TestServerGroupAsRole(t *testing.T) { assert.Equal(t, "coordinator", ServerGroupCoordinators.AsRole()) assert.Equal(t, "syncmaster", ServerGroupSyncMasters.AsRole()) assert.Equal(t, "syncworker", ServerGroupSyncWorkers.AsRole()) + assert.Equal(t, "gateways", ServerGroupGateways.AsRole()) } func TestServerGroupAsRoleAbbreviated(t *testing.T) { @@ -42,6 +43,7 @@ func TestServerGroupAsRoleAbbreviated(t *testing.T) { assert.Equal(t, "crdn", ServerGroupCoordinators.AsRoleAbbreviated()) assert.Equal(t, "syma", ServerGroupSyncMasters.AsRoleAbbreviated()) assert.Equal(t, "sywo", ServerGroupSyncWorkers.AsRoleAbbreviated()) + assert.Equal(t, "gway", ServerGroupGateways.AsRoleAbbreviated()) } func TestServerGroupIsArangod(t *testing.T) { @@ -51,6 +53,7 @@ func TestServerGroupIsArangod(t *testing.T) { assert.True(t, ServerGroupCoordinators.IsArangod()) assert.False(t, ServerGroupSyncMasters.IsArangod()) assert.False(t, ServerGroupSyncWorkers.IsArangod()) + assert.False(t, ServerGroupGateways.IsArangod()) } func TestServerGroupIsArangosync(t *testing.T) { @@ -60,6 +63,7 @@ func TestServerGroupIsArangosync(t *testing.T) { assert.False(t, ServerGroupCoordinators.IsArangosync()) assert.True(t, ServerGroupSyncMasters.IsArangosync()) assert.True(t, ServerGroupSyncWorkers.IsArangosync()) + assert.False(t, ServerGroupGateways.IsArangosync()) } func TestServerGroupType(t *testing.T) { @@ -71,4 +75,6 @@ func TestServerGroupType(t *testing.T) { assert.Equal(t, ServerGroupTypeArangoD, ServerGroupCoordinators.Type()) assert.Equal(t, ServerGroupTypeArangoSync, ServerGroupSyncMasters.Type()) assert.Equal(t, ServerGroupTypeArangoSync, ServerGroupSyncWorkers.Type()) + assert.Equal(t, ServerGroupTypeGateway, ServerGroupGateways.Type()) + } diff --git a/pkg/apis/deployment/v2alpha1/server_group_type.go b/pkg/apis/deployment/v2alpha1/server_group_type.go index 4b7c6c559..22088eab4 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_type.go +++ b/pkg/apis/deployment/v2alpha1/server_group_type.go @@ -27,4 +27,5 @@ const ( ServerGroupTypeArangoD ServerGroupTypeArangoSync ServerGroupTypeID + ServerGroupTypeGateway ) diff --git a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go index d68e718fe..1e7d72901 100644 --- a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go @@ -1101,6 +1101,11 @@ func (in *DeploymentSpec) DeepCopyInto(out *DeploymentSpec) { in.Coordinators.DeepCopyInto(&out.Coordinators) in.SyncMasters.DeepCopyInto(&out.SyncMasters) in.SyncWorkers.DeepCopyInto(&out.SyncWorkers) + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = new(ServerGroupSpec) + (*in).DeepCopyInto(*out) + } if in.MemberPropagationMode != nil { in, out := &in.MemberPropagationMode, &out.MemberPropagationMode *out = new(DeploymentMemberPropagationMode) @@ -1148,6 +1153,11 @@ func (in *DeploymentSpec) DeepCopyInto(out *DeploymentSpec) { *out = new(string) **out = **in } + if in.Gateway != nil { + in, out := &in.Gateway, &out.Gateway + *out = new(DeploymentSpecGateway) + (*in).DeepCopyInto(*out) + } return } @@ -1161,6 +1171,27 @@ func (in *DeploymentSpec) DeepCopy() *DeploymentSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentSpecGateway) DeepCopyInto(out *DeploymentSpecGateway) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentSpecGateway. +func (in *DeploymentSpecGateway) DeepCopy() *DeploymentSpecGateway { + if in == nil { + return nil + } + out := new(DeploymentSpecGateway) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeploymentStatus) DeepCopyInto(out *DeploymentStatus) { *out = *in @@ -1291,6 +1322,11 @@ func (in *DeploymentStatus) DeepCopyInto(out *DeploymentStatus) { *out = new(ServerGroupStatus) (*in).DeepCopyInto(*out) } + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = new(ServerGroupStatus) + (*in).DeepCopyInto(*out) + } return } @@ -1521,6 +1557,13 @@ func (in *DeploymentStatusMembers) DeepCopyInto(out *DeploymentStatusMembers) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Gateways != nil { + in, out := &in.Gateways, &out.Gateways + *out = make(MemberStatusList, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/pkg/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index c5fa1403a..609150ca6 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -6564,8 +6564,14 @@ v1: foxx.queues: type: boolean type: object - id: - description: ServerIDGroupSpec contains the specification for Image Discovery image. + gateway: + description: Gateway defined main Gateway configuration. + properties: + enabled: + type: boolean + type: object + gateways: + description: Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -6695,6 +6701,28 @@ v1: type: object type: array type: object + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations + type: string antiAffinity: description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: @@ -6828,123 +6856,3725 @@ v1: items: type: string type: array + count: + description: |- + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer entrypoint: description: Entrypoint overrides container executable type: string - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. properties: - preferredDuringSchedulingIgnoredDuringExecution: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + type: object + exporterPort: + description: ExporterPort define Port used by exporter + format: int32 + type: integer + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered + type: string + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers items: properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - matchFields: - items: + prefix: + type: string + secretRef: properties: - key: - type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector specifies a set of selectors for nodes - type: object - priorityClassName: - description: PriorityClassName specifies a priority class name - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: + type: object + type: array + image: type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - securityContext: - description: SecurityContext specifies security context for group - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: + description: |- + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. + type: boolean + overrideDetectedTotalMemory: + description: |- + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: + type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string + type: object + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + type: object + type: array + type: object + id: + description: ServerIDGroupSpec contains the specification for Image Discovery image. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + entrypoint: + description: Entrypoint overrides container executable + type: string + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector specifies a set of selectors for nodes + type: object + priorityClassName: + description: PriorityClassName specifies a priority class name + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + securityContext: + description: SecurityContext specifies security context for group + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: ServiceAccountName specifies the name of the service account used for Pods in this group. + type: string + tolerations: + description: Tolerations specifies the tolerations added to Pods in this group. + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + image: + description: |- + Image specifies the docker image to use for all ArangoDB servers. + In a development environment this setting defaults to arangodb/arangodb:latest. + For production environments this is a required setting without a default value. + It is highly recommend to use explicit version (not latest) for production environments. + type: string + imageDiscoveryMode: + description: ImageDiscoveryMode specifies the image discovery mode. + enum: + - kubelet + - direct + type: string + imagePullPolicy: + description: ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + description: ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. + items: + type: string + type: array + labels: + additionalProperties: + type: string + description: Labels specifies the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + enum: + - disabled + - append + - replace + type: string + license: + description: License holds license settings + properties: + secretName: + description: |- + SecretName setting specifies the name of a kubernetes `Secret` that contains + the license key token used for enterprise images. This value is not used for + the Community Edition. + type: string + type: object + lifecycle: + description: Lifecycle holds lifecycle configuration settings + properties: + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + type: object + memberPropagationMode: + description: |- + MemberPropagationMode defines how changes to pod spec should be propogated. + Changes to a pod’s configuration require a restart of that pod in almost all cases. + Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. + The propagation of the configuration changes can be deferred to the next restart, either triggered manually by the user or by another operation like an upgrade. + This reduces the number of restarts for upgrading both the server and the operator from two to one. + enum: + - always + - on-restart + type: string + metrics: + description: Metrics holds metrics configuration settings + properties: + authentication: + properties: + jwtTokenSecretName: + description: JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication + type: string + type: object + enabled: + description: |- + Enabled if this is set to `true`, the operator runs a sidecar container for + every Agent, DB-Server, Coordinator and Single server. + type: boolean + extensions: + description: Extensions keeps the information about Metrics Extensions + properties: + usageMetrics: + description: UsageMetrics enables ArangoDB Usage metrics scrape. Affects only DBServers in the Cluster mode. + type: boolean + type: object + image: + description: Image used for the Metrics Sidecar + type: string + mode: + description: Mode define metrics exported mode + type: string + port: + format: int32 + type: integer + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + serviceMonitor: + properties: + enabled: + type: boolean + labels: + additionalProperties: + type: string + type: object + type: object + tls: + description: |- + TLS defines if TLS should be enabled on Metrics exporter endpoint. + This option will enable TLS only if TLS is enabled on ArangoDeployment, + otherwise `true` value will not take any effect. + type: boolean + type: object + mode: + description: Mode specifies the type of ArangoDB deployment to create. + enum: + - Cluster + - ActiveFailover + - Single + type: string + networkAttachedVolumes: + description: |- + NetworkAttachedVolumes + If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). + Furthermore, the pod will simply be redeployed on a different node, rather than cleaned and retired and replaced by a new member. + You must only set this option to true if your persistent volumes are “movable” in the sense that they can be mounted from a different k8s node, like in the case of network attached volumes. + If your persistent volumes are tied to a specific pod, you must leave this option on false. + type: boolean + rebalancer: + description: Rebalancer defines the rebalancer specification + properties: + enabled: + type: boolean + optimizers: + properties: + leader: + type: boolean + type: object + parallelMoves: + format: int32 + type: integer + readers: + properties: + count: + description: Count Enable Shard Count machanism + type: boolean + type: object + type: object + recovery: + description: Recovery specifies configuration related to cluster recovery. + properties: + autoRecover: + type: boolean + type: object + restoreEncryptionSecret: + description: RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore + type: string + restoreFrom: + description: |- + RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. + After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. + It will contain some of the following fields: + - `requestedFrom`: name of the ArangoBackup used to restore from. + - `message`: optional message explaining why the restore failed. + - `state`: state indicating if the restore was successful or not. Possible values: Restoring, Restored, RestoreFailed + If the restoreFrom key is removed from the spec, the restore key is deleted as well. + A new restore attempt is made if and only if either in the status restore is not set or if spec.restoreFrom and status.requestedFrom are different. + type: string + rocksdb: + description: RocksDB holds rocksdb-specific configuration settings + properties: + encryption: + properties: + keySecretName: + description: |- + KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. + When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. + The default value is empty. + This requires the Enterprise Edition. + The encryption key cannot be changed after the cluster has been created. + The secret specified by this setting, must have a data field named 'key' containing an encryption key that is exactly 32 bytes long. + type: string + type: object + type: object + single: + description: Single contains specification for servers running in deployment mode `Single` or `ActiveFailover`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations + type: string + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: + description: |- + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer + entrypoint: + description: Entrypoint overrides container executable + type: string + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + type: object + exporterPort: + description: ExporterPort define Port used by exporter + format: int32 + type: integer + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered + type: string + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: + description: |- + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. + type: boolean + overrideDetectedTotalMemory: + description: |- + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers type: boolean fsGroup: @@ -6953,369 +10583,2027 @@ v1: type: integer privileged: description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: + type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string + type: object + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + type: object + type: array + type: object + storageEngine: + description: StorageEngine specifies the type of storage engine used for all servers in the cluster. + enum: + - RocksDB + - MMFiles + type: string + sync: + description: Sync holds Deployment-to-Deployment synchronization configuration settings + properties: + auth: + properties: + clientCASecretName: + description: |- + ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains + a PEM encoded CA certificate used for client certificate verification + in all ArangoSync master servers. + This is a required setting when `spec.sync.enabled` is `true`. + type: string + jwtSecretName: + description: |- + JWTSecretName setting specifies the name of a kubernetes `Secret` that contains + the JWT token used for accessing all ArangoSync master servers. + When not specified, the `spec.auth.jwtSecretName` value is used. + If you specify a name of a `Secret` that does not exist, a random token is created + and stored in a `Secret` with given name. + type: string + type: object + enabled: + description: |- + Enabled setting enables/disables support for data center 2 data center + replication in the cluster. When enabled, the cluster will contain + a number of `syncmaster` & `syncworker` servers. + type: boolean + externalAccess: + properties: + accessPackageSecretNames: + description: |- + AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment + operator containing "access packages". An access package contains those `Secrets` that are needed + to access the SyncMasters of this `ArangoDeployment`. + By removing a name from this setting, the corresponding `Secret` is also deleted. + Note that to remove all access packages, leave an empty array in place (`[]`). + Completely removing the setting results in not modifying the list. + items: + type: string + type: array + advertisedEndpoint: + description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint + type: string + loadBalancerIP: + description: |- + LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. + If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature. + items: + type: string + type: array + managedServiceNames: + description: |- + ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. + It is only relevant when type of service is `managed`. + items: + type: string + type: array + masterEndpoint: + description: |- + MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. + If not set, this setting defaults to: + - If `spec.sync.externalAccess.loadBalancerIP` is set, it defaults to `https://:<8629>`. + - Otherwise it defaults to `https://:<8629>`. + items: + type: string + type: array + nodePort: + description: |- + NodePort define optional port used in case of Auto or NodePort type. + This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. + If you do not specify this setting, a random port will be chosen automatically. + format: int32 type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + type: + description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. + enum: + - Auto + - None + - LoadBalancer + - NodePort + type: string + type: object + image: + type: string + monitoring: + properties: + tokenSecretName: + description: |- + TokenSecretName setting specifies the name of a kubernetes `Secret` that contains + the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. + When not specified, no monitoring token is used. + type: string + type: object + tls: + properties: + altNames: + description: |- + AltNames setting specifies a list of alternate names that will be added to all generated + certificates. These names can be DNS names or email addresses. + The default value is empty. + items: + type: string + type: array + caSecretName: + description: |- + CASecretName setting specifies the name of a kubernetes `Secret` that contains + a standard CA certificate + private key used to sign certificates for individual + ArangoDB servers. + When no name is specified, it defaults to `-ca`. + To disable authentication, set this value to `None`. + If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created + and stored in a `Secret` with given name. + The specified `Secret`, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate + type: string + mode: + type: string + sni: properties: - localhostProfile: - type: string - type: - type: string + mapping: + additionalProperties: + items: + type: string + type: array + type: object type: object - supplementalGroups: + ttl: description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + TTL setting specifies the time to live of all generated server certificates. + When the server certificate is about to expire, it will be automatically replaced + by a new one and the affected server will be restarted. + Note: The time to live of the CA certificate (when created automatically) + will be set to 10 years. + type: string + type: object + type: object + syncmasters: + description: SyncMasters contains specification for Syncmaster pods running in deployment mode `Cluster`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations + type: string + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: items: - format: int64 - type: integer + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: ServiceAccountName specifies the name of the service account used for Pods in this group. + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: + description: |- + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer + entrypoint: + description: Entrypoint overrides container executable type: string - tolerations: - description: Tolerations specifies the tolerations added to Pods in this group. + envs: + description: Envs allow to specify additional envs in this group. items: properties: - effect: - type: string - key: - type: string - operator: + name: type: string - tolerationSeconds: - format: int64 - type: integer value: type: string type: object type: array - type: object - image: - description: |- - Image specifies the docker image to use for all ArangoDB servers. - In a development environment this setting defaults to arangodb/arangodb:latest. - For production environments this is a required setting without a default value. - It is highly recommend to use explicit version (not latest) for production environments. - type: string - imageDiscoveryMode: - description: ImageDiscoveryMode specifies the image discovery mode. - enum: - - kubelet - - direct - type: string - imagePullPolicy: - description: ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. - items: - type: string - type: array - labels: - additionalProperties: - type: string - description: Labels specifies the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - enum: - - disabled - - append - - replace - type: string - license: - description: License holds license settings - properties: - secretName: - description: |- - SecretName setting specifies the name of a kubernetes `Secret` that contains - the license key token used for enterprise images. This value is not used for - the Community Edition. - type: string - type: object - lifecycle: - description: Lifecycle holds lifecycle configuration settings - properties: - resources: - description: Resources holds resource requests & limits + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume + type: string + type: object + type: object + exporterPort: + description: ExporterPort define Port used by exporter + format: int32 + type: integer + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered + type: string + initContainers: + description: InitContainers Init containers specification properties: - claims: + containers: + description: Containers contains list of containers items: properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object name: type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - type: object - memberPropagationMode: - description: |- - MemberPropagationMode defines how changes to pod spec should be propogated. - Changes to a pod’s configuration require a restart of that pod in almost all cases. - Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. - The propagation of the configuration changes can be deferred to the next restart, either triggered manually by the user or by another operation like an upgrade. - This reduces the number of restarts for upgrading both the server and the operator from two to one. - enum: - - always - - on-restart - type: string - metrics: - description: Metrics holds metrics configuration settings - properties: - authentication: - properties: - jwtTokenSecretName: - description: JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication + mode: + description: Mode keep container replace mode type: string type: object - enabled: - description: |- - Enabled if this is set to `true`, the operator runs a sidecar container for - every Agent, DB-Server, Coordinator and Single server. - type: boolean - extensions: - description: Extensions keeps the information about Metrics Extensions - properties: - usageMetrics: - description: UsageMetrics enables ArangoDB Usage metrics scrape. Affects only DBServers in the Cluster mode. - type: boolean - type: object - image: - description: Image used for the Metrics Sidecar + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members type: string - mode: - description: Mode define metrics exported mode + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels type: string - port: + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. format: int32 type: integer - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - serviceMonitor: - properties: - enabled: - type: boolean - labels: - additionalProperties: - type: string - type: object - type: object - tls: + memoryReservation: description: |- - TLS defines if TLS should be enabled on Metrics exporter endpoint. - This option will enable TLS only if TLS is enabled on ArangoDeployment, - otherwise `true` value will not take any effect. - type: boolean - type: object - mode: - description: Mode specifies the type of ArangoDB deployment to create. - enum: - - Cluster - - ActiveFailover - - Single - type: string - networkAttachedVolumes: - description: |- - NetworkAttachedVolumes - If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). - Furthermore, the pod will simply be redeployed on a different node, rather than cleaned and retired and replaced by a new member. - You must only set this option to true if your persistent volumes are “movable” in the sense that they can be mounted from a different k8s node, like in the case of network attached volumes. - If your persistent volumes are tied to a specific pod, you must leave this option on false. - type: boolean - rebalancer: - description: Rebalancer defines the rebalancer specification - properties: - enabled: - type: boolean - optimizers: - properties: - leader: - type: boolean - type: object - parallelMoves: + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. format: int32 type: integer - readers: - properties: - count: - description: Count Enable Shard Count machanism - type: boolean - type: object - type: object - recovery: - description: Recovery specifies configuration related to cluster recovery. - properties: - autoRecover: - type: boolean - type: object - restoreEncryptionSecret: - description: RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore - type: string - restoreFrom: - description: |- - RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. - After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. - It will contain some of the following fields: - - `requestedFrom`: name of the ArangoBackup used to restore from. - - `message`: optional message explaining why the restore failed. - - `state`: state indicating if the restore was successful or not. Possible values: Restoring, Restored, RestoreFailed - If the restoreFrom key is removed from the spec, the restore key is deleted as well. - A new restore attempt is made if and only if either in the status restore is not set or if spec.restoreFrom and status.requestedFrom are different. - type: string - rocksdb: - description: RocksDB holds rocksdb-specific configuration settings - properties: - encryption: - properties: - keySecretName: - description: |- - KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. - When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. - The default value is empty. - This requires the Enterprise Edition. - The encryption key cannot be changed after the cluster has been created. - The secret specified by this setting, must have a data field named 'key' containing an encryption key that is exactly 32 bytes long. - type: string - type: object - type: object - single: - description: Single contains specification for servers running in deployment mode `Single` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - podAffinityTerm: + preference: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: + matchExpressions: items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: + properties: + key: type: string - type: object - type: object - namespaces: + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - topologyKey: - type: string type: object weight: format: int32 @@ -7323,9 +12611,9 @@ v1: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + properties: + nodeSelectorTerms: + items: properties: matchExpressions: items: @@ -7340,22 +12628,7 @@ v1: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: + matchFields: items: properties: key: @@ -7368,496 +12641,394 @@ v1: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string type: object - allowMemberRecreation: + overrideDetectedNumberOfCores: description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - annotations: - additionalProperties: - type: string + overrideDetectedTotalMemory: description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + probes: + description: Probes specifies additional behaviour for probes properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: items: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + name: type: string type: object type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: + limits: + additionalProperties: type: string - value: + type: object + requests: + additionalProperties: type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container properties: - size: - description: Size define size of the ephemeral volume + level: + type: string + role: + type: string + type: + type: string + user: type: string type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. properties: - size: - description: Size define size of the ephemeral volume + localhostProfile: + type: string + type: type: string type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object type: object - exporterPort: - description: ExporterPort define Port used by exporter + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown format: int32 type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: + valueFrom: properties: - configMapRef: + configMapKeyRef: properties: + key: + type: string name: type: string optional: type: boolean type: object - prefix: - type: string - secretRef: + fieldRef: properties: - name: + apiVersion: type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: + fieldPath: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer name: type: string - protocol: + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: type: string + optional: + type: boolean type: object - type: array - readinessProbe: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: exec: properties: @@ -7866,17 +13037,6 @@ v1: type: string type: array type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object httpGet: properties: host: @@ -7898,15 +13058,12 @@ v1: scheme: type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer + sleep: + properties: + seconds: + format: int64 + type: integer + type: object tcpSocket: properties: host: @@ -7915,102 +13072,8 @@ v1: type: string x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object type: object - startupProbe: + preStop: properties: exec: properties: @@ -8019,17 +13082,6 @@ v1: type: string type: array type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object httpGet: properties: host: @@ -8045,1567 +13097,1616 @@ v1: type: array path: type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + livenessProbe: properties: - preference: + exec: properties: - matchExpressions: + command: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + type: string type: array - matchFields: + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - weight: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: properties: - matchExpressions: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchFields: + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + type: string type: array type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: + privileged: + type: boolean + procMount: type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - limits: - additionalProperties: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - type: object - requests: - additionalProperties: + terminationMessagePolicy: type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. type: string - securityContext: + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: + type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string + type: object + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: properties: - level: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - role: + volumeAttributesClassName: type: string - type: + volumeMode: type: string - user: + volumeName: type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + status: properties: - localhostProfile: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: type: string - type: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container items: - type: string + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started + volumes: + description: Volumes define list of volumes mounted to pod items: properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object + key: + type: string + mode: + format: int32 + type: integer + path: + type: string type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: + type: array + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - name: + key: type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: + mode: + format: int32 + type: integer + path: type: string - optional: - type: boolean type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: + type: array + optional: + type: boolean + secretName: + type: string + type: object + type: object + type: array + type: object + syncworkers: + description: SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - postStart: + podAffinityTerm: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: + labelSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: + matchLabels: + additionalProperties: type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + type: object type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: + matchLabelKeys: items: type: string type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: + mismatchLabelKeys: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: items: type: string type: array + topologyKey: + type: string type: object - failureThreshold: + weight: format: int32 type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + matchLabels: + additionalProperties: + type: string + type: object type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + matchLabelKeys: items: - properties: - name: - type: string - type: object + type: string type: array - limits: - additionalProperties: + mismatchLabelKeys: + items: type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - requests: - additionalProperties: + namespaces: + items: type: string - type: object + type: array + topologyKey: + type: string type: object - restartPolicy: - type: string - securityContext: + type: array + type: object + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations + type: string + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + podAffinityTerm: properties: - add: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: items: type: string type: array - drop: + mismatchLabelKeys: items: type: string type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: items: type: string type: array + topologyKey: + type: string type: object - failureThreshold: + weight: format: int32 type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + matchLabels: + additionalProperties: + type: string + type: object type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: + matchLabelKeys: + items: type: string - subPathExpr: + type: array + mismatchLabelKeys: + items: type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: + type: array + namespaceSelector: properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + type: array + type: object + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: + description: |- + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer + entrypoint: + description: Entrypoint overrides container executable + type: string + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume type: string type: object - spec: + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: + size: + description: Size define size of the ephemeral volume + type: string + type: object + type: object + exporterPort: + description: ExporterPort define Port used by exporter + format: int32 + type: integer + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered + type: string + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - namespace: + type: array + command: + items: type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object type: object - requests: - additionalProperties: - type: string + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: properties: - key: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: type: string - operator: + type: object + httpGet: + properties: + host: type: string - values: + httpHeaders: items: - type: string + properties: + name: + type: string + value: + type: string + type: object type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: + name: + type: string + ports: items: properties: - key: + containerPort: + format: int32 + type: integer + hostIP: type: string - mode: + hostPort: format: int32 type: integer - path: + name: + type: string + protocol: type: string type: object type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: items: properties: - key: + resourceName: type: string - mode: - format: int32 - type: integer - path: + restartPolicy: type: string type: object type: array - optional: - type: boolean - secretName: + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: type: string - type: object - type: object - type: array - type: object - storageEngine: - description: StorageEngine specifies the type of storage engine used for all servers in the cluster. - enum: - - RocksDB - - MMFiles - type: string - sync: - description: Sync holds Deployment-to-Deployment synchronization configuration settings - properties: - auth: - properties: - clientCASecretName: - description: |- - ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains - a PEM encoded CA certificate used for client certificate verification - in all ArangoSync master servers. - This is a required setting when `spec.sync.enabled` is `true`. - type: string - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains - the JWT token used for accessing all ArangoSync master servers. - When not specified, the `spec.auth.jwtSecretName` value is used. - If you specify a name of a `Secret` that does not exist, a random token is created - and stored in a `Secret` with given name. - type: string - type: object - enabled: - description: |- - Enabled setting enables/disables support for data center 2 data center - replication in the cluster. When enabled, the cluster will contain - a number of `syncmaster` & `syncworker` servers. - type: boolean - externalAccess: - properties: - accessPackageSecretNames: - description: |- - AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment - operator containing "access packages". An access package contains those `Secrets` that are needed - to access the SyncMasters of this `ArangoDeployment`. - By removing a name from this setting, the corresponding `Secret` is also deleted. - Note that to remove all access packages, leave an empty array in place (`[]`). - Completely removing the setting results in not modifying the list. - items: - type: string - type: array - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint - type: string - loadBalancerIP: - description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. - type: string - loadBalancerSourceRanges: - description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. - items: - type: string - type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. - items: - type: string - type: array - masterEndpoint: - description: |- - MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. - If not set, this setting defaults to: - - If `spec.sync.externalAccess.loadBalancerIP` is set, it defaults to `https://:<8629>`. - - Otherwise it defaults to `https://:<8629>`. - items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - image: - type: string - monitoring: - properties: - tokenSecretName: - description: |- - TokenSecretName setting specifies the name of a kubernetes `Secret` that contains - the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. - When not specified, no monitoring token is used. - type: string - type: object - tls: - properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. - items: - type: string - type: array - caSecretName: - description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: - type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: - description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string - type: object - type: object - syncmasters: - description: SyncMasters contains specification for Syncmaster pods running in deployment mode `Cluster`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: properties: - labelSelector: + exec: properties: - matchExpressions: + command: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + failureThreshold: + format: int32 + type: integer + grpc: properties: - matchExpressions: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - weight: - format: int32 - type: integer + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string type: object type: array - requiredDuringSchedulingIgnoredDuringExecution: + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: items: properties: - labelSelector: + preference: properties: matchExpressions: items: @@ -9620,20 +14721,29 @@ v1: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: properties: matchExpressions: items: @@ -9648,412 +14758,452 @@ v1: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string type: object - allowMemberRecreation: + overrideDetectedNumberOfCores: description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - annotations: - additionalProperties: - type: string + overrideDetectedTotalMemory: description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + probes: + description: Probes specifies additional behaviour for probes properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: items: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + name: type: string type: object type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: + limits: + additionalProperties: type: string - value: + type: object + requests: + additionalProperties: type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container properties: - size: - description: Size define size of the ephemeral volume + level: + type: string + role: + type: string + type: + type: string + user: type: string type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. properties: - size: - description: Size define size of the ephemeral volume + localhostProfile: + type: string + type: type: string type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object type: object - exporterPort: - description: ExporterPort define Port used by exporter + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown format: int32 type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: + valueFrom: properties: - configMapRef: + configMapKeyRef: properties: + key: + type: string name: type: string optional: type: boolean type: object - prefix: - type: string - secretRef: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: properties: + key: + type: string name: type: string optional: type: boolean type: object type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: - postStart: + exec: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object + command: + items: + type: string + type: array type: object - preStop: + httpGet: properties: - exec: - properties: - command: - items: + host: + type: string + httpHeaders: + items: + properties: + name: type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true type: object type: object - livenessProbe: + preStop: properties: exec: properties: @@ -10062,17 +15212,6 @@ v1: type: string type: array type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object httpGet: properties: host: @@ -10094,15 +15233,12 @@ v1: scheme: type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer + sleep: + properties: + seconds: + format: int64 + type: integer + type: object tcpSocket: properties: host: @@ -10111,363 +15247,851 @@ v1: type: string x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 type: integer - timeoutSeconds: + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: format: int32 type: integer + service: + type: string type: object - name: - type: string - ports: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: items: properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer name: type: string - protocol: + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: type: string - type: object - type: array - readinessProbe: + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: + port: format: int32 type: integer + service: + type: string type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: + httpGet: properties: - claims: + host: + type: string + httpHeaders: items: properties: name: type: string + value: + type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string type: object - restartPolicy: - type: string - securityContext: + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: + apiVersion: type: string - readOnlyRootFilesystem: + blockOwnerDeletion: type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: + controller: type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object + kind: + type: string + name: + type: string + uid: + type: string type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - port: - format: int32 - type: integer - service: + key: type: string - type: object - httpGet: - properties: - host: + operator: type: string - httpHeaders: + values: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: type: string - terminationMessagePolicy: + type: array + allocatedResourceStatuses: + additionalProperties: type: string - tty: - type: boolean - volumeDevices: + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - devicePath: + key: type: string - name: + mode: + format: int32 + type: integer + path: type: string type: object type: array - volumeMounts: + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: + key: type: string - subPathExpr: + mode: + format: int32 + type: integer + path: type: string type: object type: array - workingDir: + optional: + type: boolean + secretName: type: string type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: + type: object + type: array + type: object + timeouts: + description: Timeouts object allows to configure various time-outs + properties: + actions: additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. + type: object + description: Actions keep map of the actions timeouts. type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + maintenanceGracePeriod: + description: MaintenanceGracePeriod action timeout + type: object + type: object + timezone: + description: |- + Timezone if specified, will set a timezone for deployment. + Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` + type: string + tls: + description: TLS holds TLS configuration settings + properties: + altNames: + description: |- + AltNames setting specifies a list of alternate names that will be added to all generated + certificates. These names can be DNS names or email addresses. + The default value is empty. items: type: string type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels + caSecretName: + description: |- + CASecretName setting specifies the name of a kubernetes `Secret` that contains + a standard CA certificate + private key used to sign certificates for individual + ArangoDB servers. + When no name is specified, it defaults to `-ca`. + To disable authentication, set this value to `None`. + If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created + and stored in a `Secret` with given name. + The specified `Secret`, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: + mode: + type: string + sni: + properties: + mapping: + additionalProperties: + items: + type: string + type: array + type: object + type: object + ttl: description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + TTL setting specifies the time to live of all generated server certificates. + When the server certificate is about to expire, it will be automatically replaced + by a new one and the affected server will be restarted. + Note: The time to live of the CA certificate (when created automatically) + will be set to 10 years. + type: string + type: object + topology: + description: Topology define topology adjustment details, Enterprise only + properties: + enabled: + type: boolean + label: + type: string + zones: format: int32 type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + type: object + upgrade: + description: Upgrade allows to configure upgrade-related options + properties: + autoUpgrade: + description: AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) + type: boolean + debugLog: + description: |- + DebugLog flag specifies if containers running upgrade process should print more debugging information. + This applies only to init containers. + type: boolean + type: object + type: object + status: + description: Object with preserved fields for backward compatibility + type: object + x-kubernetes-preserve-unknown-fields: true + type: object +v1alpha: + openAPIV3Schema: + properties: + spec: + properties: + ClusterDomain: + description: |- + ClusterDomain define domain used in the kubernetes cluster. + Required only of domain is not set to default (cluster.local) + type: string + agents: + description: Agents contains specification for Agency pods running in deployment mode `Cluster` or `ActiveFailover`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - preference: + podAffinityTerm: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + matchLabelKeys: + items: + type: string type: array - matchFields: + mismatchLabelKeys: items: - properties: - key: - type: string - operator: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + namespaces: + items: + type: string type: array + topologyKey: + type: string type: object weight: format: int32 @@ -10475,9 +16099,9 @@ v1: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + items: + properties: + labelSelector: properties: matchExpressions: items: @@ -10492,7 +16116,22 @@ v1: type: array type: object type: array - matchFields: + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: items: properties: key: @@ -10505,394 +16144,412 @@ v1: type: array type: object type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: + allowMemberRecreation: description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations type: string - resources: - description: Resources holds resource requests & limits + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: - claims: + preferredDuringSchedulingIgnoredDuringExecution: items: properties: - name: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer + entrypoint: + description: Entrypoint overrides container executable + type: string + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - level: - type: string - role: - type: string - type: - type: string - user: + size: + description: Size define size of the ephemeral volume type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - localhostProfile: - type: string - type: + size: + description: Size define size of the ephemeral volume type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + exporterPort: + description: ExporterPort define Port used by exporter format: int32 type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - value: + type: array + command: + items: type: string - valueFrom: + type: array + env: + items: properties: - configMapKeyRef: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: + prefix: + type: string + secretRef: properties: - key: - type: string name: type: string optional: type: boolean type: object type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: properties: exec: properties: @@ -10901,6 +16558,17 @@ v1: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -10922,12 +16590,15 @@ v1: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -10936,8 +16607,33 @@ v1: type: string x-kubernetes-int-or-string: true type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - preStop: + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: exec: properties: @@ -10946,6 +16642,17 @@ v1: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -10967,12 +16674,15 @@ v1: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -10980,1624 +16690,1777 @@ v1: port: type: string x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: items: properties: - name: + resourceName: + type: string + restartPolicy: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + resources: properties: - add: + claims: items: - type: string + properties: + name: + type: string + type: object type: array - drop: - items: + limits: + additionalProperties: type: string - type: array + type: object + requests: + additionalProperties: + type: string + type: object type: object - privileged: - type: boolean - procMount: + restartPolicy: type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: + securityContext: properties: - localhostProfile: - type: string - type: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object type: object - windowsOptions: + startupProbe: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string type: object - startupProbe: + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - exec: + preference: properties: - command: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: + matchFields: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: + weight: format: int32 type: integer - tcpSocket: + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - volumeClaimTemplate: + overrideDetectedTotalMemory: description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes properties: - apiVersion: - type: string - kind: - type: string - metadata: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 type: integer - labels: - additionalProperties: + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string + type: object + type: array + limits: + additionalProperties: + type: string type: object - spec: + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: + level: type: string - volumeAttributesClassName: + role: type: string - volumeMode: + type: type: string - volumeName: + user: type: string type: object - status: + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: + localhostProfile: type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: + type: type: string type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object + type: string type: array - volumes: - description: Volumes define list of volumes mounted to pod + sidecars: + description: Sidecars specifies a list of additional containers to be started items: properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: type: string + optional: + type: boolean type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - syncworkers: - description: SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - podAffinityTerm: + postStart: properties: - labelSelector: + exec: properties: - matchExpressions: + command: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string + sleep: + properties: + seconds: + format: int64 + type: integer type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true type: object type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: + preStop: properties: - labelSelector: + exec: properties: - matchExpressions: + command: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: items: type: string type: array - topologyKey: - type: string type: object - weight: + failureThreshold: format: int32 type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + grpc: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object + port: + format: int32 + type: integer + service: + type: string type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: name: type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: - args: - items: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: type: string - type: array - command: - items: + restartPolicy: type: string - type: array - env: + type: object + type: array + resources: + properties: + claims: items: properties: name: type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object type: object type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - lifecycle: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object + level: + type: string + role: + type: string + type: + type: string + user: + type: string type: object - livenessProbe: + seccompProfile: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: format: int32 type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string type: object - name: + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - port: - format: int32 - type: integer - service: + key: type: string - type: object - httpGet: - properties: - host: + operator: type: string - httpHeaders: + values: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string type: object - resizePolicy: + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - resourceName: + key: type: string - restartPolicy: + mode: + format: int32 + type: integer + path: type: string type: object type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: object - requests: - additionalProperties: + mode: + format: int32 + type: integer + path: type: string - type: object - type: object - restartPolicy: + type: object + type: array + optional: + type: boolean + secretName: type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: + type: object + type: object + type: array + type: object + allowUnsafeUpgrade: + description: AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed + type: boolean + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode defines annotations mode which should be use while overriding annotations. + enum: + - disabled + - append + - replace + type: string + architecture: + description: |- + Architecture defines the list of supported architectures. + First element on the list is marked as default architecture. + Possible values are: + - `amd64`: Use processors with the x86-64 architecture. + - `arm64`: Use processors with the 64-bit ARM architecture. + The setting expects a list of strings, but you should only specify a single + list item for the architecture, except when you want to migrate from one + architecture to the other. The first list item defines the new default + architecture for the deployment that you want to migrate to. + items: + type: string + type: array + auth: + description: Authentication holds authentication configuration settings + properties: + jwtSecretName: + description: |- + JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating + JWT tokens to access all ArangoDB servers. + When no name is specified, it defaults to `-jwt`. + To disable authentication, set this value to `None`. + If you specify a name of a `Secret`, that secret must have the key value in a data field named `token`. + If you specify a name of a `Secret` that does not exist, a random key is created and stored in a `Secret` with given name. + Changing secret key results in restarting of a whole cluster. + type: string + type: object + bootstrap: + description: Bootstrap contains information for cluster bootstrapping + properties: + passwordSecretNames: + additionalProperties: + type: string + description: |- + PasswordSecretNames contains a map of username to password-secret-name + This setting specifies a secret name for the credentials per specific users. + When a deployment is created the operator will setup the user accounts + according to the credentials given by the secret. If the secret doesn't exist + the operator creates a secret with a random password. + There are two magic values for the secret name: + - `None` specifies no action. This disables root password randomization. This is the default value. (Thus the root password is empty - not recommended) + - `Auto` specifies automatic name generation, which is `-root-password`. + type: object + type: object + chaos: + description: ChaosSpec can be used for chaos-monkey testing of your ArangoDeployment + properties: + enabled: + description: Enabled switches the chaos monkey for a deployment on or off. + type: boolean + interval: + description: Interval is the time between events + format: int64 + type: integer + kill-pod-probability: + description: KillPodProbability is the chance of a pod being killed during an event + format: int32 + type: integer + type: object + communicationMethod: + description: CommunicationMethod define communication method used in deployment + enum: + - headless + - dns + - short-dns + - headless-dns + - ip + type: string + coordinators: + description: Coordinators contains specification for Coordinator pods running in deployment mode `Cluster` or `ActiveFailover`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + labelSelector: properties: - port: - format: int32 - type: integer - service: - type: string + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - httpGet: + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string + matchLabels: + additionalProperties: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: + matchLabelKeys: items: - properties: - devicePath: - type: string - name: - type: string - type: object + type: string type: array - volumeMounts: + mismatchLabelKeys: items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - type: object + type: object + type: object + namespaces: + items: + type: string type: array - workingDir: + topologyKey: type: string type: object type: array - mode: - description: Mode keep container replace mode - type: string type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: additionalProperties: type: string - description: Labels specified the labels added to Pods in this group. + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored items: type: string type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - preference: + podAffinityTerm: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + matchLabelKeys: + items: + type: string type: array - matchFields: + mismatchLabelKeys: items: - properties: - key: - type: string - operator: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + namespaces: + items: + type: string type: array + topologyKey: + type: string type: object weight: format: int32 @@ -12605,9 +18468,9 @@ v1: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + items: + properties: + labelSelector: properties: matchExpressions: items: @@ -12622,7 +18485,22 @@ v1: type: array type: object type: array - matchFields: + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: items: properties: key: @@ -12635,1327 +18513,676 @@ v1: type: array type: object type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. format: int32 type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate + entrypoint: + description: Entrypoint overrides container executable type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: type: string - type: object - requests: - additionalProperties: + value: type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - level: - type: string - role: - type: string - type: - type: string - user: + size: + description: Size define size of the ephemeral volume type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - localhostProfile: - type: string - type: + size: + description: Size define size of the ephemeral volume type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + exporterPort: + description: ExporterPort define Port used by exporter format: int32 type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - value: + type: array + command: + items: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: + type: array + env: + items: properties: name: type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: + value: type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + valueFrom: + properties: + configMapKeyRef: properties: + key: + type: string name: type: string - value: + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: type: string type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + resourceFieldRef: properties: - name: + containerName: type: string - value: + divisor: + type: string + resource: type: string type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: name: type: string - value: + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: type: string + optional: + type: boolean type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - command: - items: - type: string - type: array + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object type: object - failureThreshold: - format: int32 - type: integer - grpc: + livenessProbe: properties: - port: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + name: + type: string + ports: items: properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + containerPort: + format: int32 + type: integer + hostIP: type: string - type: array - drop: - items: + hostPort: + format: int32 + type: integer + name: type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + protocol: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + type: object + type: array + readinessProbe: properties: - port: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer - service: - type: string type: object - httpGet: + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: properties: - host: - type: string - httpHeaders: + claims: items: properties: name: type: string - value: - type: string type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: + limits: + additionalProperties: + type: string type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: properties: - apiVersion: - type: string - blockOwnerDeletion: + allowPrivilegeEscalation: type: boolean - controller: + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: + procMount: type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - key: + level: type: string - operator: + role: type: string - values: + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: items: type: string type: array type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: properties: - key: + devicePath: type: string - mode: - format: int32 - type: integer - path: + name: type: string type: object type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: + volumeMounts: items: properties: - key: + mountPath: type: string - mode: - format: int32 - type: integer - path: + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string type: object type: array - optional: - type: boolean - secretName: + workingDir: type: string type: object - type: object - type: array - type: object - timeouts: - description: Timeouts object allows to configure various time-outs - properties: - actions: - additionalProperties: - type: object - description: Actions keep map of the actions timeouts. + type: array + mode: + description: Mode keep container replace mode + type: string type: object - maintenanceGracePeriod: - description: MaintenanceGracePeriod action timeout + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. type: object - type: object - timezone: - description: |- - Timezone if specified, will set a timezone for deployment. - Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` - type: string - tls: - description: TLS holds TLS configuration settings - properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored items: type: string type: array - caSecretName: - description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: - type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: - description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string - type: object - topology: - description: Topology define topology adjustment details, Enterprise only - properties: - enabled: - type: boolean - label: + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels type: string - zones: + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. format: int32 type: integer - type: object - upgrade: - description: Upgrade allows to configure upgrade-related options - properties: - autoUpgrade: - description: AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) - type: boolean - debugLog: + memoryReservation: description: |- - DebugLog flag specifies if containers running upgrade process should print more debugging information. - This applies only to init containers. - type: boolean - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object -v1alpha: - openAPIV3Schema: - properties: - spec: - properties: - ClusterDomain: - description: |- - ClusterDomain define domain used in the kubernetes cluster. - Required only of domain is not set to default (cluster.local) - type: string - agents: - description: Agents contains specification for Agency pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - mismatchLabelKeys: + matchFields: items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: + properties: + key: type: string - type: object - type: object - namespaces: - items: - type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - topologyKey: - type: string type: object weight: format: int32 @@ -13963,9 +19190,9 @@ v1alpha: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + properties: + nodeSelectorTerms: + items: properties: matchExpressions: items: @@ -13980,22 +19207,7 @@ v1alpha: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: + matchFields: items: properties: key: @@ -14008,412 +19220,394 @@ v1alpha: type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string type: object - allowMemberRecreation: + overrideDetectedNumberOfCores: description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - annotations: - additionalProperties: - type: string + overrideDetectedTotalMemory: description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + resources: + description: Resources holds resource requests & limits properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + claims: items: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: + name: type: string type: object type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: + limits: + additionalProperties: type: string - value: + type: object + requests: + additionalProperties: type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container properties: - size: - description: Size define size of the ephemeral volume + level: + type: string + role: + type: string + type: + type: string + user: type: string type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. properties: - size: - description: Size define size of the ephemeral volume + localhostProfile: + type: string + type: type: string type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object type: object - exporterPort: - description: ExporterPort define Port used by exporter + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown format: int32 type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: type: string - type: array - command: - items: + value: type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: + valueFrom: properties: - configMapRef: + configMapKeyRef: properties: + key: + type: string name: type: string optional: type: boolean type: object - prefix: - type: string - secretRef: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: properties: + key: + type: string name: type: string optional: type: boolean type: object type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: properties: exec: properties: @@ -14422,17 +19616,6 @@ v1alpha: type: string type: array type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object httpGet: properties: host: @@ -14454,15 +19637,12 @@ v1alpha: scheme: type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer + sleep: + properties: + seconds: + format: int64 + type: integer + type: object tcpSocket: properties: host: @@ -14471,33 +19651,8 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: + preStop: properties: exec: properties: @@ -14506,17 +19661,6 @@ v1alpha: type: string type: array type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object httpGet: properties: host: @@ -14538,15 +19682,12 @@ v1alpha: scheme: type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer + sleep: + properties: + seconds: + format: int64 + type: integer + type: object tcpSocket: properties: host: @@ -14555,279 +19696,758 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 type: integer - timeoutSeconds: + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: format: int32 type: integer + service: + type: string type: object - resizePolicy: + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: items: properties: - resourceName: - type: string - restartPolicy: + name: type: string type: object type: array - resources: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - claims: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: name: type: string + value: + type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - restartPolicy: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: type: string - securityContext: + type: object + managedFields: + items: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: type: object - privileged: - type: boolean - procMount: + manager: type: string - readOnlyRootFilesystem: + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string + type: object + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: + controller: type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object + kind: + type: string + name: + type: string + uid: + type: string type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - port: - format: int32 - type: integer - service: + key: type: string - type: object - httpGet: - properties: - host: + operator: type: string - httpHeaders: + values: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: type: string - terminationMessagePolicy: + type: array + allocatedResourceStatuses: + additionalProperties: type: string - tty: - type: boolean - volumeDevices: + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - devicePath: + key: type: string - name: + mode: + format: int32 + type: integer + path: type: string type: object type: array - volumeMounts: + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: + key: type: string - subPathExpr: + mode: + format: int32 + type: integer + path: type: string type: object type: array - workingDir: + optional: + type: boolean + secretName: type: string type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string + type: object type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + type: object + database: + description: Database holds information about database state, like maintenance mode + properties: + maintenance: + description: Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled + type: boolean + type: object + dbservers: + description: DBServers contains specification for DBServer pods running in deployment mode `Cluster` or `ActiveFailover`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - preference: + podAffinityTerm: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + matchLabelKeys: + items: + type: string type: array - matchFields: + mismatchLabelKeys: items: - properties: - key: - type: string - operator: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + namespaces: + items: + type: string type: array + topologyKey: + type: string type: object weight: format: int32 @@ -14835,9 +20455,9 @@ v1alpha: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + items: + properties: + labelSelector: properties: matchExpressions: items: @@ -14852,7 +20472,22 @@ v1alpha: type: array type: object type: array - matchFields: + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: items: properties: key: @@ -14865,394 +20500,412 @@ v1alpha: type: array type: object type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: + allowMemberRecreation: description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: + annotations: + additionalProperties: + type: string description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations type: string - resources: - description: Resources holds resource requests & limits + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: - claims: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: properties: - name: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. + format: int32 + type: integer + entrypoint: + description: Entrypoint overrides container executable + type: string + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - level: - type: string - role: - type: string - type: - type: string - user: + size: + description: Size define size of the ephemeral volume type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - localhostProfile: - type: string - type: + size: + description: Size define size of the ephemeral volume type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + exporterPort: + description: ExporterPort define Port used by exporter format: int32 type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - value: + type: array + command: + items: type: string - valueFrom: + type: array + env: + items: properties: - configMapKeyRef: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: + prefix: + type: string + secretRef: properties: - key: - type: string name: type: string optional: type: boolean type: object type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: properties: exec: properties: @@ -15261,6 +20914,17 @@ v1alpha: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -15282,12 +20946,15 @@ v1alpha: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -15296,8 +20963,33 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - preStop: + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: exec: properties: @@ -15306,6 +20998,17 @@ v1alpha: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -15327,12 +21030,15 @@ v1alpha: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -15341,1712 +21047,1763 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer - service: - type: string type: object - httpGet: + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: properties: - host: - type: string - httpHeaders: + claims: items: properties: name: type: string - value: - type: string type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: + limits: + additionalProperties: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string + type: object + requests: + additionalProperties: + type: string + type: object type: object - httpGet: + restartPolicy: + type: string + securityContext: properties: - host: - type: string - httpHeaders: - items: - properties: - name: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - value: + type: array + drop: + items: type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: + type: array + type: object + privileged: + type: boolean + procMount: type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + startupProbe: properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: properties: + devicePath: + type: string name: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string type: object - restartPolicy: - type: string - securityContext: + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + preference: properties: - add: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - drop: + matchFields: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 + weight: + format: int32 type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object type: object - startupProbe: - properties: - exec: + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: properties: - command: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: + matchFields: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - volumeClaimTemplate: + overrideDetectedTotalMemory: description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level properties: - apiVersion: + network: type: string - kind: + pid: type: string - metadata: + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string type: object - spec: + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer type: object - status: + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer type: object type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: properties: - path: - type: string - type: + name: type: string type: object - name: - description: Name of volume + type: array + limits: + additionalProperties: type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - allowUnsafeUpgrade: - description: AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed - type: boolean - annotations: - additionalProperties: - type: string - description: Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode defines annotations mode which should be use while overriding annotations. - enum: - - disabled - - append - - replace - type: string - architecture: - description: |- - Architecture defines the list of supported architectures. - First element on the list is marked as default architecture. - Possible values are: - - `amd64`: Use processors with the x86-64 architecture. - - `arm64`: Use processors with the 64-bit ARM architecture. - The setting expects a list of strings, but you should only specify a single - list item for the architecture, except when you want to migrate from one - architecture to the other. The first list item defines the new default - architecture for the deployment that you want to migrate to. - items: - type: string - type: array - auth: - description: Authentication holds authentication configuration settings - properties: - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating - JWT tokens to access all ArangoDB servers. - When no name is specified, it defaults to `-jwt`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret`, that secret must have the key value in a data field named `token`. - If you specify a name of a `Secret` that does not exist, a random key is created and stored in a `Secret` with given name. - Changing secret key results in restarting of a whole cluster. + type: object + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group type: string - type: object - bootstrap: - description: Bootstrap contains information for cluster bootstrapping - properties: - passwordSecretNames: - additionalProperties: - type: string + securityContext: description: |- - PasswordSecretNames contains a map of username to password-secret-name - This setting specifies a secret name for the credentials per specific users. - When a deployment is created the operator will setup the user accounts - according to the credentials given by the secret. If the secret doesn't exist - the operator creates a secret with a random password. - There are two magic values for the secret name: - - `None` specifies no action. This disables root password randomization. This is the default value. (Thus the root password is empty - not recommended) - - `Auto` specifies automatic name generation, which is `-root-password`. - type: object - type: object - chaos: - description: ChaosSpec can be used for chaos-monkey testing of your ArangoDeployment - properties: - enabled: - description: Enabled switches the chaos monkey for a deployment on or off. - type: boolean - interval: - description: Interval is the time between events - format: int64 - type: integer - kill-pod-probability: - description: KillPodProbability is the chance of a pod being killed during an event - format: int32 - type: integer - type: object - communicationMethod: - description: CommunicationMethod define communication method used in deployment - enum: - - headless - - dns - - short-dns - - headless-dns - - ip - type: string - coordinators: - description: Coordinators contains specification for Coordinator pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. properties: - preferredDuringSchedulingIgnoredDuringExecution: + addCapabilities: + description: AddCapabilities add new capabilities to containers items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object + type: string type: array - requiredDuringSchedulingIgnoredDuringExecution: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. items: - properties: - labelSelector: - properties: - matchExpressions: - items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. + items: + type: string + type: array + sidecars: + description: Sidecars specifies a list of additional containers to be started + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: properties: key: type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: properties: key: type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - matchLabels: - additionalProperties: + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: type: string - type: object - type: object - namespaces: - items: + optional: + type: boolean + type: object + prefix: type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - podAffinityTerm: + postStart: properties: - labelSelector: + exec: properties: - matchExpressions: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: items: type: string type: array - topologyKey: - type: string type: object - weight: + failureThreshold: format: int32 type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + grpc: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object + port: + format: int32 + type: integer + service: + type: string type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: name: type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: - args: - items: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: type: string - type: array - command: - items: + restartPolicy: type: string - type: array - env: + type: object + type: array + resources: + properties: + claims: items: properties: name: type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object type: object type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string type: object - livenessProbe: + seccompProfile: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: format: int32 type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string type: object - name: + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - port: - format: int32 - type: integer - service: + key: type: string - type: object - httpGet: - properties: - host: + operator: type: string - httpHeaders: + values: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string type: object - resizePolicy: + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - resourceName: + key: type: string - restartPolicy: + mode: + format: int32 + type: integer + path: type: string type: object type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: object - requests: - additionalProperties: + mode: + format: int32 + type: integer + path: type: string - type: object - type: object - restartPolicy: + type: object + type: array + optional: + type: boolean + secretName: type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: + type: object + type: object + type: array + type: object + disableIPv6: + description: |- + DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. + This setting cannot be changed after the deployment has been created. + type: boolean + downtimeAllowed: + description: |- + DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. + When this setting is set to false, no automatic action that may result in downtime is allowed. + If the need for such an action is detected, an event is added to the ArangoDeployment. + Once this setting is set to true, the automatic action is executed. + Operations that may result in downtime are: + - Rotating TLS CA certificate + Note: It is still possible that there is some downtime when the Kubernetes cluster is down, or in a bad state, irrespective of the value of this setting. + type: boolean + environment: + description: Environment setting specifies the type of environment in which the deployment is created. + enum: + - Development + - Production + type: string + externalAccess: + description: ExternalAccess holds configuration for the external access provided for the deployment. + properties: + advertisedEndpoint: + description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint + type: string + loadBalancerIP: + description: |- + LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. + If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature. + items: + type: string + type: array + managedServiceNames: + description: |- + ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. + It is only relevant when type of service is `managed`. + items: + type: string + type: array + nodePort: + description: |- + NodePort define optional port used in case of Auto or NodePort type. + This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. + If you do not specify this setting, a random port will be chosen automatically. + format: int32 + type: integer + type: + description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. + enum: + - Auto + - None + - LoadBalancer + - NodePort + type: string + type: object + features: + description: Features allows to configure feature flags + properties: + foxx.queues: + type: boolean + type: object + gateway: + description: Gateway defined main Gateway configuration. + properties: + enabled: + type: boolean + type: object + gateways: + description: Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - exec: + labelSelector: properties: - command: + matchExpressions: items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - httpGet: + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string + matchLabels: + additionalProperties: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: + matchLabelKeys: items: - properties: - devicePath: - type: string - name: - type: string - type: object + type: string type: array - volumeMounts: + mismatchLabelKeys: items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - type: object + type: object + type: object + namespaces: + items: + type: string type: array - workingDir: + topologyKey: type: string type: object type: array - mode: - description: Mode keep container replace mode - type: string type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: + allowMemberRecreation: + description: |- + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: additionalProperties: type: string - description: Labels specified the labels added to Pods in this group. + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored items: type: string type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - preference: + podAffinityTerm: properties: - matchExpressions: - items: - properties: - key: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - operator: + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: + type: object + type: object + namespaces: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + type: string type: array + topologyKey: + type: string type: object weight: format: int32 @@ -17054,9 +22811,9 @@ v1alpha: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + items: + properties: + labelSelector: properties: matchExpressions: items: @@ -17071,7 +22828,22 @@ v1alpha: type: array type: object type: array - matchFields: + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: items: properties: key: @@ -17084,439 +22856,499 @@ v1alpha: type: array type: object type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. format: int32 type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate + entrypoint: + description: Entrypoint overrides container executable type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: + envs: + description: Envs allow to specify additional envs in this group. + items: + properties: + name: type: string - type: object - requests: - additionalProperties: + value: type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - level: - type: string - role: - type: string - type: - type: string - user: + size: + description: Size define size of the ephemeral volume type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. properties: - localhostProfile: - type: string - type: + size: + description: Size define size of the ephemeral volume type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + exporterPort: + description: ExporterPort define Port used by exporter format: int32 type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - value: + type: array + command: + items: type: string - valueFrom: + type: array + env: + items: properties: - configMapKeyRef: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean type: object - fieldRef: + prefix: + type: string + secretRef: properties: - apiVersion: - type: string - fieldPath: + name: type: string + optional: + type: boolean type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: type: string - resource: + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: + items: type: string - type: object - secretKeyRef: + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: properties: - key: - type: string name: type: string - optional: - type: boolean type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: + type: array + limits: + additionalProperties: type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: + type: object + requests: + additionalProperties: type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: object + type: object + restartPolicy: + type: string + securityContext: properties: - exec: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - command: + add: + items: + type: string + type: array + drop: items: type: string type: array type: object - httpGet: + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - host: + level: type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: + role: type: string - port: + type: type: string - x-kubernetes-int-or-string: true - scheme: + user: type: string type: object - sleep: + seccompProfile: properties: - seconds: - format: int64 - type: integer + localhostProfile: + type: string + type: + type: string type: object - tcpSocket: + windowsOptions: properties: - host: + gmsaCredentialSpec: type: string - port: + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: type: string - x-kubernetes-int-or-string: true type: object type: object - preStop: + startupProbe: properties: exec: properties: @@ -17525,6 +23357,17 @@ v1alpha: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -17546,12 +23389,15 @@ v1alpha: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -17560,1630 +23406,2071 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: items: properties: + devicePath: + type: string name: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: + volumeMounts: + items: + properties: + mountPath: type: string - type: array - drop: - items: + mountPropagation: type: string - type: array - type: object - privileged: - type: boolean - procMount: + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object type: object - startupProbe: + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - exec: + preference: properties: - command: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: + matchFields: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: + weight: format: int32 type: integer - tcpSocket: + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. type: boolean - volumeClaimTemplate: + overrideDetectedTotalMemory: description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level properties: - apiVersion: + network: type: string - kind: + pid: type: string - metadata: + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 type: integer - labels: - additionalProperties: + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + type: object + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string + type: object + type: array + limits: + additionalProperties: + type: string type: object - spec: + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group + type: string + securityContext: + description: |- + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: + level: type: string - volumeAttributesClassName: + role: type: string - volumeMode: + type: type: string - volumeName: + user: type: string type: object - status: + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: + localhostProfile: type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: + type: type: string type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. + type: string + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: + description: |- + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object + type: string type: array - volumes: - description: Volumes define list of volumes mounted to pod + sidecars: + description: Sidecars specifies a list of additional containers to be started items: properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: type: string + optional: + type: boolean type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - database: - description: Database holds information about database state, like maintenance mode - properties: - maintenance: - description: Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled - type: boolean - type: object - dbservers: - description: DBServers contains specification for DBServer pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - podAffinityTerm: + postStart: properties: - labelSelector: + exec: properties: - matchExpressions: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: items: type: string type: array - topologyKey: - type: string type: object - weight: + failureThreshold: format: int32 type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + grpc: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object + port: + format: int32 + type: integer + service: + type: string type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: + properties: + exec: + properties: + command: items: type: string type: array - topologyKey: - type: string type: object - weight: + failureThreshold: format: int32 type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + grpc: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object + port: + format: int32 + type: integer + service: + type: string type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: + resizePolicy: + items: + properties: + resourceName: type: string - type: array - command: - items: + restartPolicy: type: string - type: array - env: + type: object + type: array + resources: + properties: + claims: items: properties: name: type: string - value: + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: properties: name: type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: + value: type: string - optional: - type: boolean type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: + type: string + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string type: object - livenessProbe: + type: array + name: + type: string + namespace: + type: string + ownerReferences: + items: properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: + type: string + selfLink: + type: string + uid: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: properties: - port: - format: int32 - type: integer - service: + key: type: string - type: object - httpGet: - properties: - host: + operator: type: string - httpHeaders: + values: items: - properties: - name: - type: string - value: - type: string - type: object + type: string type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string type: object - name: - type: string - ports: + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: items: properties: - containerPort: + key: + type: string + mode: format: int32 type: integer - hostIP: + path: type: string - hostPort: + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume + type: string + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: format: int32 type: integer - name: - type: string - protocol: + path: type: string type: object type: array - readinessProbe: + optional: + type: boolean + secretName: + type: string + type: object + type: object + type: array + type: object + id: + description: ServerIDGroupSpec contains the specification for Image Discovery image. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - exec: + labelSelector: properties: - command: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string + matchLabels: + additionalProperties: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer type: object - resizePolicy: + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object + type: string type: array - resources: + namespaceSelector: properties: - claims: + matchExpressions: items: properties: - name: + key: + type: string + operator: type: string + values: + items: + type: string + type: array type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: + matchLabels: additionalProperties: type: string type: object type: object - restartPolicy: + namespaces: + items: + type: string + type: array + topologyKey: type: string - securityContext: + type: object + type: array + type: object + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + labelSelector: properties: - add: - items: - type: string - type: array - drop: + matchExpressions: items: - type: string + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: + matchLabels: + additionalProperties: type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string + type: object type: object - httpGet: + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: properties: - host: - type: string - httpHeaders: + matchExpressions: items: properties: - name: + key: type: string - value: + operator: type: string + values: + items: + type: string + type: array type: object type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string + matchLabels: + additionalProperties: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: + matchLabelKeys: items: - properties: - devicePath: - type: string - name: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - type: object - type: array - volumeMounts: + type: object + type: object + namespaces: items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object + type: string type: array - workingDir: + topologyKey: + type: string + type: object + type: array + type: object + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + entrypoint: + description: Entrypoint overrides container executable + type: string + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector specifies a set of selectors for nodes + type: object + priorityClassName: + description: PriorityClassName specifies a priority class name + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + securityContext: + description: SecurityContext specifies security context for group + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: ServiceAccountName specifies the name of the service account used for Pods in this group. + type: string + tolerations: + description: Tolerations specifies the tolerations added to Pods in this group. + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + image: + description: |- + Image specifies the docker image to use for all ArangoDB servers. + In a development environment this setting defaults to arangodb/arangodb:latest. + For production environments this is a required setting without a default value. + It is highly recommend to use explicit version (not latest) for production environments. + type: string + imageDiscoveryMode: + description: ImageDiscoveryMode specifies the image discovery mode. + enum: + - kubelet + - direct + type: string + imagePullPolicy: + description: ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + description: ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. + items: + type: string + type: array + labels: + additionalProperties: + type: string + description: Labels specifies the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + enum: + - disabled + - append + - replace + type: string + license: + description: License holds license settings + properties: + secretName: + description: |- + SecretName setting specifies the name of a kubernetes `Secret` that contains + the license key token used for enterprise images. This value is not used for + the Community Edition. + type: string + type: object + lifecycle: + description: Lifecycle holds lifecycle configuration settings + properties: + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: type: string type: object type: array - mode: - description: Mode keep container replace mode + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + type: object + memberPropagationMode: + description: |- + MemberPropagationMode defines how changes to pod spec should be propogated. + Changes to a pod’s configuration require a restart of that pod in almost all cases. + Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. + The propagation of the configuration changes can be deferred to the next restart, either triggered manually by the user or by another operation like an upgrade. + This reduces the number of restarts for upgrading both the server and the operator from two to one. + enum: + - always + - on-restart + type: string + metrics: + description: Metrics holds metrics configuration settings + properties: + authentication: + properties: + jwtTokenSecretName: + description: JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication type: string type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. + enabled: + description: |- + Enabled if this is set to `true`, the operator runs a sidecar container for + every Agent, DB-Server, Coordinator and Single server. + type: boolean + extensions: + description: Extensions keeps the information about Metrics Extensions + properties: + usageMetrics: + description: UsageMetrics enables ArangoDB Usage metrics scrape. Affects only DBServers in the Cluster mode. + type: boolean type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels + image: + description: Image used for the Metrics Sidecar type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + mode: + description: Mode define metrics exported mode + type: string + port: format: int32 type: integer - memoryReservation: + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: + type: string + type: object + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + serviceMonitor: + properties: + enabled: + type: boolean + labels: + additionalProperties: + type: string + type: object + type: object + tls: description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + TLS defines if TLS should be enabled on Metrics exporter endpoint. + This option will enable TLS only if TLS is enabled on ArangoDeployment, + otherwise `true` value will not take any effect. + type: boolean + type: object + mode: + description: Mode specifies the type of ArangoDB deployment to create. + enum: + - Cluster + - ActiveFailover + - Single + type: string + networkAttachedVolumes: + description: |- + NetworkAttachedVolumes + If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). + Furthermore, the pod will simply be redeployed on a different node, rather than cleaned and retired and replaced by a new member. + You must only set this option to true if your persistent volumes are “movable” in the sense that they can be mounted from a different k8s node, like in the case of network attached volumes. + If your persistent volumes are tied to a specific pod, you must leave this option on false. + type: boolean + rebalancer: + description: Rebalancer defines the rebalancer specification + properties: + enabled: + type: boolean + optimizers: + properties: + leader: + type: boolean + type: object + parallelMoves: format: int32 type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + readers: + properties: + count: + description: Count Enable Shard Count machanism + type: boolean + type: object + type: object + recovery: + description: Recovery specifies configuration related to cluster recovery. + properties: + autoRecover: + type: boolean + type: object + restoreEncryptionSecret: + description: RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore + type: string + restoreFrom: + description: |- + RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. + After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. + It will contain some of the following fields: + - `requestedFrom`: name of the ArangoBackup used to restore from. + - `message`: optional message explaining why the restore failed. + - `state`: state indicating if the restore was successful or not. Possible values: Restoring, Restored, RestoreFailed + If the restoreFrom key is removed from the spec, the restore key is deleted as well. + A new restore attempt is made if and only if either in the status restore is not set or if spec.restoreFrom and status.requestedFrom are different. + type: string + rocksdb: + description: RocksDB holds rocksdb-specific configuration settings + properties: + encryption: + properties: + keySecretName: + description: |- + KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. + When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. + The default value is empty. + This requires the Enterprise Edition. + The encryption key cannot be changed after the cluster has been created. + The secret specified by this setting, must have a data field named 'key' containing an encryption key that is exactly 32 bytes long. + type: string + type: object + type: object + single: + description: Single contains specification for servers running in deployment mode `Single` or `ActiveFailover`. + properties: + affinity: + description: Affinity specified additional affinity settings in ArangoDB Pod definitions properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: - preference: + podAffinityTerm: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string type: array - matchFields: + mismatchLabelKeys: items: - properties: - key: - type: string - operator: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - type: object + type: object + type: object + namespaces: + items: + type: string type: array + topologyKey: + type: string type: object weight: format: int32 @@ -19191,424 +25478,457 @@ v1alpha: type: object type: array requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + items: + properties: + labelSelector: properties: matchExpressions: items: properties: key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: + allowMemberRecreation: description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. + AllowMemberRecreation allows to recreate member. + This setting changes the member recreation logic based on group: + - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) + - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. + type: boolean + annotations: + additionalProperties: + type: string + description: |- + Annotations specified the annotations added to Pods in this group. + Annotations are merged with `spec.annotations`. + type: object + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode Define annotations mode which should be use while overriding annotations + type: string + antiAffinity: + description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers + preferredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object + weight: + format: int32 + type: integer + type: object type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + requiredDuringSchedulingIgnoredDuringExecution: items: - format: int64 - type: integer + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + mismatchLabelKeys: + items: + type: string + type: array + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + type: object type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object type: object - serviceAccountName: + args: + description: Args setting specifies additional command-line arguments passed to all servers of this group. + items: + type: string + type: array + count: description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + Count setting specifies the number of servers to start for the given group. + For the Agent group, this value must be a positive, odd number. + The default value is `3` for all groups except `single` (there the default is `1` + for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). + For the `syncworkers` group, it is highly recommended to use the same number + as for the `dbservers` group. format: int32 type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator + entrypoint: + description: Entrypoint overrides container executable type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started + envs: + description: Envs allow to specify additional envs in this group. items: properties: - args: - items: + name: + type: string + value: + type: string + type: object + type: array + ephemeralVolumes: + description: EphemeralVolumes keeps information about ephemeral volumes. + properties: + apps: + description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume type: string - type: array - command: - items: + type: object + temp: + description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. + properties: + size: + description: Size define size of the ephemeral volume type: string - type: array - env: - items: - properties: - name: + type: object + type: object + exporterPort: + description: ExporterPort define Port used by exporter + format: int32 + type: integer + extendedRotationCheck: + description: ExtendedRotationCheck extend checks for rotation + type: boolean + externalPortEnabled: + description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members + type: boolean + indexMethod: + description: IndexMethod define group Indexing method + enum: + - random + - ordered + type: string + initContainers: + description: InitContainers Init containers specification + properties: + containers: + description: Containers contains list of containers + items: + properties: + args: + items: type: string - value: + type: array + command: + items: type: string - valueFrom: + type: array + env: + items: properties: - configMapKeyRef: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + type: object + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: properties: - key: - type: string name: type: string optional: type: boolean type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: + prefix: + type: string + secretRef: properties: - key: - type: string name: type: string optional: type: boolean type: object type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: properties: exec: properties: @@ -19617,6 +25937,17 @@ v1alpha: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -19638,12 +25969,15 @@ v1alpha: scheme: type: string type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer tcpSocket: properties: host: @@ -19652,8 +25986,33 @@ v1alpha: type: string x-kubernetes-int-or-string: true type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - preStop: + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: exec: properties: @@ -19662,6 +26021,17 @@ v1alpha: type: string type: array type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object httpGet: properties: host: @@ -19670,1472 +26040,1654 @@ v1alpha: items: properties: name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: + resizePolicy: items: properties: - name: + resourceName: + type: string + restartPolicy: type: string type: object type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: + resources: properties: - add: + claims: items: - type: string + properties: + name: + type: string + type: object type: array - drop: - items: + limits: + additionalProperties: type: string - type: array + type: object + requests: + additionalProperties: + type: string + type: object type: object - privileged: - type: boolean - procMount: + restartPolicy: type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: + securityContext: properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: + allowPrivilegeEscalation: type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: + capabilities: + properties: + add: + items: type: string - value: + type: array + drop: + items: type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: + type: array + type: object + privileged: + type: boolean + procMount: type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: + startupProbe: properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: + terminationMessagePolicy: type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: type: string - type: object - managedFields: - items: + type: object + type: array + mode: + description: Mode keep container replace mode + type: string + type: object + internalPort: + description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + format: int32 + type: integer + internalPortProtocol: + description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members + type: string + labels: + additionalProperties: + type: string + description: Labels specified the labels added to Pods in this group. + type: object + labelsIgnoreList: + description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored + items: + type: string + type: array + labelsMode: + description: LabelsMode Define labels mode which should be use while overriding labels + type: string + maxCount: + description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. + format: int32 + type: integer + memoryReservation: + description: |- + MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. + If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. + Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. + format: int64 + type: integer + minCount: + description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. + format: int32 + type: integer + nodeAffinity: + description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: + weight: + format: int32 + type: integer + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: items: properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array type: object type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. + type: object + numactl: + description: Numactl define Numactl options passed to the process + properties: + args: + description: Args define list of the numactl process + items: + type: string + type: array + enabled: + description: Enabled define if numactl should be enabled + type: boolean + path: + description: Path define numactl path within the container + type: string + type: object + overrideDetectedNumberOfCores: + description: |- + OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. + If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. + type: boolean + overrideDetectedTotalMemory: + description: |- + OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. + If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. + type: boolean + podModes: + description: PodModes define additional modes enabled on the Pod level + properties: + network: + type: string + pid: + type: string + type: object + port: + description: Port define Port used by member + format: int32 + type: integer + priorityClassName: + description: |- + PriorityClassName specifies a priority class name + Will be forwarded to the pod spec. + type: string + probes: + description: Probes specifies additional behaviour for probes + properties: + ReadinessProbeDisabled: + description: OldReadinessProbeDisabled if true readinessProbes are disabled + type: boolean + livenessProbeDisabled: + description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group + type: boolean + livenessProbeSpec: + description: LivenessProbeSpec override liveness probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer type: object - status: + readinessProbeDisabled: + description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility + type: boolean + readinessProbeSpec: + description: ReadinessProbeSpec override readiness probe configuration properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer + type: object + startupProbeDisabled: + description: StartupProbeDisabled if true startupProbes are disabled + type: boolean + startupProbeSpec: + description: StartupProbeSpec override startup probe configuration + properties: + failureThreshold: + description: |- + FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. + Giving up means restarting the container. + Minimum value is 1. + format: int32 + type: integer + initialDelaySeconds: + description: |- + InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. + Minimum value is 0. + format: int32 + type: integer + periodSeconds: + description: |- + PeriodSeconds How often (in seconds) to perform the probe. + Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: |- + SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. + Minimum value is 1. + format: int32 + type: integer + timeoutSeconds: + description: |- + TimeoutSeconds specifies number of seconds after which the probe times out + Minimum value is 1. + format: int32 + type: integer type: object type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: + pvcResizeMode: + description: VolumeResizeMode specified resize mode for PVCs and PVs + enum: + - runtime + - rotate + type: string + resources: + description: Resources holds resource requests & limits + properties: + claims: + items: + properties: + name: type: string type: object - type: object - type: array - type: object - disableIPv6: - description: |- - DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. - This setting cannot be changed after the deployment has been created. - type: boolean - downtimeAllowed: - description: |- - DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. - When this setting is set to false, no automatic action that may result in downtime is allowed. - If the need for such an action is detected, an event is added to the ArangoDeployment. - Once this setting is set to true, the automatic action is executed. - Operations that may result in downtime are: - - Rotating TLS CA certificate - Note: It is still possible that there is some downtime when the Kubernetes cluster is down, or in a bad state, irrespective of the value of this setting. - type: boolean - environment: - description: Environment setting specifies the type of environment in which the deployment is created. - enum: - - Development - - Production - type: string - externalAccess: - description: ExternalAccess holds configuration for the external access provided for the deployment. - properties: - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint + type: array + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + schedulerName: + description: SchedulerName define scheduler name used for group type: string - loadBalancerIP: + securityContext: description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. + SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. + This is similar (but not fully compatible) to k8s SecurityContext definition. + properties: + addCapabilities: + description: AddCapabilities add new capabilities to containers + items: + type: string + type: array + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. + type: boolean + dropAllCapabilities: + description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers + type: boolean + fsGroup: + description: FSGroup is a special supplemental group that applies to all containers in a pod. + format: int64 + type: integer + privileged: + description: |- + Privileged If true, runs container in privileged mode. Processes in privileged containers are + essentially equivalent to root on the host. + type: boolean + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. + type: boolean + runAsGroup: + description: RunAsGroup is the GID to run the entrypoint of the container process. + format: int64 + type: integer + runAsNonRoot: + description: RunAsNonRoot if true, indicates that the container must run as a non-root user. + type: boolean + runAsUser: + description: RunAsUser is the UID to run the entrypoint of the container process. + format: int64 + type: integer + seLinuxOptions: + description: SELinuxOptions are the labels to be applied to the container + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + properties: + localhostProfile: + type: string + type: + type: string + type: object + supplementalGroups: + description: |- + SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, + the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. + items: + format: int64 + type: integer + type: array + sysctls: + additionalProperties: + type: string + x-kubernetes-int-or-string: true + description: |- + Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported + sysctls (by the container runtime) might fail to launch. + Map Value can be String or Int + type: object + type: object + serviceAccountName: + description: |- + ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created + for each server of this group. If empty, it defaults to using the + `default` service account. + Using an alternative `ServiceAccount` is typically used to separate access rights. + The ArangoDB deployments need some very minimal access rights. With the + deployment of the operator, we grant the rights to 'get' all 'pod' resources. + If you are using a different service account, please grant these rights + to that service account. type: string - loadBalancerSourceRanges: + shutdownDelay: + description: ShutdownDelay define how long operator should delay finalizer removal after shutdown + format: int32 + type: integer + shutdownMethod: + description: ShutdownMethod describe procedure of member shutdown taken by Operator + type: string + sidecarCoreNames: description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. + SidecarCoreNames is a list of sidecar containers which must run in the pod. + Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. items: type: string type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. + sidecars: + description: Sidecars specifies a list of additional containers to be started items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - features: - description: Features allows to configure feature flags - properties: - foxx.queues: - type: boolean - type: object - id: - description: ServerIDGroupSpec contains the specification for Image Discovery image. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: properties: key: type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + type: object + secretKeyRef: properties: key: type: string - operator: + name: type: string - values: - items: - type: string - type: array + optional: + type: boolean type: object - type: array - matchLabels: - additionalProperties: + type: object + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: type: string - type: object - type: object - namespaces: - items: + optional: + type: boolean + type: object + prefix: type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: properties: - podAffinityTerm: + postStart: properties: - labelSelector: + exec: properties: - matchExpressions: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + httpGet: properties: - matchExpressions: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: + sleep: + properties: + seconds: + format: int64 + type: integer + type: object + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: items: type: string type: array - topologyKey: + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: type: string type: object - weight: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: format: int32 type: integer type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + type: string + type: object + type: array + readinessProbe: properties: - labelSelector: + exec: properties: - matchExpressions: + command: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: type: string - type: object + type: array type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: + failureThreshold: + format: int32 + type: integer + grpc: properties: - matchExpressions: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - namespaces: - items: + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: type: string + restartPolicy: + type: string + type: object + type: array + resources: + properties: + claims: + items: + properties: + name: + type: string + type: object type: array - topologyKey: - type: string + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - entrypoint: - description: Entrypoint overrides container executable - type: string - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + restartPolicy: + type: string + securityContext: properties: - preference: + allowPrivilegeEscalation: + type: boolean + capabilities: properties: - matchExpressions: + add: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + type: string type: array - matchFields: + drop: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string type: array type: object - weight: + failureThreshold: format: int32 type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: + grpc: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: items: properties: - key: + name: type: string - operator: + value: type: string - values: - items: - type: string - type: array type: object type: array + path: + type: string + port: + type: string + x-kubernetes-int-or-string: true + scheme: + type: string type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector specifies a set of selectors for nodes - type: object - priorityClassName: - description: PriorityClassName specifies a priority class name - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer type: object - type: array - limits: - additionalProperties: + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: type: string - type: object - requests: - additionalProperties: + terminationMessagePolicy: type: string - type: object - type: object - securityContext: - description: SecurityContext specifies security context for group - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + workingDir: type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container + type: object + type: array + storageClassName: + description: StorageClassName specifies the classname for storage of the servers. + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation + format: int64 + type: integer + tolerations: + description: |- + Tolerations specifies the tolerations added to Pods in this group. + By default, suitable tolerations are set for the following keys with the `NoExecute` effect: + - `node.kubernetes.io/not-ready` + - `node.kubernetes.io/unreachable` + - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) + For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeAllowShrink: + description: VolumeAllowShrink allows shrinking of the volume + type: boolean + volumeClaimTemplate: + description: |- + VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. + This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. + The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. + If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim + with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` + and `iops` is not forwarded to the pods resource requirements. + properties: + apiVersion: + type: string + kind: + type: string + metadata: properties: - level: + annotations: + additionalProperties: + type: string + type: object + creationTimestamp: + format: date-time + type: string + deletionGracePeriodSeconds: + format: int64 + type: integer + deletionTimestamp: + format: date-time + type: string + finalizers: + items: + type: string + type: array + generateName: + type: string + generation: + format: int64 + type: integer + labels: + additionalProperties: + type: string + type: object + managedFields: + items: + properties: + apiVersion: + type: string + fieldsType: + type: string + fieldsV1: + type: object + manager: + type: string + operation: + type: string + subresource: + type: string + time: + format: date-time + type: string + type: object + type: array + name: type: string - role: + namespace: type: string - type: + ownerReferences: + items: + properties: + apiVersion: + type: string + blockOwnerDeletion: + type: boolean + controller: + type: boolean + kind: + type: string + name: + type: string + uid: + type: string + type: object + type: array + resourceVersion: type: string - user: + selfLink: + type: string + uid: type: string type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. + spec: properties: - localhostProfile: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + type: object + resources: + properties: + limits: + additionalProperties: + type: string + type: object + requests: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: type: string - type: + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - supplementalGroups: - description: |- - SupplementalGroups is a list of groups applied to the first process run in each container, in addition to the container's primary GID, - the fsGroup (if specified), and group memberships defined in the container image for the uid of the container process. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: ServiceAccountName specifies the name of the service account used for Pods in this group. - type: string - tolerations: - description: Tolerations specifies the tolerations added to Pods in this group. - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - image: - description: |- - Image specifies the docker image to use for all ArangoDB servers. - In a development environment this setting defaults to arangodb/arangodb:latest. - For production environments this is a required setting without a default value. - It is highly recommend to use explicit version (not latest) for production environments. - type: string - imageDiscoveryMode: - description: ImageDiscoveryMode specifies the image discovery mode. - enum: - - kubelet - - direct - type: string - imagePullPolicy: - description: ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. - items: - type: string - type: array - labels: - additionalProperties: - type: string - description: Labels specifies the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - enum: - - disabled - - append - - replace - type: string - license: - description: License holds license settings - properties: - secretName: - description: |- - SecretName setting specifies the name of a kubernetes `Secret` that contains - the license key token used for enterprise images. This value is not used for - the Community Edition. - type: string - type: object - lifecycle: - description: Lifecycle holds lifecycle configuration settings - properties: - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + allocatedResources: + additionalProperties: + type: string + type: object + capacity: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + type: object + phase: + type: string + type: object + type: object + volumeMounts: + description: VolumeMounts define list of volume mounts mounted into server container + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + type: object + type: array + volumes: + description: Volumes define list of volumes mounted to pod + items: + properties: + configMap: + description: ConfigMap which should be mounted into pod properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array name: type: string + optional: + type: boolean type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: + emptyDir: + description: EmptyDir + properties: + medium: + type: string + sizeLimit: + type: string + type: object + hostPath: + description: HostPath + properties: + path: + type: string + type: + type: string + type: object + name: + description: Name of volume type: string - type: object - type: object + persistentVolumeClaim: + description: PersistentVolumeClaim + properties: + claimName: + type: string + readOnly: + type: boolean + type: object + secret: + description: Secret which should be mounted into pod + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + type: object + type: array type: object - memberPropagationMode: - description: |- - MemberPropagationMode defines how changes to pod spec should be propogated. - Changes to a pod’s configuration require a restart of that pod in almost all cases. - Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. - The propagation of the configuration changes can be deferred to the next restart, either triggered manually by the user or by another operation like an upgrade. - This reduces the number of restarts for upgrading both the server and the operator from two to one. + storageEngine: + description: StorageEngine specifies the type of storage engine used for all servers in the cluster. enum: - - always - - on-restart + - RocksDB + - MMFiles type: string - metrics: - description: Metrics holds metrics configuration settings + sync: + description: Sync holds Deployment-to-Deployment synchronization configuration settings properties: - authentication: + auth: properties: - jwtTokenSecretName: - description: JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication + clientCASecretName: + description: |- + ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains + a PEM encoded CA certificate used for client certificate verification + in all ArangoSync master servers. + This is a required setting when `spec.sync.enabled` is `true`. + type: string + jwtSecretName: + description: |- + JWTSecretName setting specifies the name of a kubernetes `Secret` that contains + the JWT token used for accessing all ArangoSync master servers. + When not specified, the `spec.auth.jwtSecretName` value is used. + If you specify a name of a `Secret` that does not exist, a random token is created + and stored in a `Secret` with given name. type: string type: object enabled: description: |- - Enabled if this is set to `true`, the operator runs a sidecar container for - every Agent, DB-Server, Coordinator and Single server. + Enabled setting enables/disables support for data center 2 data center + replication in the cluster. When enabled, the cluster will contain + a number of `syncmaster` & `syncworker` servers. type: boolean - extensions: - description: Extensions keeps the information about Metrics Extensions - properties: - usageMetrics: - description: UsageMetrics enables ArangoDB Usage metrics scrape. Affects only DBServers in the Cluster mode. - type: boolean - type: object - image: - description: Image used for the Metrics Sidecar - type: string - mode: - description: Mode define metrics exported mode - type: string - port: - format: int32 - type: integer - resources: - description: Resources holds resource requests & limits + externalAccess: properties: - claims: + accessPackageSecretNames: + description: |- + AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment + operator containing "access packages". An access package contains those `Secrets` that are needed + to access the SyncMasters of this `ArangoDeployment`. + By removing a name from this setting, the corresponding `Secret` is also deleted. + Note that to remove all access packages, leave an empty array in place (`[]`). + Completely removing the setting results in not modifying the list. items: - properties: - name: - type: string - type: object + type: string type: array - limits: - additionalProperties: + advertisedEndpoint: + description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint + type: string + loadBalancerIP: + description: |- + LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. + If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature. + items: type: string - type: object - requests: - additionalProperties: + type: array + managedServiceNames: + description: |- + ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. + It is only relevant when type of service is `managed`. + items: type: string - type: object - type: object - serviceMonitor: - properties: - enabled: - type: boolean - labels: - additionalProperties: + type: array + masterEndpoint: + description: |- + MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. + If not set, this setting defaults to: + - If `spec.sync.externalAccess.loadBalancerIP` is set, it defaults to `https://:<8629>`. + - Otherwise it defaults to `https://:<8629>`. + items: type: string - type: object - type: object - tls: - description: |- - TLS defines if TLS should be enabled on Metrics exporter endpoint. - This option will enable TLS only if TLS is enabled on ArangoDeployment, - otherwise `true` value will not take any effect. - type: boolean - type: object - mode: - description: Mode specifies the type of ArangoDB deployment to create. - enum: - - Cluster - - ActiveFailover - - Single - type: string - networkAttachedVolumes: - description: |- - NetworkAttachedVolumes - If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). - Furthermore, the pod will simply be redeployed on a different node, rather than cleaned and retired and replaced by a new member. - You must only set this option to true if your persistent volumes are “movable” in the sense that they can be mounted from a different k8s node, like in the case of network attached volumes. - If your persistent volumes are tied to a specific pod, you must leave this option on false. - type: boolean - rebalancer: - description: Rebalancer defines the rebalancer specification - properties: - enabled: - type: boolean - optimizers: - properties: - leader: - type: boolean + type: array + nodePort: + description: |- + NodePort define optional port used in case of Auto or NodePort type. + This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. + If you do not specify this setting, a random port will be chosen automatically. + format: int32 + type: integer + type: + description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. + enum: + - Auto + - None + - LoadBalancer + - NodePort + type: string type: object - parallelMoves: - format: int32 - type: integer - readers: + image: + type: string + monitoring: properties: - count: - description: Count Enable Shard Count machanism - type: boolean + tokenSecretName: + description: |- + TokenSecretName setting specifies the name of a kubernetes `Secret` that contains + the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. + When not specified, no monitoring token is used. + type: string type: object - type: object - recovery: - description: Recovery specifies configuration related to cluster recovery. - properties: - autoRecover: - type: boolean - type: object - restoreEncryptionSecret: - description: RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore - type: string - restoreFrom: - description: |- - RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. - After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. - It will contain some of the following fields: - - `requestedFrom`: name of the ArangoBackup used to restore from. - - `message`: optional message explaining why the restore failed. - - `state`: state indicating if the restore was successful or not. Possible values: Restoring, Restored, RestoreFailed - If the restoreFrom key is removed from the spec, the restore key is deleted as well. - A new restore attempt is made if and only if either in the status restore is not set or if spec.restoreFrom and status.requestedFrom are different. - type: string - rocksdb: - description: RocksDB holds rocksdb-specific configuration settings - properties: - encryption: + tls: properties: - keySecretName: + altNames: description: |- - KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. - When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. + AltNames setting specifies a list of alternate names that will be added to all generated + certificates. These names can be DNS names or email addresses. The default value is empty. - This requires the Enterprise Edition. - The encryption key cannot be changed after the cluster has been created. - The secret specified by this setting, must have a data field named 'key' containing an encryption key that is exactly 32 bytes long. + items: + type: string + type: array + caSecretName: + description: |- + CASecretName setting specifies the name of a kubernetes `Secret` that contains + a standard CA certificate + private key used to sign certificates for individual + ArangoDB servers. + When no name is specified, it defaults to `-ca`. + To disable authentication, set this value to `None`. + If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created + and stored in a `Secret` with given name. + The specified `Secret`, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate + type: string + mode: + type: string + sni: + properties: + mapping: + additionalProperties: + items: + type: string + type: array + type: object + type: object + ttl: + description: |- + TTL setting specifies the time to live of all generated server certificates. + When the server certificate is about to expire, it will be automatically replaced + by a new one and the affected server will be restarted. + Note: The time to live of the CA certificate (when created automatically) + will be set to 10 years. type: string type: object type: object - single: - description: Single contains specification for servers running in deployment mode `Single` or `ActiveFailover`. + syncmasters: + description: SyncMasters contains specification for Syncmaster pods running in deployment mode `Cluster`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -23264,158 +29816,8 @@ v1alpha: type: object type: array type: object - storageEngine: - description: StorageEngine specifies the type of storage engine used for all servers in the cluster. - enum: - - RocksDB - - MMFiles - type: string - sync: - description: Sync holds Deployment-to-Deployment synchronization configuration settings - properties: - auth: - properties: - clientCASecretName: - description: |- - ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains - a PEM encoded CA certificate used for client certificate verification - in all ArangoSync master servers. - This is a required setting when `spec.sync.enabled` is `true`. - type: string - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains - the JWT token used for accessing all ArangoSync master servers. - When not specified, the `spec.auth.jwtSecretName` value is used. - If you specify a name of a `Secret` that does not exist, a random token is created - and stored in a `Secret` with given name. - type: string - type: object - enabled: - description: |- - Enabled setting enables/disables support for data center 2 data center - replication in the cluster. When enabled, the cluster will contain - a number of `syncmaster` & `syncworker` servers. - type: boolean - externalAccess: - properties: - accessPackageSecretNames: - description: |- - AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment - operator containing "access packages". An access package contains those `Secrets` that are needed - to access the SyncMasters of this `ArangoDeployment`. - By removing a name from this setting, the corresponding `Secret` is also deleted. - Note that to remove all access packages, leave an empty array in place (`[]`). - Completely removing the setting results in not modifying the list. - items: - type: string - type: array - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint - type: string - loadBalancerIP: - description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. - type: string - loadBalancerSourceRanges: - description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. - items: - type: string - type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. - items: - type: string - type: array - masterEndpoint: - description: |- - MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. - If not set, this setting defaults to: - - If `spec.sync.externalAccess.loadBalancerIP` is set, it defaults to `https://:<8629>`. - - Otherwise it defaults to `https://:<8629>`. - items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - image: - type: string - monitoring: - properties: - tokenSecretName: - description: |- - TokenSecretName setting specifies the name of a kubernetes `Secret` that contains - the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. - When not specified, no monitoring token is used. - type: string - type: object - tls: - properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. - items: - type: string - type: array - caSecretName: - description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: - type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: - description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string - type: object - type: object - syncmasters: - description: SyncMasters contains specification for Syncmaster pods running in deployment mode `Cluster`. + syncworkers: + description: SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -25544,8 +31946,108 @@ v1alpha: type: object type: array type: object - syncworkers: - description: SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. + timeouts: + description: Timeouts object allows to configure various time-outs + properties: + actions: + additionalProperties: + type: object + description: Actions keep map of the actions timeouts. + type: object + maintenanceGracePeriod: + description: MaintenanceGracePeriod action timeout + type: object + type: object + timezone: + description: |- + Timezone if specified, will set a timezone for deployment. + Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` + type: string + tls: + description: TLS holds TLS configuration settings + properties: + altNames: + description: |- + AltNames setting specifies a list of alternate names that will be added to all generated + certificates. These names can be DNS names or email addresses. + The default value is empty. + items: + type: string + type: array + caSecretName: + description: |- + CASecretName setting specifies the name of a kubernetes `Secret` that contains + a standard CA certificate + private key used to sign certificates for individual + ArangoDB servers. + When no name is specified, it defaults to `-ca`. + To disable authentication, set this value to `None`. + If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created + and stored in a `Secret` with given name. + The specified `Secret`, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate + type: string + mode: + type: string + sni: + properties: + mapping: + additionalProperties: + items: + type: string + type: array + type: object + type: object + ttl: + description: |- + TTL setting specifies the time to live of all generated server certificates. + When the server certificate is about to expire, it will be automatically replaced + by a new one and the affected server will be restarted. + Note: The time to live of the CA certificate (when created automatically) + will be set to 10 years. + type: string + type: object + topology: + description: Topology define topology adjustment details, Enterprise only + properties: + enabled: + type: boolean + label: + type: string + zones: + format: int32 + type: integer + type: object + upgrade: + description: Upgrade allows to configure upgrade-related options + properties: + autoUpgrade: + description: AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) + type: boolean + debugLog: + description: |- + DebugLog flag specifies if containers running upgrade process should print more debugging information. + This applies only to init containers. + type: boolean + type: object + type: object + status: + description: Object with preserved fields for backward compatibility + type: object + x-kubernetes-preserve-unknown-fields: true + type: object +v2alpha1: + openAPIV3Schema: + properties: + spec: + properties: + ClusterDomain: + description: |- + ClusterDomain define domain used in the kubernetes cluster. + Required only of domain is not set to default (cluster.local) + type: string + agents: + description: Agents contains specification for Agency pods running in deployment mode `Cluster` or `ActiveFailover`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -27674,108 +34176,97 @@ v1alpha: type: object type: array type: object - timeouts: - description: Timeouts object allows to configure various time-outs - properties: - actions: - additionalProperties: - type: object - description: Actions keep map of the actions timeouts. - type: object - maintenanceGracePeriod: - description: MaintenanceGracePeriod action timeout - type: object + allowUnsafeUpgrade: + description: AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed + type: boolean + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). type: object - timezone: - description: |- - Timezone if specified, will set a timezone for deployment. - Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` + annotationsIgnoreList: + description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored + items: + type: string + type: array + annotationsMode: + description: AnnotationsMode defines annotations mode which should be use while overriding annotations. + enum: + - disabled + - append + - replace type: string - tls: - description: TLS holds TLS configuration settings + architecture: + description: |- + Architecture defines the list of supported architectures. + First element on the list is marked as default architecture. + Possible values are: + - `amd64`: Use processors with the x86-64 architecture. + - `arm64`: Use processors with the 64-bit ARM architecture. + The setting expects a list of strings, but you should only specify a single + list item for the architecture, except when you want to migrate from one + architecture to the other. The first list item defines the new default + architecture for the deployment that you want to migrate to. + items: + type: string + type: array + auth: + description: Authentication holds authentication configuration settings properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. - items: - type: string - type: array - caSecretName: + jwtSecretName: description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. + JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating + JWT tokens to access all ArangoDB servers. + When no name is specified, it defaults to `-jwt`. To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: + If you specify a name of a `Secret`, that secret must have the key value in a data field named `token`. + If you specify a name of a `Secret` that does not exist, a random key is created and stored in a `Secret` with given name. + Changing secret key results in restarting of a whole cluster. type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: + type: object + bootstrap: + description: Bootstrap contains information for cluster bootstrapping + properties: + passwordSecretNames: + additionalProperties: + type: string description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string + PasswordSecretNames contains a map of username to password-secret-name + This setting specifies a secret name for the credentials per specific users. + When a deployment is created the operator will setup the user accounts + according to the credentials given by the secret. If the secret doesn't exist + the operator creates a secret with a random password. + There are two magic values for the secret name: + - `None` specifies no action. This disables root password randomization. This is the default value. (Thus the root password is empty - not recommended) + - `Auto` specifies automatic name generation, which is `-root-password`. + type: object type: object - topology: - description: Topology define topology adjustment details, Enterprise only + chaos: + description: ChaosSpec can be used for chaos-monkey testing of your ArangoDeployment properties: enabled: + description: Enabled switches the chaos monkey for a deployment on or off. type: boolean - label: - type: string - zones: - format: int32 + interval: + description: Interval is the time between events + format: int64 type: integer - type: object - upgrade: - description: Upgrade allows to configure upgrade-related options - properties: - autoUpgrade: - description: AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) - type: boolean - debugLog: - description: |- - DebugLog flag specifies if containers running upgrade process should print more debugging information. - This applies only to init containers. - type: boolean - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object -v2alpha1: - openAPIV3Schema: - properties: - spec: - properties: - ClusterDomain: - description: |- - ClusterDomain define domain used in the kubernetes cluster. - Required only of domain is not set to default (cluster.local) + kill-pod-probability: + description: KillPodProbability is the chance of a pod being killed during an event + format: int32 + type: integer + type: object + communicationMethod: + description: CommunicationMethod define communication method used in deployment + enum: + - headless + - dns + - short-dns + - headless-dns + - ip type: string - agents: - description: Agents contains specification for Agency pods running in deployment mode `Cluster` or `ActiveFailover`. + coordinators: + description: Coordinators contains specification for Coordinator pods running in deployment mode `Cluster` or `ActiveFailover`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -29904,97 +36395,15 @@ v2alpha1: type: object type: array type: object - allowUnsafeUpgrade: - description: AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed - type: boolean - annotations: - additionalProperties: - type: string - description: Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode defines annotations mode which should be use while overriding annotations. - enum: - - disabled - - append - - replace - type: string - architecture: - description: |- - Architecture defines the list of supported architectures. - First element on the list is marked as default architecture. - Possible values are: - - `amd64`: Use processors with the x86-64 architecture. - - `arm64`: Use processors with the 64-bit ARM architecture. - The setting expects a list of strings, but you should only specify a single - list item for the architecture, except when you want to migrate from one - architecture to the other. The first list item defines the new default - architecture for the deployment that you want to migrate to. - items: - type: string - type: array - auth: - description: Authentication holds authentication configuration settings - properties: - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating - JWT tokens to access all ArangoDB servers. - When no name is specified, it defaults to `-jwt`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret`, that secret must have the key value in a data field named `token`. - If you specify a name of a `Secret` that does not exist, a random key is created and stored in a `Secret` with given name. - Changing secret key results in restarting of a whole cluster. - type: string - type: object - bootstrap: - description: Bootstrap contains information for cluster bootstrapping - properties: - passwordSecretNames: - additionalProperties: - type: string - description: |- - PasswordSecretNames contains a map of username to password-secret-name - This setting specifies a secret name for the credentials per specific users. - When a deployment is created the operator will setup the user accounts - according to the credentials given by the secret. If the secret doesn't exist - the operator creates a secret with a random password. - There are two magic values for the secret name: - - `None` specifies no action. This disables root password randomization. This is the default value. (Thus the root password is empty - not recommended) - - `Auto` specifies automatic name generation, which is `-root-password`. - type: object - type: object - chaos: - description: ChaosSpec can be used for chaos-monkey testing of your ArangoDeployment + database: + description: Database holds information about database state, like maintenance mode properties: - enabled: - description: Enabled switches the chaos monkey for a deployment on or off. + maintenance: + description: Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled type: boolean - interval: - description: Interval is the time between events - format: int64 - type: integer - kill-pod-probability: - description: KillPodProbability is the chance of a pod being killed during an event - format: int32 - type: integer type: object - communicationMethod: - description: CommunicationMethod define communication method used in deployment - enum: - - headless - - dns - - short-dns - - headless-dns - - ip - type: string - coordinators: - description: Coordinators contains specification for Coordinator pods running in deployment mode `Cluster` or `ActiveFailover`. + dbservers: + description: DBServers contains specification for DBServer pods running in deployment mode `Cluster` or `ActiveFailover`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -32123,15 +38532,84 @@ v2alpha1: type: object type: array type: object - database: - description: Database holds information about database state, like maintenance mode + disableIPv6: + description: |- + DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. + This setting cannot be changed after the deployment has been created. + type: boolean + downtimeAllowed: + description: |- + DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. + When this setting is set to false, no automatic action that may result in downtime is allowed. + If the need for such an action is detected, an event is added to the ArangoDeployment. + Once this setting is set to true, the automatic action is executed. + Operations that may result in downtime are: + - Rotating TLS CA certificate + Note: It is still possible that there is some downtime when the Kubernetes cluster is down, or in a bad state, irrespective of the value of this setting. + type: boolean + environment: + description: Environment setting specifies the type of environment in which the deployment is created. + enum: + - Development + - Production + type: string + externalAccess: + description: ExternalAccess holds configuration for the external access provided for the deployment. properties: - maintenance: - description: Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled + advertisedEndpoint: + description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint + type: string + loadBalancerIP: + description: |- + LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. + If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature. + items: + type: string + type: array + managedServiceNames: + description: |- + ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. + It is only relevant when type of service is `managed`. + items: + type: string + type: array + nodePort: + description: |- + NodePort define optional port used in case of Auto or NodePort type. + This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. + If you do not specify this setting, a random port will be chosen automatically. + format: int32 + type: integer + type: + description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. + enum: + - Auto + - None + - LoadBalancer + - NodePort + type: string + type: object + features: + description: Features allows to configure feature flags + properties: + foxx.queues: type: boolean type: object - dbservers: - description: DBServers contains specification for DBServer pods running in deployment mode `Cluster` or `ActiveFailover`. + gateway: + description: Gateway defined main Gateway configuration. + properties: + enabled: + type: boolean + type: object + gateways: + description: Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. properties: affinity: description: Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -34260,76 +40738,6 @@ v2alpha1: type: object type: array type: object - disableIPv6: - description: |- - DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. - This setting cannot be changed after the deployment has been created. - type: boolean - downtimeAllowed: - description: |- - DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. - When this setting is set to false, no automatic action that may result in downtime is allowed. - If the need for such an action is detected, an event is added to the ArangoDeployment. - Once this setting is set to true, the automatic action is executed. - Operations that may result in downtime are: - - Rotating TLS CA certificate - Note: It is still possible that there is some downtime when the Kubernetes cluster is down, or in a bad state, irrespective of the value of this setting. - type: boolean - environment: - description: Environment setting specifies the type of environment in which the deployment is created. - enum: - - Development - - Production - type: string - externalAccess: - description: ExternalAccess holds configuration for the external access provided for the deployment. - properties: - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint - type: string - loadBalancerIP: - description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. - type: string - loadBalancerSourceRanges: - description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. - items: - type: string - type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. - items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - features: - description: Features allows to configure feature flags - properties: - foxx.queues: - type: boolean - type: object id: description: ServerIDGroupSpec contains the specification for Image Discovery image. properties: diff --git a/pkg/deployment/features/gateway.go b/pkg/deployment/features/gateway.go new file mode 100644 index 000000000..40173ef50 --- /dev/null +++ b/pkg/deployment/features/gateway.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package features + +func init() { + registerFeature(gateway) +} + +var gateway = &feature{ + name: "gateway", + description: "Defines if gateway extension is enabled", + enterpriseRequired: false, + enabledByDefault: false, + hidden: true, +} + +func Gateway() Feature { + return gateway +} diff --git a/pkg/deployment/images.go b/pkg/deployment/images.go index 2dccae605..2f1e016e0 100644 --- a/pkg/deployment/images.go +++ b/pkg/deployment/images.go @@ -81,6 +81,11 @@ type ArangoSyncIdentity struct { interfaces.ContainerCreator } +// GatewayIdentity helps to resolve the Gateway identity, e.g.: image ID, version of the entrypoint. +type GatewayIdentity struct { + interfaces.ContainerCreator +} + type imagesBuilder struct { Log logging.Logger Context resources.Context diff --git a/pkg/deployment/members.go b/pkg/deployment/members.go index a3d20daa4..88982aaa2 100644 --- a/pkg/deployment/members.go +++ b/pkg/deployment/members.go @@ -210,6 +210,16 @@ func (d *Deployment) renderMember(spec api.DeploymentSpec, status *api.Deploymen Image: apiObject.Status.CurrentImage, Architecture: &arch, }, nil + case api.ServerGroupGateways: + d.log.Str("id", id).Debug("Adding gateway") + return &api.MemberStatus{ + ID: id, + UID: uuid.NewUUID(), + CreatedAt: meta.Now(), + Phase: api.MemberPhaseNone, + Image: apiObject.Status.CurrentImage, + Architecture: &arch, + }, nil default: return nil, errors.WithStack(errors.Errorf("Unknown server group %d", group)) } diff --git a/pkg/deployment/pod/utils.go b/pkg/deployment/pod/utils.go index 3ffa5ffa4..f868a3b1f 100644 --- a/pkg/deployment/pod/utils.go +++ b/pkg/deployment/pod/utils.go @@ -43,7 +43,7 @@ func GenerateMemberEndpoint(services service.Inspector, apiObject meta.Object, s func GenerateMemberEndpointFromService(svc *core.Service, apiObject meta.Object, spec api.DeploymentSpec, group api.ServerGroup, member api.MemberStatus) (string, error) { switch group.Type() { - case api.ServerGroupTypeArangoD: + case api.ServerGroupTypeArangoD, api.ServerGroupTypeGateway: switch method := spec.CommunicationMethod.Get(); method { case api.DeploymentCommunicationMethodDNS, api.DeploymentCommunicationMethodHeadlessDNS: return k8sutil.CreateServiceDNSNameWithDomain(svc, spec.ClusterDomain), nil diff --git a/pkg/deployment/reconcile/plan_builder_rebalancer_v2.go b/pkg/deployment/reconcile/plan_builder_rebalancer_v2.go index de7fc772b..cf76139f2 100644 --- a/pkg/deployment/reconcile/plan_builder_rebalancer_v2.go +++ b/pkg/deployment/reconcile/plan_builder_rebalancer_v2.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import ( "time" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" ) func (r *Reconciler) createRebalancerV2GeneratePlan(spec api.DeploymentSpec, status api.DeploymentStatus) api.Plan { @@ -44,7 +45,7 @@ func (r *Reconciler) createRebalancerV2GeneratePlan(spec api.DeploymentSpec, sta r.metrics.Rebalancer.SetEnabled(true) - if !status.Members.AllMembersReady(spec.Mode.Get(), spec.Sync.IsEnabled()) { + if !status.Members.AllMembersReady(spec.Mode.Get(), spec.Sync.IsEnabled(), features.Gateway().Enabled() && spec.IsGatewayEnabled()) { return nil } diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go index acda2247f..e652d1f4e 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go @@ -49,6 +49,7 @@ var ( api.ServerGroupDBServers, api.ServerGroupSyncMasters, api.ServerGroupSyncWorkers, + api.ServerGroupGateways, } ) diff --git a/pkg/deployment/reconcile/plan_builder_scale.go b/pkg/deployment/reconcile/plan_builder_scale.go index 86110481f..8ae98d66f 100644 --- a/pkg/deployment/reconcile/plan_builder_scale.go +++ b/pkg/deployment/reconcile/plan_builder_scale.go @@ -25,6 +25,7 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/deployment/actions" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" sharedReconcile "github.com/arangodb/kube-arangodb/pkg/deployment/reconcile/shared" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" ) @@ -69,6 +70,11 @@ func (r *Reconciler) createScaleMemberPlan(ctx context.Context, apiObject k8suti plan = append(plan, r.createScalePlan(status, status.Members.SyncWorkers, api.ServerGroupSyncWorkers, 0, context)...) } } + if features.Gateway().Enabled() && spec.IsGatewayEnabled() { + plan = append(plan, r.createScalePlan(status, status.Members.Gateways, api.ServerGroupGateways, spec.Gateways.GetCount(), context)...) + } else { + plan = append(plan, r.createScalePlan(status, status.Members.Gateways, api.ServerGroupGateways, 0, context)...) + } return plan } diff --git a/pkg/deployment/resilience/member_failure.go b/pkg/deployment/resilience/member_failure.go index 91529cd8e..0dd546f97 100644 --- a/pkg/deployment/resilience/member_failure.go +++ b/pkg/deployment/resilience/member_failure.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -132,6 +132,9 @@ func (r *Resilience) isMemberFailureAcceptable(group api.ServerGroup, m api.Memb case api.ServerGroupSyncMasters, api.ServerGroupSyncWorkers: // Sync masters & workers can be replaced at will return true, "" + case api.ServerGroupGateways: + // Gateways can be replaced at will + return true, "" case api.ServerGroupSingle: return false, "ServerGroupSingle can not marked as a failed" default: diff --git a/pkg/deployment/resources/pdbs.go b/pkg/deployment/resources/pdbs.go index afdf41dec..36530396c 100644 --- a/pkg/deployment/resources/pdbs.go +++ b/pkg/deployment/resources/pdbs.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" @@ -72,6 +73,12 @@ func (r *Resources) EnsurePDBs(ctx context.Context) error { currSyncWorker = status.Members.SyncWorkers.MembersReady() } + minGateways, currGateways := 0, 0 + if features.Gateway().Enabled() && spec.IsGatewayEnabled() { + minGateways = spec.GetServerGroupSpec(api.ServerGroupGateways).New().GetCount() - 1 + currGateways = status.Members.Gateways.MembersReady() + } + // Ensure all PDBs as calculated if err := r.ensurePDBForGroup(ctx, api.ServerGroupAgents, minAgents, currAgents); err != nil { return err @@ -88,6 +95,9 @@ func (r *Resources) EnsurePDBs(ctx context.Context) error { if err := r.ensurePDBForGroup(ctx, api.ServerGroupSyncWorkers, minSyncWorker, currSyncWorker); err != nil { return err } + if err := r.ensurePDBForGroup(ctx, api.ServerGroupGateways, minGateways, currGateways); err != nil { + return err + } } return nil diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 5befe8a2c..36f0ecc27 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -286,6 +286,15 @@ func createArangoSyncArgs(apiObject meta.Object, spec api.DeploymentSpec, group return args } +func createArangoGatewayArgs(groupSpec api.ServerGroupSpec) []string { + args := []string{"--config-path", GatewayConfigFilePath} + if len(groupSpec.Args) > 0 { + args = append(args, groupSpec.Args...) + } + + return args +} + // CreatePodTolerations creates a list of tolerations for a pod created for the given group. func (r *Resources) CreatePodTolerations(group api.ServerGroup, groupSpec api.ServerGroupSpec) []core.Toleration { return tolerations.MergeTolerationsIfNotFound(tolerations.CreatePodTolerations(r.context.GetMode(), group), groupSpec.GetTolerations()) @@ -379,6 +388,21 @@ func (r *Resources) RenderPodForMember(ctx context.Context, acs sutil.ACS, spec memberStatus: m, cachedStatus: cache, } + case api.ServerGroupTypeGateway: + imageInfo.Image = r.context.GetOperatorImage() + + podCreator = &MemberGatewayPod{ + podName: podName, + groupSpec: groupSpec, + spec: spec, + group: group, + resources: r, + imageInfo: imageInfo, + arangoMember: *member, + apiObject: apiObject, + memberStatus: m, + cachedStatus: cache, + } default: return nil, assertion.InvalidGroupKey.Assert(true, "Unable to render pod for an unknown group: %s", group.AsRole()) } @@ -548,6 +572,27 @@ func (r *Resources) createPodForMember(ctx context.Context, cachedStatus inspect m.Pod.Propagate(&m) log.Str("pod-name", pod.Name).Debug("Created pod") + case api.ServerGroupTypeGateway: + ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) + defer cancel() + podName, uid, err := CreateArangoPod(ctxChild, cachedStatus.PodsModInterface().V1(), apiObject, spec, group, CreatePodFromTemplate(template.PodSpec)) + if err != nil { + if uErr := r.context.WithMemberStatusUpdateErr(ctx, m.ID, group, updateMemberPhase(api.MemberPhaseCreationFailed)); uErr != nil { + return errors.WithStack(uErr) + } + return errors.WithStack(err) + } + + var pod api.MemberPodStatus + + pod.Name = podName + pod.UID = uid + pod.SpecVersion = template.PodSpecChecksum + + m.Pod = &pod + m.Pod.Propagate(&m) + + log.Str("pod-name", pod.Name).Debug("Created Gateway pod") default: return assertion.InvalidGroupKey.Assert(true, "Unable to create pod for an unknown group: %s", group.AsRole()) } diff --git a/pkg/deployment/resources/pod_creator_gateway.go b/pkg/deployment/resources/pod_creator_gateway.go new file mode 100644 index 000000000..e46415ccf --- /dev/null +++ b/pkg/deployment/resources/pod_creator_gateway.go @@ -0,0 +1,346 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package resources + +import ( + "context" + "fmt" + "math" + + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" + "github.com/arangodb/kube-arangodb/pkg/deployment/pod" + "github.com/arangodb/kube-arangodb/pkg/util/collection" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/interfaces" + kresources "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources" +) + +const ( + ArangoGatewayExecutor string = "/usr/local/bin/envoy" + GatewayVolumeMountDir = "/etc/gateway/" + GatewayVolumeName = "gateway" + GatewayConfigFileName = "gateway.yaml" + GatewayConfigFilePath = GatewayVolumeMountDir + GatewayConfigFileName +) + +type ArangoGatewayContainer struct { + groupSpec api.ServerGroupSpec + spec api.DeploymentSpec + group api.ServerGroup + resources *Resources + imageInfo api.ImageInfo + apiObject meta.Object + memberStatus api.MemberStatus + arangoMember api.ArangoMember +} + +var _ interfaces.PodCreator = &MemberGatewayPod{} +var _ interfaces.ContainerCreator = &ArangoGatewayContainer{} + +type MemberGatewayPod struct { + podName string + + groupSpec api.ServerGroupSpec + spec api.DeploymentSpec + group api.ServerGroup + arangoMember api.ArangoMember + resources *Resources + imageInfo api.ImageInfo + apiObject meta.Object + memberStatus api.MemberStatus + cachedStatus interfaces.Inspector +} + +func GetGatewayConfigMapName(name string) string { + return fmt.Sprintf("%s-gateway", name) +} + +func (a *ArangoGatewayContainer) GetCommand() ([]string, error) { + cmd := make([]string, 0, 128) + cmd = append(cmd, a.GetExecutor()) + cmd = append(cmd, createArangoGatewayArgs(a.groupSpec)...) + return cmd, nil +} + +func (a *ArangoGatewayContainer) GetName() string { + return shared.ServerContainerName +} + +func (a *ArangoGatewayContainer) GetPorts() []core.ContainerPort { + port := shared.ArangoPort + + return []core.ContainerPort{ + { + Name: shared.ServerContainerName, + ContainerPort: int32(port), + Protocol: core.ProtocolTCP, + }, + } +} + +func (a *ArangoGatewayContainer) GetExecutor() string { + return a.groupSpec.GetEntrypoint(ArangoGatewayExecutor) +} + +func (a *ArangoGatewayContainer) GetSecurityContext() *core.SecurityContext { + return k8sutil.CreateSecurityContext(a.groupSpec.SecurityContext) +} + +func (a *ArangoGatewayContainer) GetProbes() (*core.Probe, *core.Probe, *core.Probe, error) { + var liveness, readiness, startup *core.Probe + + probeLivenessConfig, err := a.resources.getLivenessProbe(a.spec, a.group, a.imageInfo) + if err != nil { + return nil, nil, nil, err + } + + probeReadinessConfig, err := a.resources.getReadinessProbe(a.spec, a.group, a.imageInfo) + if err != nil { + return nil, nil, nil, err + } + + probeStartupConfig, err := a.resources.getReadinessProbe(a.spec, a.group, a.imageInfo) + if err != nil { + return nil, nil, nil, err + } + + if probeLivenessConfig != nil { + liveness = probeLivenessConfig.Create() + } + + if probeReadinessConfig != nil { + readiness = probeReadinessConfig.Create() + } + + if probeStartupConfig != nil { + startup = probeStartupConfig.Create() + } + + return liveness, readiness, startup, nil +} + +func (a *ArangoGatewayContainer) GetResourceRequirements() core.ResourceRequirements { + return kresources.ExtractPodAcceptedResourceRequirement(a.arangoMember.Spec.Overrides.GetResources(&a.groupSpec)) +} + +func (a *ArangoGatewayContainer) GetLifecycle() (*core.Lifecycle, error) { + return k8sutil.NewLifecycleFinalizers() +} + +func (a *ArangoGatewayContainer) GetImagePullPolicy() core.PullPolicy { + return a.spec.GetImagePullPolicy() +} + +func (a *ArangoGatewayContainer) GetImage() string { + return a.imageInfo.Image +} + +func (a *ArangoGatewayContainer) GetEnvs() ([]core.EnvVar, []core.EnvFromSource) { + envs := NewEnvBuilder() + + envs.Add(true, k8sutil.GetLifecycleEnv()...) + + if len(a.groupSpec.Envs) > 0 { + for _, env := range a.groupSpec.Envs { + // Do not override preset envs + envs.Add(false, core.EnvVar{ + Name: env.Name, + Value: env.Value, + }) + } + } + + return envs.GetEnvList(), nil +} + +func (a *ArangoGatewayContainer) GetVolumeMounts() []core.VolumeMount { + return createGatewayVolumes(a.apiObject.GetName()).VolumeMounts() +} + +func (m *MemberGatewayPod) GetName() string { + return m.resources.context.GetAPIObject().GetName() +} + +func (m *MemberGatewayPod) GetRole() string { + return m.group.AsRole() +} + +func (m *MemberGatewayPod) GetImagePullSecrets() []string { + return m.spec.ImagePullSecrets +} + +func (m *MemberGatewayPod) GetPodAntiAffinity() *core.PodAntiAffinity { + a := &core.PodAntiAffinity{} + + pod.AppendPodAntiAffinityDefault(m, a) + + a = kresources.MergePodAntiAffinity(a, m.groupSpec.AntiAffinity) + + return kresources.OptionalPodAntiAffinity(a) +} + +func (m *MemberGatewayPod) GetPodAffinity() *core.PodAffinity { + a := &core.PodAffinity{} + + pod.AppendAffinityWithRole(m, a, api.ServerGroupDBServers.AsRole()) + + a = kresources.MergePodAffinity(a, m.groupSpec.Affinity) + + return kresources.OptionalPodAffinity(a) +} + +func (m *MemberGatewayPod) GetNodeAffinity() *core.NodeAffinity { + a := &core.NodeAffinity{} + + pod.AppendArchSelector(a, m.memberStatus.Architecture.Default(m.spec.Architecture.GetDefault()).AsNodeSelectorRequirement()) + + a = kresources.MergeNodeAffinity(a, m.groupSpec.NodeAffinity) + + return kresources.OptionalNodeAffinity(a) +} + +func (m *MemberGatewayPod) GetNodeSelector() map[string]string { + return m.groupSpec.GetNodeSelector() +} + +func (m *MemberGatewayPod) GetServiceAccountName() string { + return m.groupSpec.GetServiceAccountName() +} + +func (m *MemberGatewayPod) GetSidecars(pod *core.Pod) error { + // A sidecar provided by the user + sidecars := m.groupSpec.GetSidecars() + if len(sidecars) > 0 { + addLifecycleSidecar(m.groupSpec.SidecarCoreNames, sidecars) + pod.Spec.Containers = append(pod.Spec.Containers, sidecars...) + } + + return nil +} + +func (m *MemberGatewayPod) GetVolumes() []core.Volume { + return createGatewayVolumes(m.apiObject.GetName()).Volumes() +} + +func (m *MemberGatewayPod) IsDeploymentMode() bool { + return m.spec.IsDevelopment() +} + +func (m *MemberGatewayPod) GetInitContainers(cachedStatus interfaces.Inspector) ([]core.Container, error) { + var initContainers []core.Container + if c := m.groupSpec.InitContainers.GetContainers(); len(c) > 0 { + initContainers = append(initContainers, c...) + } + + res := kresources.ExtractPodInitContainerAcceptedResourceRequirement(m.GetContainerCreator().GetResourceRequirements()) + + initContainers = applyInitContainersResourceResources(initContainers, res) + initContainers = upscaleInitContainersResourceResources(initContainers, res) + + return initContainers, nil +} + +func (m *MemberGatewayPod) GetFinalizers() []string { + return nil +} + +func (m *MemberGatewayPod) GetTolerations() []core.Toleration { + return m.resources.CreatePodTolerations(m.group, m.groupSpec) +} + +func (m *MemberGatewayPod) GetContainerCreator() interfaces.ContainerCreator { + return &ArangoGatewayContainer{ + groupSpec: m.groupSpec, + spec: m.spec, + group: m.group, + resources: m.resources, + imageInfo: m.imageInfo, + apiObject: m.apiObject, + memberStatus: m.memberStatus, + arangoMember: m.arangoMember, + } +} + +func (m *MemberGatewayPod) GetRestartPolicy() core.RestartPolicy { + if features.RestartPolicyAlways().Enabled() { + return core.RestartPolicyAlways + } + return core.RestartPolicyNever +} + +func (m *MemberGatewayPod) Init(ctx context.Context, cachedStatus interfaces.Inspector, pod *core.Pod) error { + terminationGracePeriodSeconds := int64(math.Ceil(m.groupSpec.GetTerminationGracePeriod(m.group).Seconds())) + pod.Spec.TerminationGracePeriodSeconds = &terminationGracePeriodSeconds + pod.Spec.PriorityClassName = m.groupSpec.PriorityClassName + + return nil +} + +func (m *MemberGatewayPod) Validate(_ interfaces.Inspector) error { + if err := validateSidecars(m.groupSpec.SidecarCoreNames, m.groupSpec.GetSidecars()); err != nil { + return err + } + + return nil +} + +func (m *MemberGatewayPod) ApplyPodSpec(spec *core.PodSpec) error { + if s := m.groupSpec.SchedulerName; s != nil { + spec.SchedulerName = *s + } + + m.groupSpec.PodModes.Apply(spec) + + return nil +} + +func (m *MemberGatewayPod) Annotations() map[string]string { + return collection.MergeAnnotations(m.spec.Annotations, m.groupSpec.Annotations) +} + +func (m *MemberGatewayPod) Labels() map[string]string { + return collection.ReservedLabels().Filter(collection.MergeAnnotations(m.spec.Labels, m.groupSpec.Labels)) +} + +func createGatewayVolumes(memberName string) pod.Volumes { + volumes := pod.NewVolumes() + + volumes.AddVolume(k8sutil.LifecycleVolume()) + volumes.AddVolumeMount(k8sutil.LifecycleVolumeMount()) + + volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(GatewayVolumeName, GetGatewayConfigMapName(memberName))) + volumes.AddVolumeMount(GatewayVolumeMount()) + + return volumes +} + +func GatewayVolumeMount() core.VolumeMount { + return core.VolumeMount{ + Name: GatewayVolumeName, + MountPath: GatewayVolumeMountDir, + ReadOnly: true, + } +} diff --git a/pkg/deployment/resources/pod_inspector.go b/pkg/deployment/resources/pod_inspector.go index 3f50c35dc..1a51f28e3 100644 --- a/pkg/deployment/resources/pod_inspector.go +++ b/pkg/deployment/resources/pod_inspector.go @@ -33,6 +33,7 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" "github.com/arangodb/kube-arangodb/pkg/deployment/agency/state" + "github.com/arangodb/kube-arangodb/pkg/deployment/features" "github.com/arangodb/kube-arangodb/pkg/deployment/patch" "github.com/arangodb/kube-arangodb/pkg/metrics" "github.com/arangodb/kube-arangodb/pkg/util" @@ -530,7 +531,7 @@ func (r *Resources) InspectPods(ctx context.Context, cachedStatus inspectorInter } spec := r.context.GetSpec() - allMembersReady := status.Members.AllMembersReady(spec.GetMode(), r.context.IsSyncEnabled()) + allMembersReady := status.Members.AllMembersReady(spec.GetMode(), r.context.IsSyncEnabled(), features.Gateway().Enabled() && spec.IsGatewayEnabled()) status.Conditions.Update(api.ConditionTypeReady, allMembersReady, "", "") // Update conditions diff --git a/pkg/deployment/resources/services.go b/pkg/deployment/resources/services.go index 45fef63b7..869e6b488 100644 --- a/pkg/deployment/resources/services.go +++ b/pkg/deployment/resources/services.go @@ -82,6 +82,10 @@ func (r *Resources) EnsureServices(ctx context.Context, cachedStatus inspectorIn defer metrics.SetDuration(inspectServicesDurationGauges.WithLabelValues(deploymentName), start) counterMetric := inspectedServicesCounters.WithLabelValues(deploymentName) + if features.Gateway().Enabled() && spec.IsGatewayEnabled() { + role = api.ServerGroupGateways.AsRole() + } + // Fetch existing services svcs := cachedStatus.ServicesModInterface().V1() amInspector := cachedStatus.ArangoMember().V1() diff --git a/pkg/util/k8sutil/pods.go b/pkg/util/k8sutil/pods.go index b2215843a..91359295b 100644 --- a/pkg/util/k8sutil/pods.go +++ b/pkg/util/k8sutil/pods.go @@ -641,6 +641,18 @@ func CreateVolumeWithSecret(name, secretName string) core.Volume { }, } } +func CreateVolumeWithConfigMap(name, configMapName string) core.Volume { + return core.Volume{ + Name: name, + VolumeSource: core.VolumeSource{ + ConfigMap: &core.ConfigMapVolumeSource{ + LocalObjectReference: core.LocalObjectReference{ + Name: configMapName, + }, + }, + }, + } +} func CreateVolumeWithPersitantVolumeClaim(name, claimName string) core.Volume { return core.Volume{ diff --git a/pkg/util/k8sutil/tolerations/tolerations.go b/pkg/util/k8sutil/tolerations/tolerations.go index d574f4e59..e0bfa0656 100644 --- a/pkg/util/k8sutil/tolerations/tolerations.go +++ b/pkg/util/k8sutil/tolerations/tolerations.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -134,6 +134,9 @@ func CreatePodTolerations(mode api.DeploymentMode, group api.ServerGroup) []core case api.ServerGroupSyncWorkers: notReadyDur.TimeSpan = 1 * time.Minute unreachableDur.TimeSpan = 1 * time.Minute + case api.ServerGroupGateways: + notReadyDur.TimeSpan = 15 * time.Second + unreachableDur.TimeSpan = 15 * time.Second } return []core.Toleration{NewNoExecuteToleration(TolerationKeyNodeNotReady, notReadyDur), NewNoExecuteToleration(TolerationKeyNodeUnreachable, unreachableDur), diff --git a/pkg/util/k8sutil/util.go b/pkg/util/k8sutil/util.go index 34ffd78cd..3a8a98419 100644 --- a/pkg/util/k8sutil/util.go +++ b/pkg/util/k8sutil/util.go @@ -44,7 +44,7 @@ const ( LabelKeyArangoScheduled = "deployment.arangodb.com/scheduled" // LabelKeyArangoTopology is the key of the label used to store the ArangoDeployment topology ID in LabelKeyArangoTopology = "deployment.arangodb.com/topology" - // LabelKeyArangoLeader is the key of the label used to store the current leader of a group instances. + // LabelKeyArangoLeader is the key of the label used to store the current leader of a group instances. AF only. LabelKeyArangoLeader = "deployment.arangodb.com/leader" // LabelKeyArangoActive is the key of the label used to mark members as active. LabelKeyArangoActive = "deployment.arangodb.com/active"