#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#

apiVersion: apps/v1  # for versions before 1.8.0 use apps/v1beta1, before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  labels:
    app: apisix-gw
  name: apisix-gw-deployment
  # namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apisix-gw
  template:
    metadata:
      labels:
        app: apisix-gw
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - apisix-gw
                topologyKey: kubernetes.io/hostname
              weight: 100
      initContainers:
        - command:
            - /bin/sh
            - -c
            - |
              sysctl -w net.core.somaxconn=65535
              sysctl -w net.ipv4.ip_local_port_range="1024 65535"
              sysctl -w net.ipv4.tcp_max_syn_backlog=8192
              sysctl -w fs.file-max=1048576
              sysctl -w fs.inotify.max_user_instances=16384
              sysctl -w fs.inotify.max_user_watches=524288
              sysctl -w fs.inotify.max_queued_events=16384
          image: busybox:latest
          imagePullPolicy: IfNotPresent
          name: init-sysctl
          resources: {}
          securityContext:
            privileged: true
            procMount: Default
      restartPolicy: Always

      containers:
        - env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
          image: "apache/apisix:alpine-local"
          imagePullPolicy: IfNotPresent
          name: apisix-gw-deployment
          ports:
            - containerPort: 9080
              name: http
              protocol: TCP
            - containerPort: 9443
              name: https
              protocol: TCP
            - containerPort: 9180
              name: admin-port
              protocol: TCP
          readinessProbe:
            failureThreshold: 6
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 9080
            timeoutSeconds: 1
          volumeMounts:
            - mountPath: /usr/local/apisix/conf/config.yaml
              name: apisix-config-yaml-configmap
              subPath: config.yaml
            - mountPath: /etc/localtime
              name: localtime
              readOnly: true
      volumes:
        - configMap:
            name: apisix-gw-config.yaml
          name: apisix-config-yaml-configmap
        - hostPath:
            path: /etc/localtime
            type: File
          name: localtime
