k8s/airflow/chart/airflow/templates/webserver/webserver-deployment.yaml (98 lines of code) (raw):
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-web
labels:
app: {{ include "airflow.labels.app" . }}
component: web
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.web.replicas }}
strategy:
type: RollingUpdate
rollingUpdate:
## multiple web pods can safely run concurrently
maxSurge: 25%
maxUnavailable: 0
selector:
matchLabels:
app: {{ include "airflow.labels.app" . }}
component: web
name: {{ .Release.Name }}
template:
metadata:
annotations:
cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
labels:
app: {{ include "airflow.labels.app" . }}
component: web
name: {{ .Release.Name }}
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 60
serviceAccountName: {{ include "airflow.serviceAccountName" . }}
initContainers:
{{- include "airflow.init_container.check_db" . | indent 8 }}
{{- include "airflow.init_container.wait_for_db_migrations" . | indent 8 }}
containers:
- name: airflow-web
{{- include "airflow.image" . | indent 10 }}
ports:
- name: web
containerPort: 8080
protocol: TCP
envFrom:
{{- include "airflow.envFrom" . | indent 12 }}
env:
{{- include "airflow.env" . | indent 12 }}
- name: _AIRFLOW_WWW_USER_CREATE
value: 'true'
command:
{{- include "airflow.command" . | indent 12 }}
args:
- "webserver"
livenessProbe: &probes
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 6
httpGet:
scheme: HTTP
path: /health
port: web
readinessProbe: *probes
volumeMounts:
{{- include "airflow.volumeMounts" . | indent 12 }}
- name: webserver-config
mountPath: /opt/airflow/webserver_config.py
subPath: webserver_config.py
readOnly: true
{{ if .Values.metrics.exporter.enabled }}
- name: stackdriver-exporter
image: {{ .Values.metrics.image }}
ports:
- name: profiler
containerPort: 6060
command:
- /monitor
- --stackdriver-prefix=custom.googleapis.com
- --source=airflow:http://localhost:8080/admin/metrics
- --pod-id=$(POD_NAME)
- --namespace-id=$(POD_NAMESPACE)
- --monitored-resource-types=k8s
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
{{ end }}
volumes:
{{- include "airflow.volumes" . | indent 8 }}
- name: webserver-config
secret:
secretName: {{ .Release.Name }}-webserver-config
defaultMode: 0644