Skip to content

Commit 3ea70f2

Browse files
committed
refactor: helm to kustomize (wip)
1 parent e35b46e commit 3ea70f2

5 files changed

Lines changed: 656 additions & 0 deletions

File tree

k8s/datatracker.yaml

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: deployment
5+
spec:
6+
replicas: 1
7+
revisionHistoryLimit: 2
8+
selector:
9+
matchLabels:
10+
app: datatracker
11+
strategy:
12+
type: Recreate
13+
template:
14+
metadata:
15+
labels:
16+
app: datatracker
17+
spec:
18+
# -------------------------------------------------------
19+
# Node Affinity
20+
# -------------------------------------------------------
21+
nodeSelector:
22+
doks.digitalocean.com/node-pool: pool-apollo-hperf
23+
affinity:
24+
podAntiAffinity:
25+
preferredDuringSchedulingIgnoredDuringExecution:
26+
- weight: 100
27+
podAffinityTerm:
28+
labelSelector:
29+
matchExpressions:
30+
- key: app
31+
operator: In
32+
values:
33+
- mailarchive
34+
topologyKey: "kubernetes.io/hostname"
35+
# -------------------------------------------------------
36+
securityContext:
37+
runAsNonRoot: true
38+
containers:
39+
# -----------------------------------------------------
40+
# ScoutAPM Container
41+
# -----------------------------------------------------
42+
- name: scoutapm
43+
image: "scoutapp/scoutapm:version-1.4.0"
44+
imagePullPolicy: IfNotPresent
45+
livenessProbe:
46+
exec:
47+
command:
48+
- "sh"
49+
- "-c"
50+
- "./core-agent probe --tcp 0.0.0.0:6590 | grep -q 'Agent found'"
51+
securityContext:
52+
readOnlyRootFilesystem: true
53+
runAsUser: 65534 # "nobody" user by default
54+
runAsGroup: 65534 # "nogroup" group by default
55+
# -----------------------------------------------------
56+
# Datatracker Container
57+
# -----------------------------------------------------
58+
- name: datatracker
59+
image: "ghcr.io/ietf-tools/datatracker:$APP_IMAGE_TAG"
60+
imagePullPolicy: Always
61+
ports:
62+
- containerPort: 80
63+
name: http
64+
protocol: TCP
65+
volumeMounts:
66+
- name: dt-vol
67+
mountPath: /a
68+
- name: dt-tmp
69+
mountPath: /tmp
70+
- name: dt-cfg
71+
mountPath: /workspace/ietf/settings_local.py
72+
subPath: settings_local.py
73+
envFrom:
74+
- configMapRef:
75+
name: django-config
76+
securityContext:
77+
allowPrivilegeEscalation: false
78+
capabilities:
79+
drop:
80+
- ALL
81+
readOnlyRootFilesystem: true
82+
runAsUser: 1000
83+
runAsGroup: 1000
84+
volumes:
85+
- name: dt-vol
86+
nfs:
87+
server: 10.108.0.18
88+
path: "/mnt/datatracker"
89+
readOnly: false
90+
- name: dt-tmp
91+
emptyDir:
92+
sizeLimit: "2Gi"
93+
- name: dt-cfg
94+
configMap:
95+
name: files-cfgmap
96+
dnsPolicy: ClusterFirst
97+
restartPolicy: Always
98+
terminationGracePeriodSeconds: 30
99+
---
100+
apiVersion: v1
101+
kind: ConfigMap
102+
metadata:
103+
name: django-config
104+
data:
105+
# n.b., these are debug values / non-secret secrets
106+
DATATRACKER_SERVER_MODE: "development" # development for staging, production for production
107+
DATATRACKER_ADMINS: |-
108+
Robert Sparks <rjsparks@nostrum.com>
109+
Ryan Cross <rcross@amsl.com>
110+
Kesara Rathnayake <kesara@staff.ietf.org>
111+
Jennifer Richards <jennifer@staff.ietf.org>
112+
Nicolas Giard <nick@staff.ietf.org>
113+
DATATRACKER_ALLOWED_HOSTS: ".ietf.org" # newline-separated list also allowed
114+
# DATATRACKER_DATATRACKER_DEBUG: "false"
115+
116+
# DB access details - needs to be filled in
117+
# DATATRACKER_DBHOST: "db"
118+
# DATATRACKER_DBPORT: "5432"
119+
# DATATRACKER_DBNAME: "datatracker"
120+
# DATATRACKER_DBUSER: "django" # secret
121+
# DATATRACKER_DBPASS: "RkTkDPFnKpko" # secret
122+
123+
DATATRACKER_DJANGO_SECRET_KEY: "PDwXboUq!=hPjnrtG2=ge#N$Dwy+wn@uivrugwpic8mxyPfHk" # secret
124+
125+
# Set this to point testing / staging at the production statics server until we
126+
# sort that out
127+
# DATATRACKER_STATIC_URL: "https://static.ietf.org/dt/12.10.0/"
128+
129+
# DATATRACKER_EMAIL_DEBUG: "true"
130+
131+
# Outgoing email details
132+
# DATATRACKER_EMAIL_HOST: "localhost" # defaults to localhost
133+
# DATATRACKER_EMAIL_PORT: "2025" # defaults to 2025
134+
135+
# The value here is the default from settings.py (i.e., not actually secret)
136+
DATATRACKER_NOMCOM_APP_SECRET_B64: "m9pzMezVoFNJfsvU9XSZxGnXnwup6P5ZgCQeEnROOoQ=" # secret
137+
138+
DATATRACKER_IANA_SYNC_PASSWORD: "this-is-the-iana-sync-password" # secret
139+
DATATRACKER_RFC_EDITOR_SYNC_PASSWORD: "this-is-the-rfc-editor-sync-password" # secret
140+
DATATRACKER_YOUTUBE_API_KEY: "this-is-the-youtube-api-key" # secret
141+
DATATRACKER_GITHUB_BACKUP_API_KEY: "this-is-the-github-backup-api-key" # secret
142+
143+
# API key configuration
144+
DATATRACKER_API_KEY_TYPE: "ES265"
145+
# secret - value here is the default from settings.py (i.e., not actually secret)
146+
DATATRACKER_API_PUBLIC_KEY_PEM_B64: |-
147+
Ci0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1Ga3dFd1lIS29aSXpqMENBUVlJS
148+
29aSXpqMERBUWNEUWdBRXFWb2pzYW9mREpTY3VNSk4rdHNodW15Tk01TUUKZ2Fyel
149+
ZQcWtWb3ZtRjZ5RTdJSi9kdjRGY1YrUUtDdEovck9TOGUzNlk4WkFFVll1dWtoZXM
150+
weVoxdz09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=
151+
# secret - value here is the default from settings.py (i.e., not actually secret)
152+
DATATRACKER_API_PRIVATE_KEY_PEM_B64: |-
153+
Ci0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQpNSUdIQWdFQU1CTUdCeXFHU000O
154+
UFnRUdDQ3FHU000OUF3RUhCRzB3YXdJQkFRUWdvSTZMSmtvcEtxOFhySGk5ClFxR1
155+
F2RTRBODNURllqcUx6KzhnVUxZZWNzcWhSQU5DQUFTcFdpT3hxaDhNbEp5NHdrMzY
156+
yeUc2Ykkwemt3U0IKcXZOVStxUldpK1lYcklUc2duOTIvZ1Z4WDVBb0swbitzNUx4
157+
N2ZwanhrQVJWaTY2U0Y2elRKblgKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=
158+
159+
# DATATRACKER_MEETECHO_API_BASE: "https://meetings.conf.meetecho.com/api/v1/"
160+
DATATRACKER_MEETECHO_CLIENT_ID: "this-is-the-meetecho-client-id" # secret
161+
DATATRACKER_MEETECHO_CLIENT_SECRET: "this-is-the-meetecho-client-secret" # secret
162+
163+
# DATATRACKER_MATOMO_SITE_ID: "7" # must be present to enable Matomo
164+
# DATATRACKER_MATOMO_DOMAIN_PATH: "analytics.ietf.org"
165+
166+
CELERY_PASSWORD: "this-is-a-secret" # secret
167+
168+
DATATRACKER_APP_API_TOKENS_JSON: "{}" # secret
169+
170+
# use this to override default - one entry per line
171+
# DATATRACKER_CSRF_TRUSTED_ORIGINS: |-
172+
# https://datatracker.staging.ietf.org
173+
174+
# Scout configuration
175+
DATATRACKER_SCOUT_KEY: "this-is-the-scout-key"
176+
DATATRACKER_SCOUT_NAME: "StagingDatatracker"
177+
---
178+
apiVersion: v1
179+
kind: Service
180+
metadata:
181+
name: datatracker
182+
spec:
183+
type: ClusterIP
184+
ports:
185+
- port: 80
186+
targetPort: http
187+
protocol: TCP
188+
name: http
189+
selector:
190+
app: datatracker

k8s/kustomization.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace: datatracker
2+
namePrefix: datatracker-
3+
configMapGenerator:
4+
- name: files-cfgmap
5+
files:
6+
- settings_local.py
7+
resources:
8+
- datatracker.yaml
9+
- memcached.yaml
10+
- rabbitmq.yaml

k8s/memcached.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: memcached
6+
spec:
7+
type: ClusterIP
8+
ports:
9+
- port: 11211
10+
targetPort: memcached
11+
protocol: TCP
12+
name: memcached
13+
selector:
14+
app: memcached

0 commit comments

Comments
 (0)