provisioning-catalog/components/listmonk/cluster/templates/deployment.yaml.j2

172 lines
6.5 KiB
Django/Jinja

apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ taskserv.name }}
namespace: {{ taskserv.namespace }}
labels:
app.kubernetes.io/name: {{ taskserv.name }}
app.kubernetes.io/managed-by: provisioning
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: {{ taskserv.name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ taskserv.name }}
app.kubernetes.io/managed-by: provisioning
spec:
{% if taskserv.placement is defined and taskserv.placement.node_class %}
affinity:
nodeAffinity:
{% if taskserv.placement.mode == "require" %}
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-class.{{ taskserv.placement.node_class.0 }}
operator: In
values: ["true"]
{% else %}
preferredDuringSchedulingIgnoredDuringExecution:
{% for c in taskserv.placement.node_class %}
- weight: {{ 100 - loop.index0 * 10 }}
preference:
matchExpressions:
- key: node-class.{{ c }}
operator: In
values: ["true"]
{% endfor %}
{% endif %}
{% endif %}
initContainers:
- name: listmonk-install
image: {{ taskserv.image }}:{{ taskserv.image_tag }}
command: ["/bin/sh", "-c"]
args:
- |
set -e
echo "[init] running listmonk --install --yes (idempotent schema init)..."
./listmonk --install --yes --config /listmonk/config.toml
echo "[init] schema init complete"
env:
- name: LISTMONK_app__address
value: "0.0.0.0:{{ taskserv.http_port }}"
- name: LISTMONK_db__host
value: "{{ taskserv.db_host }}"
- name: LISTMONK_db__port
value: "{{ taskserv.db_port }}"
- name: LISTMONK_db__user
value: "{{ taskserv.db_user }}"
- name: LISTMONK_db__database
value: "{{ taskserv.db_name }}"
- name: LISTMONK_app__admin_username
value: "{{ taskserv.admin_username }}"
envFrom:
- secretRef:
name: {{ taskserv.name }}-credentials
volumeMounts:
- name: uploads
mountPath: {{ taskserv.uploads_path }}
containers:
- name: {{ taskserv.name }}
image: {{ taskserv.image }}:{{ taskserv.image_tag }}
command: ["./listmonk"]
args: ["--config", "/listmonk/config.toml"]
ports:
- name: http
containerPort: {{ taskserv.http_port }}
protocol: TCP
env:
- name: LISTMONK_app__address
value: "0.0.0.0:{{ taskserv.http_port }}"
- name: LISTMONK_db__host
value: "{{ taskserv.db_host }}"
- name: LISTMONK_db__port
value: "{{ taskserv.db_port }}"
- name: LISTMONK_db__user
value: "{{ taskserv.db_user }}"
- name: LISTMONK_db__database
value: "{{ taskserv.db_name }}"
- name: LISTMONK_app__admin_username
value: "{{ taskserv.admin_username }}"
- name: LISTMONK_upload__provider
value: "filesystem"
- name: LISTMONK_upload__filesystem__upload_path
value: "{{ taskserv.uploads_path }}"
- name: LISTMONK_upload__filesystem__upload_uri
value: "/uploads"
envFrom:
- secretRef:
name: {{ taskserv.name }}-credentials
volumeMounts:
- name: uploads
mountPath: {{ taskserv.uploads_path }}
{% if taskserv.probes is defined and taskserv.probes.readiness is defined %}
readinessProbe:
{% if taskserv.probes.readiness.type == "tcp" %}
tcpSocket:
port: {{ taskserv.probes.readiness.port | default(value=taskserv.http_port) }}
{% else %}
httpGet:
path: {{ taskserv.probes.readiness.path }}
port: {{ taskserv.probes.readiness.port | default(value=taskserv.http_port) }}
{% endif %}
initialDelaySeconds: {{ taskserv.probes.readiness.initial_delay }}
periodSeconds: {{ taskserv.probes.readiness.period }}
failureThreshold: {{ taskserv.probes.readiness.failure_threshold }}
{% else %}
readinessProbe:
httpGet:
path: /health
port: {{ taskserv.http_port }}
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 6
{% endif %}
{% if taskserv.probes is defined and taskserv.probes.liveness is defined %}
livenessProbe:
{% if taskserv.probes.liveness.type == "tcp" %}
tcpSocket:
port: {{ taskserv.probes.liveness.port | default(value=taskserv.http_port) }}
{% else %}
httpGet:
path: {{ taskserv.probes.liveness.path }}
port: {{ taskserv.probes.liveness.port | default(value=taskserv.http_port) }}
{% endif %}
initialDelaySeconds: {{ taskserv.probes.liveness.initial_delay }}
periodSeconds: {{ taskserv.probes.liveness.period }}
failureThreshold: {{ taskserv.probes.liveness.failure_threshold }}
{% else %}
livenessProbe:
httpGet:
path: /health
port: {{ taskserv.http_port }}
initialDelaySeconds: 30
periodSeconds: 30
failureThreshold: 3
{% endif %}
{% if taskserv.resources_effective is defined %}
resources:
requests:
cpu: "{{ taskserv.resources_effective.cpu.request }}"
memory: "{{ taskserv.resources_effective.memory.request }}"
limits:
cpu: "{{ taskserv.resources_effective.cpu.limit }}"
memory: "{{ taskserv.resources_effective.memory.limit }}"
{% else %}
resources:
requests:
cpu: "50m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
{% endif %}
terminationGracePeriodSeconds: 30
volumes:
- name: uploads
persistentVolumeClaim:
claimName: {{ taskserv.name }}-uploads