diff --git a/install/helm/agones/templates/controller.yaml b/install/helm/agones/templates/controller.yaml index 8d517949e9..2d8a512e2b 100644 --- a/install/helm/agones/templates/controller.yaml +++ b/install/helm/agones/templates/controller.yaml @@ -60,6 +60,10 @@ spec: release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: + {{- if .Values.agones.controller.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml .Values.agones.controller.topologySpreadConstraints | nindent 8 }} + {{- end }} affinity: {{- if .Values.agones.controller.affinity }} {{- if .Values.agones.requireDedicatedNodes }} diff --git a/install/helm/agones/templates/extensions-deployment.yaml b/install/helm/agones/templates/extensions-deployment.yaml index 02570e339f..9e7dc35d08 100644 --- a/install/helm/agones/templates/extensions-deployment.yaml +++ b/install/helm/agones/templates/extensions-deployment.yaml @@ -53,6 +53,10 @@ spec: release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: + {{- if .Values.agones.extensions.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml .Values.agones.extensions.topologySpreadConstraints | nindent 8 }} + {{- end }} affinity: {{- if .Values.agones.extensions.affinity }} {{- if .Values.agones.requireDedicatedNodes }} diff --git a/install/helm/agones/templates/ping.yaml b/install/helm/agones/templates/ping.yaml index 96edd3f5aa..3b9092de7d 100644 --- a/install/helm/agones/templates/ping.yaml +++ b/install/helm/agones/templates/ping.yaml @@ -48,6 +48,10 @@ spec: {{- toYaml .Values.agones.ping.annotations | nindent 8 }} {{- end }} spec: + {{- if .Values.agones.ping.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml .Values.agones.ping.topologySpreadConstraints | nindent 8 }} + {{- end }} affinity: {{- if .Values.agones.ping.affinity }} {{- if .Values.agones.requireDedicatedNodes }} diff --git a/install/helm/agones/templates/service/allocation.yaml b/install/helm/agones/templates/service/allocation.yaml index a52312bcbc..98718983f3 100644 --- a/install/helm/agones/templates/service/allocation.yaml +++ b/install/helm/agones/templates/service/allocation.yaml @@ -177,6 +177,10 @@ spec: {{- toYaml .Values.agones.allocator.annotations | nindent 8 }} {{- end }} spec: + {{- if .Values.agones.allocator.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml .Values.agones.allocator.topologySpreadConstraints | nindent 8 }} + {{- end }} affinity: {{- if .Values.agones.allocator.affinity }} {{- if .Values.agones.requireDedicatedNodes }} diff --git a/install/helm/agones/values.yaml b/install/helm/agones/values.yaml index 200b43c1e5..5042a10318 100644 --- a/install/helm/agones/values.yaml +++ b/install/helm/agones/values.yaml @@ -92,6 +92,7 @@ agones: replicas: 2 pdb: minAvailable: 1 + topologySpreadConstraints: {} extensions: resources: {} # requests: @@ -139,6 +140,7 @@ agones: initialDelaySeconds: 3 periodSeconds: 3 failureThreshold: 3 + topologySpreadConstraints: {} ping: install: true pdb: @@ -180,6 +182,7 @@ agones: periodSeconds: 3 failureThreshold: 3 timeoutSeconds: 1 + topologySpreadConstraints: {} allocator: install: true pdb: @@ -248,6 +251,7 @@ agones: remoteAllocationTimeout: 10s totalRemoteAllocationTimeout: 30s allocationBatchWaitTime: 500ms + topologySpreadConstraints: {} image: registry: us-docker.pkg.dev/agones-images/release tag: 1.38.0-dev diff --git a/site/content/en/docs/Installation/Install Agones/helm.md b/site/content/en/docs/Installation/Install Agones/helm.md index 2633e1971d..01a0311114 100644 --- a/site/content/en/docs/Installation/Install Agones/helm.md +++ b/site/content/en/docs/Installation/Install Agones/helm.md @@ -148,6 +148,7 @@ The following tables lists the configurable parameters of the Agones chart and t | `agones.image.extensions.pullPolicy` | Image pull policy for extensions | `IfNotPresent` | +{{% feature expiryVersion="1.38.0" %}} ### Agones Controller | Parameter | Description | Default | @@ -313,6 +314,179 @@ The following tables lists the configurable parameters of the Agones chart and t | `agones.extensions.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with maxUnavailable | `1` | | `agones.extensions.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage Mutually Exclusive with `minAvailable` | \`\` | | `agones.extensions.replicas` | The number of replicas to run in the deployment | `2` | +{{% /feature %}} + +{{% feature publishVersion="1.38.0" %}} +### Agones Controller + +| Parameter | Description | Default | +|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| +| `agones.controller.replicas` | The number of replicas to run in the `agones-controller` deployment. | `2` | +| `agones.controller.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with `maxUnavailable` | `1` | +| `agones.controller.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage Mutually Exclusive with `minAvailable` | \`\` | +| `agones.controller.http.port` | Port to use for liveness probe service and metrics | `8080` | +| `agones.controller.healthCheck.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | +| `agones.controller.healthCheck.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | +| `agones.controller.healthCheck.failureThreshold` | Number of times before giving up (in seconds) | `3` | +| `agones.controller.healthCheck.timeoutSeconds` | Number of seconds after which the probe times out (in seconds) | `1` | +| `agones.controller.resources` | Controller [resource requests/limit][resources] | `{}` | +| `agones.controller.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | +| `agones.controller.tlsCert` | Custom TLS certificate provided as a string | \`\` | +| `agones.controller.tlsKey` | Custom TLS private key provided as a string | \`\` | +| `agones.controller.nodeSelector` | Controller [node labels][nodeSelector] for pod assignment | `{}` | +| `agones.controller.tolerations` | Controller [toleration][toleration] labels for pod assignment | `[]` | +| `agones.controller.affinity` | Controller [affinity][affinity] settings for pod assignment | `{}` | +| `agones.controller.annotations` | [Annotations][annotations] added to the Agones controller pods | `{}` | +| `agones.controller.numWorkers` | Number of workers to spin per resource type | `100` | +| `agones.controller.apiServerQPS` | Maximum sustained queries per second that controller should be making against API Server | `400` | +| `agones.controller.apiServerQPSBurst` | Maximum burst queries per second that controller should be making against API Server | `500` | +| `agones.controller.logLevel` | Agones Controller Log level. Log only entries with that severity and above | `info` | +| `agones.controller.persistentLogs` | Store Agones controller logs in a temporary volume attached to a container for debugging | `true` | +| `agones.controller.persistentLogsSizeLimitMB` | Maximum total size of all Agones container logs in MB | `10000` | +| `agones.controller.disableSecret` | Disables the creation of any allocator secrets. If true, you MUST provide the `{agones.releaseName}-cert` secrets before installation. | `false` | +| `agones.controller.customCertSecretPath` | Remap cert-manager path to server.crt and server.key | `{}` | +| `agones.controller.allocationApiService.annotations` | [Annotations][annotations] added to the Agones apiregistration | `{}` | +| `agones.controller.allocationApiService.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.controller.validatingWebhook.annotations` | [Annotations][annotations] added to the Agones validating webhook | `{}` | +| `agones.controller.validatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.controller.mutatingWebhook.annotations` | [Annotations][annotations] added to the Agones mutating webhook | `{}` | +| `agones.controller.mutatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.controller.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in controller mode | `500ms` | +| `agones.controller.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | + +### Ping Service + +| Parameter | Description | Default | +|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| +| `agones.ping.install` | Whether to install the [ping service][ping] | `true` | +| `agones.ping.replicas` | The number of replicas to run in the deployment | `2` | +| `agones.ping.http.expose` | Expose the http ping service via a Service | `true` | +| `agones.ping.http.response` | The string response returned from the http service | `ok` | +| `agones.ping.http.port` | The port to expose on the service | `80` | +| `agones.ping.http.serviceType` | The [Service Type][service] of the HTTP Service | `LoadBalancer` | +| `agones.ping.http.nodePort` | Static node port to use for HTTP ping service. (Only applies when `agones.ping.http.serviceType` is `NodePort`.) | `0` | +| `agones.ping.http.loadBalancerIP` | The [Load Balancer IP][loadBalancer] of the HTTP Service load balancer. Only works if the Kubernetes provider supports this option. | \`\` | +| `agones.ping.http.loadBalancerSourceRanges` | The [Load Balancer SourceRanges][loadBalancer] of the HTTP Service load balancer. Only works if the Kubernetes provider supports this option. | `[]` | +| `agones.ping.http.annotations` | [Annotations][annotations] added to the Agones ping http service | `{}` | +| `agones.ping.udp.expose` | Expose the udp ping service via a Service | `true` | +| `agones.ping.udp.rateLimit` | Number of UDP packets the ping service handles per instance, per second, per sender | `20` | +| `agones.ping.udp.port` | The port to expose on the service | `80` | +| `agones.ping.udp.serviceType` | The [Service Type][service] of the UDP Service | `LoadBalancer` | +| `agones.ping.udp.nodePort` | Static node port to use for UDP ping service. (Only applies when `agones.ping.udp.serviceType` is `NodePort`.) | `0` | +| `agones.ping.udp.loadBalancerIP` | The [Load Balancer IP][loadBalancer] of the UDP Service load balancer. Only works if the Kubernetes provider supports this option. | \`\` | +| `agones.ping.udp.loadBalancerSourceRanges` | The [Load Balancer SourceRanges][loadBalancer] of the UDP Service load balancer. Only works if the Kubernetes provider supports this option. | `[]` | +| `agones.ping.udp.annotations` | [Annotations][annotations] added to the Agones ping udp service | `{}` | +| `agones.ping.healthCheck.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | +| `agones.ping.healthCheck.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | +| `agones.ping.healthCheck.failureThreshold` | Number of times before giving up (in seconds) | `3` | +| `agones.ping.healthCheck.timeoutSeconds` | Number of seconds after which the probe times out (in seconds) | `1` | +| `agones.ping.resources` | Ping pods [resource requests/limit][resources] | `{}` | +| `agones.ping.nodeSelector` | Ping [node labels][nodeSelector] for pod assignment | `{}` | +| `agones.ping.tolerations` | Ping [toleration][toleration] labels for pod assignment | `[]` | +| `agones.ping.affinity` | Ping [affinity][affinity] settings for pod assignment | `{}` | +| `agones.ping.annotations` | [Annotations][annotations] added to the Agones ping pods | `{}` | +| `agones.ping.updateStrategy` | The [strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) to apply to the allocator deployment | `{}` | +| `agones.ping.pdb.enabled` | Set to `true` to enable the creation of a [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for the ping deployment | `false` | +| `agones.ping.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with `maxUnavailable` | `1` | +| `agones.ping.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage Mutually Exclusive with `minAvailable` | \`\` | +| `agones.ping.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | + +### Allocator Service + + +| Parameter | Description | Default | +|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| +| `agones.allocator.apiServerQPS` | Maximum sustained queries per second that an allocator should be making against API Server | `400` | +| `agones.allocator.apiServerQPSBurst` | Maximum burst queries per second that an allocator should be making against API Server | `500` | +| `agones.allocator.remoteAllocationTimeout` | Remote allocation call timeout. | `10s` | +| `agones.allocator.totalRemoteAllocationTimeout` | Total remote allocation timeout including retries. | `30s` | +| `agones.allocator.logLevel` | Agones Allocator Log level. Log only entries with that severity and above | `info` | +| `agones.allocator.install` | Whether to install the [allocator service][allocator] | `true` | +| `agones.allocator.replicas` | The number of replicas to run in the deployment | `3` | +| `agones.allocator.service.name` | Service name for the allocator | `agones-allocator` | +| `agones.allocator.service.serviceType` | The [Service Type][service] of the HTTP Service | `LoadBalancer` | +| `agones.allocator.service.clusterIP` | The [Cluster IP][clusterIP] of the Agones allocator. If you want [Headless Service][headless-service] for Agones Allocator, you can set `None` to clusterIP. | \`\` | +| `agones.allocator.service.loadBalancerIP` | The [Load Balancer IP][loadBalancer] of the Agones allocator load balancer. Only works if the Kubernetes provider supports this option. | \`\` | +| `agones.allocator.service.loadBalancerSourceRanges` | The [Load Balancer SourceRanges][loadBalancer] of the Agones allocator load balancer. Only works if the Kubernetes provider supports this option. | `[]` | +| `agones.allocator.service.annotations` | [Annotations][annotations] added to the Agones allocator service | `{}` | +| `agones.allocator.service.http.enabled` | If true the [allocator service][allocator] will respond to [REST requests][rest-requests] | `true` | +| `agones.allocator.service.http.appProtocol` | The `appProtocol` to set on the Service for the http allocation port. If left blank, no value is set. | `` | +| `agones.allocator.service.http.port` | The port that is exposed externally by the [allocator service][allocator] for [REST requests][rest-requests] | `443` | +| `agones.allocator.service.http.portName` | The name of exposed port | `http` | +| `agones.allocator.service.http.targetPort` | The port that is used by the allocator pod to listen for [REST requests][rest-requests]. Note that the allocator server cannot bind to low numbered ports. | `8443` | +| `agones.allocator.service.http.nodePort` | If the ServiceType is set to "NodePort", this is the NodePort that the allocator http service is exposed on. | `30000-32767` | +| `agones.allocator.service.grpc.enabled` | If true the [allocator service][allocator] will respond to [gRPC requests][grpc-requests] | `true` | +| `agones.allocator.service.grpc.port` | The port that is exposed externally by the [allocator service][allocator] for [gRPC requests][grpc-requests] | `443` | +| `agones.allocator.service.grpc.portName` | The name of exposed port | `` | +| `agones.allocator.service.grpc.appProtocol` | The `appProtocol` to set on the Service for the gRPC allocation port. If left blank, no value is set. | `` | +| `agones.allocator.service.grpc.nodePort` | If the ServiceType is set to "NodePort", this is the NodePort that the allocator gRPC service is exposed on. | `30000-32767` | +| `agones.allocator.service.grpc.targetPort` | The port that is used by the allocator pod to listen for [gRPC requests][grpc-requests]. Note that the allocator server cannot bind to low numbered ports. | `8443` | +| `agones.allocator.generateClientTLS` | Set to true to generate client TLS certificates or false to provide certificates in `certs/allocator/allocator-client.default/*` | `true` | +| `agones.allocator.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | +| `agones.allocator.disableMTLS` | Turns off client cert authentication for incoming connections to the allocator. | `false` | +| `agones.allocator.disableTLS` | Turns off TLS security for incoming connections to the allocator. | `false` | +| `agones.allocator.disableSecretCreation` | Disables the creation of any allocator secrets. If true, you MUST provide the `allocator-tls`, `allocator-tls-ca`, and `allocator-client-ca` secrets before installation. | `false` | +| `agones.allocator.tlsCert` | Custom TLS certificate provided as a string | \`\` | +| `agones.allocator.tlsKey` | Custom TLS private key provided as a string | \`\` | +| `agones.allocator.clientCAs` | A map of secret key names to allowed client CA certificates provided as strings | `{}` | +| `agones.allocator.tolerations` | Allocator [toleration][toleration] labels for pod assignment | `[]` | +| `agones.allocator.affinity` | Allocator [affinity][affinity] settings for pod assignment | `{}` | +| `agones.allocator.annotations` | [Annotations][annotations] added to the Agones allocator pods | `{}` | +| `agones.allocator.resources` | Allocator pods [resource requests/limit][resources] | `{}` | +| `agones.allocator.labels` | [Labels][labels] Added to the Agones Allocator pods | `{}` | +| `agones.allocator.readiness.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | +| `agones.allocator.readiness.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | +| `agones.allocator.readiness.failureThreshold` | Number of times before giving up (in seconds) | `3` | +| `agones.allocator.nodeSelector` | Allocator [node labels][nodeSelector] for pod assignment | `{}` | +| `agones.allocator.serviceMetrics.name` | Second Service name for the allocator | `agones-allocator-metrics-service` | +| `agones.allocator.serviceMetrics.annotations` | [Annotations][annotations] added to the Agones allocator second Service | `{}` | +| `agones.allocator.serviceMetrics.http.port` | The port that is exposed within cluster by the [allocator service][allocator] for http requests | `8080` | +| `agones.allocator.serviceMetrics.http.portName` | The name of exposed port | `http` | +| `agones.allocator.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in allocator mode | `500ms` | +| `agones.allocator.updateStrategy` | The [strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) to apply to the ping deployment | `{}` | +| `agones.allocator.pdb.enabled` | Set to `true` to enable the creation of a [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for the allocator deployment | `false` | +| `agones.allocator.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with `maxUnavailable` | `1` | +| `agones.allocator.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage. Mutually Exclusive with `minAvailable` | \`\` | +| `agones.allocator.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | + + +### Extensions + +| Parameter | Description | Default | +|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| +| `agones.extensions.http.port` | Port to use for liveness probe service and metrics | `8080` | +| `agones.extensions.healthCheck.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | +| `agones.extensions.healthCheck.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | +| `agones.extensions.healthCheck.failureThreshold` | Number of times before giving up (in seconds) | `3` | +| `agones.extensions.healthCheck.timeoutSeconds` | Number of seconds after which the probe times out (in seconds) | `1` | +| `agones.extensions.resources` | Extensions [resource requests/limit][resources] | `{}` | +| `agones.extensions.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | +| `agones.extensions.tlsCert` | Custom TLS certificate provided as a string | \`\` | +| `agones.extensions.tlsKey` | Custom TLS private key provided as a string | \`\` | +| `agones.extensions.nodeSelector` | Extensions [node labels][nodeSelector] for pod assignment | `{}` | +| `agones.extensions.tolerations` | Extensions [toleration][toleration] labels for pod assignment | `[]` | +| `agones.extensions.affinity` | Extensions [affinity][affinity] settings for pod assignment | `{}` | +| `agones.extensions.annotations` | [Annotations][annotations] added to the Agones extensions pods | `{}` | +| `agones.extensions.numWorkers` | Number of workers to spin per resource type | `100` | +| `agones.extensions.apiServerQPS` | Maximum sustained queries per second that extensions should be making against API Server | `400` | +| `agones.extensions.apiServerQPSBurst` | Maximum burst queries per second that extensions should be making against API Server | `500` | +| `agones.extensions.logLevel` | Agones Extensions Log level. Log only entries with that severity and above | `info` | +| `agones.extensions.persistentLogs` | Store Agones extensions logs in a temporary volume attached to a container for debugging | `true` | +| `agones.extensions.persistentLogsSizeLimitMB` | Maximum total size of all Agones container logs in MB | `10000` | +| `agones.extensions.disableSecret` | Disables the creation of any allocator secrets. If true, you MUST provide the `{agones.releaseName}-cert` secrets before installation. | `false` | +| `agones.extensions.customCertSecretPath` | Remap cert-manager path to server.crt and server.key | `{}` | +| `agones.extensions.allocationApiService.annotations` | [Annotations][annotations] added to the Agones apiregistration | `{}` | +| `agones.extensions.allocationApiService.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.extensions.validatingWebhook.annotations` | [Annotations][annotations] added to the Agones validating webhook | `{}` | +| `agones.extensions.validatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.extensions.mutatingWebhook.annotations` | [Annotations][annotations] added to the Agones mutating webhook | `{}` | +| `agones.extensions.mutatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager | `false` | +| `agones.extensions.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in controller mode | `500ms` | +| `agones.extensions.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with maxUnavailable | `1` | +| `agones.extensions.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage Mutually Exclusive with `minAvailable` | \`\` | +| `agones.extensions.replicas` | The number of replicas to run in the deployment | `2` | +| `agones.extensions.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | +{{% /feature %}} ### GameServers