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 }}