agones.dev/agones@v1.53.0/install/helm/agones/templates/controller.yaml (about) 1 # Copyright 2018 Google LLC All Rights Reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 {{- $replicas := (int .Values.agones.controller.replicas) }} 16 {{- if lt $replicas 1 }} 17 {{- fail "agones.controller.replica field has an invalid value!" }} 18 {{- end }} 19 apiVersion: apps/v1 20 kind: Deployment 21 metadata: 22 name: agones-controller 23 namespace: {{ .Release.Namespace }} 24 labels: 25 component: controller 26 app: {{ template "agones.name" . }} 27 chart: {{ template "agones.chart" . }} 28 release: {{ .Release.Name }} 29 heritage: {{ .Release.Service }} 30 spec: 31 selector: 32 matchLabels: 33 agones.dev/role: controller 34 app: {{ template "agones.name" . }} 35 release: {{ .Release.Name }} 36 heritage: {{ .Release.Service }} 37 replicas: {{ $replicas }} 38 strategy: 39 {{- if .Values.agones.controller.updateStrategy }} 40 {{ toYaml .Values.agones.controller.updateStrategy | indent 4 }} 41 {{- else }} 42 type: Recreate 43 {{- end }} 44 template: 45 metadata: 46 annotations: 47 {{- if eq $replicas 1 }} 48 cluster-autoscaler.kubernetes.io/safe-to-evict: {{ .Values.agones.controller.safeToEvict | quote }} 49 {{- end }} 50 {{- if .Values.agones.controller.generateTLS }} 51 revision/tls-cert: {{ .Release.Revision | quote }} 52 {{- end }} 53 {{- if and (.Values.agones.metrics.prometheusServiceDiscovery) (.Values.agones.metrics.prometheusEnabled) }} 54 prometheus.io/scrape: "true" 55 prometheus.io/port: "8080" 56 prometheus.io/path: "/metrics" 57 {{- end }} 58 {{- if .Values.agones.controller.annotations }} 59 {{- toYaml .Values.agones.controller.annotations | nindent 8 }} 60 {{- end }} 61 labels: 62 agones.dev/role: controller 63 app: {{ template "agones.name" . }} 64 release: {{ .Release.Name }} 65 heritage: {{ .Release.Service }} 66 {{- if .Values.agones.controller.labels }} 67 {{- toYaml .Values.agones.controller.labels | nindent 8 }} 68 {{- end }} 69 spec: 70 {{- if .Values.agones.controller.topologySpreadConstraints }} 71 topologySpreadConstraints: 72 {{- toYaml .Values.agones.controller.topologySpreadConstraints | nindent 8 }} 73 {{- end }} 74 affinity: 75 {{- if .Values.agones.controller.affinity }} 76 {{- if .Values.agones.requireDedicatedNodes }} 77 {{- fail "agones.controller.affinity and agones.requireDedicatedNodes cannot be set at the same time!" }} 78 {{- end}} 79 {{- end}} 80 {{- if .Values.agones.controller.affinity }} 81 {{ toYaml .Values.agones.controller.affinity | indent 8 }} 82 {{- else}} 83 nodeAffinity: 84 {{- if .Values.agones.requireDedicatedNodes }} 85 requiredDuringSchedulingIgnoredDuringExecution: 86 nodeSelectorTerms: 87 - matchExpressions: 88 {{- else}} 89 preferredDuringSchedulingIgnoredDuringExecution: 90 - weight: 1 91 preference: 92 matchExpressions: 93 {{- end }} 94 - key: agones.dev/agones-system 95 operator: Exists 96 {{- end }} 97 {{- if .Values.agones.controller.nodeSelector }} 98 nodeSelector: 99 {{ toYaml .Values.agones.controller.nodeSelector | indent 8 }} 100 {{- end }} 101 {{- if .Values.agones.controller.tolerations }} 102 tolerations: 103 {{ toYaml .Values.agones.controller.tolerations | indent 8 }} 104 {{- end }} 105 {{- if .Values.agones.createPriorityClass }} 106 priorityClassName: {{ .Values.agones.priorityClassName }} 107 {{- end }} 108 serviceAccountName: {{ .Values.agones.serviceaccount.controller.name }} 109 containers: 110 - name: agones-controller 111 image: "{{ .Values.agones.image.registry }}/{{ .Values.agones.image.controller.name}}:{{ default .Values.agones.image.tag .Values.agones.image.controller.tag }}" 112 imagePullPolicy: {{ .Values.agones.image.controller.pullPolicy }} 113 securityContext: 114 runAsNonRoot: true 115 runAsUser: 1000 116 allowPrivilegeEscalation: false 117 env: 118 # minimum port that can be exposed to GameServer traffic 119 - name: MIN_PORT 120 value: {{ .Values.gameservers.minPort | quote }} 121 # maximum port that can be exposed to GameServer traffic 122 - name: MAX_PORT 123 value: {{ .Values.gameservers.maxPort | quote }} 124 {{- if .Values.gameservers.additionalPortRanges }} 125 {{- $featureGates := include "agones.featureGates" . | fromYaml }} 126 {{- if not $featureGates.PortRanges }} 127 {{- fail "gameservers.additionalPortRanges specified without feature gate PortRanges enabled!" }} 128 {{- end }} 129 - name: ADDITIONAL_PORT_RANGES 130 value: {{ .Values.gameservers.additionalPortRanges | toJson | quote }} 131 {{- end }} 132 - name: SIDECAR_IMAGE # overwrite the GameServer sidecar image that is used 133 value: "{{ .Values.agones.image.registry }}/{{ .Values.agones.image.sdk.name}}:{{ default .Values.agones.image.tag .Values.agones.image.sdk.tag }}" 134 - name: ALWAYS_PULL_SIDECAR # set the sidecar imagePullPolicy to Always 135 value: {{ .Values.agones.image.sdk.alwaysPull | quote }} 136 - name: SIDECAR_CPU_REQUEST 137 value: {{ .Values.agones.image.sdk.cpuRequest | quote }} 138 - name: SIDECAR_CPU_LIMIT 139 value: {{ .Values.agones.image.sdk.cpuLimit | quote }} 140 - name: SIDECAR_MEMORY_REQUEST 141 value: {{ .Values.agones.image.sdk.memoryRequest | quote }} 142 - name: SIDECAR_MEMORY_LIMIT 143 value: {{ .Values.agones.image.sdk.memoryLimit | quote }} 144 - name: SIDECAR_RUN_AS_USER 145 value: "1000" 146 - name: SIDECAR_REQUESTS_RATE_LIMIT 147 value: {{ .Values.agones.sdkServer.requestsRateLimit | quote }} 148 - name: SDK_SERVICE_ACCOUNT 149 value: {{ .Values.agones.serviceaccount.sdk.name | quote }} 150 - name: PROMETHEUS_EXPORTER 151 value: {{ .Values.agones.metrics.prometheusEnabled | quote }} 152 - name: STACKDRIVER_EXPORTER 153 value: {{ .Values.agones.metrics.stackdriverEnabled | quote }} 154 - name: STACKDRIVER_LABELS 155 value: {{ .Values.agones.metrics.stackdriverLabels | quote }} 156 - name: GCP_PROJECT_ID 157 value: {{ .Values.agones.metrics.stackdriverProjectID | quote }} 158 - name: NUM_WORKERS 159 value: {{ .Values.agones.controller.numWorkers | quote }} 160 - name: MAX_CREATION_PARALLELISM 161 value: {{ .Values.agones.controller.maxCreationParallelism | quote }} 162 - name: MAX_GAME_SERVER_CREATIONS_PER_BATCH 163 value: {{ .Values.agones.controller.maxGameServerCreationsPerBatch | quote }} 164 - name: MAX_DELETION_PARALLELISM 165 value: {{ .Values.agones.controller.maxDeletionParallelism | quote }} 166 - name: MAX_GAME_SERVER_DELETIONS_PER_BATCH 167 value: {{ .Values.agones.controller.maxGameServerDeletionsPerBatch | quote }} 168 - name: MAX_POD_PENDING_COUNT 169 value: {{ .Values.agones.controller.maxPodPendingCount | quote }} 170 - name: API_SERVER_QPS 171 value: {{ .Values.agones.controller.apiServerQPS | quote }} 172 - name: API_SERVER_QPS_BURST 173 value: {{ .Values.agones.controller.apiServerQPSBurst | quote }} 174 - name: LOG_LEVEL 175 value: {{ .Values.agones.controller.logLevel | quote }} 176 - name: FEATURE_GATES 177 value: {{ .Values.agones.featureGates | quote }} 178 - name: ALLOCATION_BATCH_WAIT_TIME 179 value: {{ .Values.agones.controller.allocationBatchWaitTime | quote }} 180 - name: CLOUD_PRODUCT 181 value: {{ .Values.agones.cloudProduct | quote }} 182 {{- if .Values.agones.controller.persistentLogs }} 183 - name: LOG_DIR 184 value: "/logs" 185 - name: LOG_SIZE_LIMIT_MB 186 value: {{ .Values.agones.controller.persistentLogsSizeLimitMB | quote }} 187 {{- end }} 188 - name: POD_NAME 189 valueFrom: 190 fieldRef: 191 fieldPath: metadata.name 192 - name: POD_NAMESPACE 193 valueFrom: 194 fieldRef: 195 fieldPath: metadata.namespace 196 - name: CONTAINER_NAME 197 value: "agones-controller" 198 {{- if gt $replicas 1 }} 199 - name: LEADER_ELECTION 200 value: "true" 201 {{- end }} 202 ports: 203 - name: webhooks 204 containerPort: 8081 205 - name: http 206 containerPort: 8080 207 livenessProbe: 208 httpGet: 209 path: /live 210 port: http 211 initialDelaySeconds: {{ .Values.agones.controller.healthCheck.initialDelaySeconds }} 212 periodSeconds: {{ .Values.agones.controller.healthCheck.periodSeconds }} 213 failureThreshold: {{ .Values.agones.controller.healthCheck.failureThreshold }} 214 timeoutSeconds: {{ .Values.agones.controller.healthCheck.timeoutSeconds }} 215 resources: 216 {{- if .Values.agones.controller.resources }} 217 {{ toYaml .Values.agones.controller.resources | indent 10 }} 218 {{- else}} 219 limits: 220 ephemeral-storage: {{ add .Values.agones.controller.persistentLogsSizeLimitMB 100 | printf "%dMi" }} 221 requests: 222 ephemeral-storage: {{ add .Values.agones.controller.persistentLogsSizeLimitMB 100 | printf "%dMi" }} 223 {{- end }} 224 volumeMounts: 225 - name: certs 226 mountPath: /certs 227 readOnly: true 228 {{- if .Values.agones.controller.persistentLogs }} 229 - name: logs 230 mountPath: /logs 231 readOnly: false 232 {{- end }} 233 volumes: 234 - name: certs 235 secret: 236 secretName: {{ template "agones.fullname" . }}-cert 237 {{- if .Values.agones.controller.customCertSecretPath }} 238 items: 239 {{- toYaml .Values.agones.controller.customCertSecretPath | nindent 10 }} 240 {{- end }} 241 {{- if .Values.agones.controller.persistentLogs }} 242 - name: logs 243 emptyDir: {} 244 {{- end }} 245 {{- if .Values.agones.image.controller.pullSecret }} 246 imagePullSecrets: 247 - name: {{.Values.agones.image.controller.pullSecret}} 248 {{- end }} 249 --- 250 {{- if gt $replicas 1 }} 251 apiVersion: policy/v1 252 kind: PodDisruptionBudget 253 metadata: 254 name: agones-controller-pdb 255 spec: 256 {{- if .Values.agones.controller.pdb.minAvailable }} 257 {{- if .Values.agones.controller.pdb.maxUnavailable }} 258 {{- fail "minAvailable and maxUnavailable are mutually exclusive!" }} 259 {{- end}} 260 {{- end}} 261 minAvailable: {{ .Values.agones.controller.pdb.minAvailable }} 262 maxUnavailable: {{ .Values.agones.controller.pdb.maxUnavailable }} 263 selector: 264 matchLabels: 265 agones.dev/role: controller 266 app: {{ template "agones.name" . }} 267 release: {{ .Release.Name }} 268 heritage: {{ .Release.Service }} 269 {{- end }}