diff --git a/deploy/templates/deployment.yaml b/deploy/templates/deployment.yaml index 84f9ff4d..618aac6c 100644 --- a/deploy/templates/deployment.yaml +++ b/deploy/templates/deployment.yaml @@ -20,7 +20,21 @@ spec: image: "{{ .Values.arsserver.image.repository }}:{{ .Values.arsserver.image.tag }}" imagePullPolicy: {{ .Values.arsserver.image.PullPolicy }} command: ["/bin/sh"] - args: ["-c", "/bin/bash /ars/config/startup.sh && python tr_sys/manage.py runserver 0.0.0.0:8000 --noreload"] + args: + - "-c" + - >- + /bin/bash /ars/config/startup.sh && + gunicorn tr_sys.wsgi:application + --chdir /ars/tr_sys + --bind 0.0.0.0:{{ .Values.arsserver.containerPort }} + --worker-class {{ .Values.arsserver.gunicorn.workerClass | default "gthread" }} + --workers {{ .Values.arsserver.gunicorn.workers | default 4 }} + --threads {{ .Values.arsserver.gunicorn.threads | default 4 }} + --timeout {{ .Values.arsserver.gunicorn.timeout | default 360 }} + --graceful-timeout {{ .Values.arsserver.gunicorn.gracefulTimeout | default 120 }} + --max-requests {{ .Values.arsserver.gunicorn.maxRequests | default 1000 }} + --max-requests-jitter {{ .Values.arsserver.gunicorn.maxRequestsJitter | default 100 }} + --access-logfile - --error-logfile - ports: - containerPort: {{ .Values.arsserver.containerPort }} volumeMounts: diff --git a/deploy/values.yaml b/deploy/values.yaml index 239554f8..57256f33 100644 --- a/deploy/values.yaml +++ b/deploy/values.yaml @@ -10,7 +10,18 @@ arsserver: repository: 853771734544.dkr.ecr.us-east-1.amazonaws.com/translator-ars tag: DOCKER_VERSION_VALUE PullPolicy: Always - containerPort: 8000 + containerPort: 8000 + gunicorn: + workerClass: gthread + # Tune workers/threads to the pod's CPU/memory allocation. + # The general recommendation is workers = 2 * cpu cores + 1 + # With a gthread worker, concurrency ~= workers * threads. + workers: 4 + threads: 4 + timeout: 360 # hard kill a request so a worker isn't hogged when it's stuck on one query + gracefulTimeout: 120 # padding time for workers to complete running queries before restarting + maxRequests: 1000 # recycle workers periodically to prevent issues with memory/connection leaks etc + maxRequestsJitter: 100 # randomize when workers restart to avoid happening all at once env: TR_ENV: TR_ENV_VALUE TR_APPRAISE: TR_APPRAISE_VALUE @@ -28,7 +39,7 @@ rabbitmq: repository: 853771734544.dkr.ecr.us-east-1.amazonaws.com/translator-rabbitmq tag: 4.0 PullPolicy: Always - containerPort: 5672 + containerPort: 5672 redis: image: @@ -46,7 +57,7 @@ affinity: - key: application operator: In values: - - ars + - ars tolerations: - key: "transltr" value: "ars" @@ -66,8 +77,8 @@ ingress: alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS-1-2-Ext-2018-06 alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' - alb.ingress.kubernetes.io/success-codes: '200' + alb.ingress.kubernetes.io/success-codes: '200' alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=600 - host: ARS_HOSTNAME_VALUE + host: ARS_HOSTNAME_VALUE diff --git a/requirements.txt b/requirements.txt index d7e1e596..de8d0a0f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -139,6 +139,7 @@ sphinx==4.5.0 elasticsearch~=7.9.1 tblib~=1.7.0 gevent~=21.8.0 +gunicorn~=22.0.0 mysqlclient~=1.4.3 colorama~=0.4.4 jinja2~=3.1.2