Merge pull request 'Switch to Traefik & update everything' (#1) from feat/update-2026-01 into main
Reviewed-on: #1 Reviewed-by: Sebastian_Heußer <sebastian.heusser@stackit.cloud>
This commit is contained in:
commit
3940677b0d
40 changed files with 166 additions and 136 deletions
|
|
@ -25,24 +25,24 @@ cd $(git rev-parse --show-toplevel)/module3/k8s/
|
||||||
minikube start
|
minikube start
|
||||||
minikube tunnel
|
minikube tunnel
|
||||||
|
|
||||||
# Install ingress-nginx and nats with helm
|
# Install traefik and nats with helm
|
||||||
|
|
||||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
|
|
||||||
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
|
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
|
||||||
|
helm repo add traefik https://traefik.github.io/charts
|
||||||
helm repo update
|
helm repo update
|
||||||
helm upgrade \
|
helm upgrade \
|
||||||
ingress-nginx ingress-nginx/ingress-nginx \
|
traefik traefik/traefik \
|
||||||
--install \
|
--install \
|
||||||
--namespace ingress-nginx \
|
--namespace traefik \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 4.12.1 \
|
--version 38.0.2 \
|
||||||
--values helm/ingress-nginx/values.yaml
|
--values helm/traefik/values.yaml
|
||||||
helm upgrade \
|
helm upgrade \
|
||||||
--install \
|
--install \
|
||||||
nats nats/nats \
|
nats nats/nats \
|
||||||
--namespace nats \
|
--namespace nats \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 1.3.3 \
|
--version 2.12.3 \
|
||||||
--values helm/nats/values.yaml
|
--values helm/nats/values.yaml
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -52,7 +52,7 @@ kubectl apply -k kustomize/postgres
|
||||||
kubectl apply -k kustomize/scrumlr
|
kubectl apply -k kustomize/scrumlr
|
||||||
|
|
||||||
# Use external IP of your Ingress Controller in your Browser to open Scrumlr
|
# Use external IP of your Ingress Controller in your Browser to open Scrumlr
|
||||||
kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
|
kubectl get services --namespace traefik traefik --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
|
||||||
|
|
||||||
# Destroy Cluster
|
# Destroy Cluster
|
||||||
minikube stop
|
minikube stop
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# ingress-nginx
|
|
||||||
|
|
||||||
Docs: https://kubernetes.github.io/ingress-nginx/
|
|
||||||
Github Repo: https://github.com/kubernetes/ingress-nginx
|
|
||||||
|
|
||||||
```sh
|
|
||||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
|
|
||||||
helm upgrade \
|
|
||||||
ingress-nginx ingress-nginx/ingress-nginx \
|
|
||||||
--install \
|
|
||||||
--namespace ingress-nginx \
|
|
||||||
--create-namespace \
|
|
||||||
--version 4.12.1 \
|
|
||||||
--values values.yaml
|
|
||||||
```
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
# Note: This file is intentionally empty and is more of a placeholder to ensure consistency.
|
|
||||||
|
|
@ -10,6 +10,6 @@ helm upgrade \
|
||||||
nats nats/nats \
|
nats nats/nats \
|
||||||
--namespace nats \
|
--namespace nats \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 1.3.3 \
|
--version 2.12.3 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
15
module3/k8s/helm/traefik/README.md
Normal file
15
module3/k8s/helm/traefik/README.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# traefik
|
||||||
|
|
||||||
|
Docs: https://doc.traefik.io/traefik/setup/kubernetes/
|
||||||
|
Github Repo: https://github.com/traefik/traefik/
|
||||||
|
|
||||||
|
```sh
|
||||||
|
helm repo add traefik https://traefik.github.io/charts/ --force-update
|
||||||
|
helm upgrade \
|
||||||
|
traefik traefik/traefik \
|
||||||
|
--install \
|
||||||
|
--namespace traefik \
|
||||||
|
--create-namespace \
|
||||||
|
--version 38.0.2 \
|
||||||
|
--values values.yaml
|
||||||
|
```
|
||||||
8
module3/k8s/helm/traefik/values.yaml
Normal file
8
module3/k8s/helm/traefik/values.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# HA deployment
|
||||||
|
deployment:
|
||||||
|
replicas: 3
|
||||||
|
|
||||||
|
# Enable logs for better debugging
|
||||||
|
logs:
|
||||||
|
access:
|
||||||
|
enabled: true
|
||||||
|
|
@ -24,7 +24,7 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
image: postgres:17.4
|
image: postgres:18.1
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
memory: "256Mi"
|
memory: "256Mi"
|
||||||
|
|
@ -46,7 +46,7 @@ spec:
|
||||||
- containerPort: 5432
|
- containerPort: 5432
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
mountPath: /var/lib/postgresql/data
|
mountPath: /var/lib/postgresql
|
||||||
subPath: postgres
|
subPath: postgres
|
||||||
volumes:
|
volumes:
|
||||||
- name: postgres
|
- name: postgres
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: backend
|
- name: backend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:4.4.0
|
||||||
args:
|
args:
|
||||||
- "/app/main"
|
- "/app/main"
|
||||||
- "-disable-check-origin"
|
- "-disable-check-origin"
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: frontend
|
- name: frontend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:4.4.0
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: "25m"
|
cpu: "25m"
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,8 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: "scrumlr"
|
app.kubernetes.io/name: "scrumlr"
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
annotations:
|
|
||||||
nginx.ingress.kubernetes.io/limit-connections: "100"
|
|
||||||
# Websocket optimization https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets
|
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "7200"
|
|
||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "7200"
|
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: traefik
|
||||||
rules:
|
rules:
|
||||||
- http:
|
- http:
|
||||||
paths:
|
paths:
|
||||||
|
|
|
||||||
|
|
@ -2,24 +2,24 @@
|
||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.terraform.io/stackitcloud/stackit" {
|
provider "registry.terraform.io/stackitcloud/stackit" {
|
||||||
version = "0.50.0"
|
version = "0.76.0"
|
||||||
constraints = "0.50.0"
|
constraints = "0.76.0"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:uU8/DLvW8tEty0PI2sUMem43IDNSrncHuLaXaEYdGFk=",
|
"h1:p7/5SsEjwvGhQUFfS1zvefqxiOztixYzcc/Ch9TQ4Dg=",
|
||||||
"zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f",
|
"zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f",
|
||||||
"zh:219d678bc471b3f5030724dcdde6be3f3fa63e911b7c7a0f446b0a0b4e5f48e7",
|
"zh:19329e79735c80f028527dc10cb1e2ed4e41d3d401f053013b5b88fe95c9ca15",
|
||||||
"zh:4cd09155a09e320b0b68db4ba2971564f3d147c19ad991d6b7e731e26034d91c",
|
"zh:1c2ca9686e5dc7a8896d50d3c17c6fdd3690a7f2a78120318f9dd7ae8650ad32",
|
||||||
"zh:507c1e24432f0d455ac8b628c37ee20db62e89a6e85508568c2820ba52404786",
|
"zh:36f7ba648784e1910e6cbff0070fa7ea5db5327d3f27b6a33664bfa5530319de",
|
||||||
"zh:5aa10bfc4baad277a2bc746c83fca19911bb95a5e8821dd46f333bc621cbb453",
|
"zh:634cba2439b3bed154db38db4c88b767361dd6052c263e86db9b99b5419d4176",
|
||||||
"zh:67b55ad1135ca12997b0928cb67973b11ea196299e0cf66e3e0145faec762644",
|
"zh:639cc643d24054cdeba68430e11a27d75c2d250066206c11364c875e176aa057",
|
||||||
"zh:6d1d108edcd6794a8839d849e6ea48699875e22afeea7edd38bee3dd56dea7e8",
|
"zh:69b6a554a13d355c9e470d82c234ca8519d36eaf4f4dab848ce92b5dede5764d",
|
||||||
"zh:7473c28b3781c0d00294d985bd067e753a419ca8e379f91a8f6f2ce4663566ee",
|
"zh:6ca4c435e9bd9619bc9c6514f64a0d80cc016e960a566dbbc697deab643a52b5",
|
||||||
"zh:8d234b24734f950f986322a5f084ca23bfd9b3d9fb7742b54404171cfcabc99e",
|
"zh:755add9446f8523e7429b9ffa8c68115f5d883abb2fe858b03c761bdeb0c6a96",
|
||||||
"zh:af0804ea918648600cc6300dffce8a7b9115d30dc88db10f962b8e596d1465e1",
|
"zh:9303619c5eb9a94dca56b8ff4b4e9cc34b701f4eb5fe3d2b10784e3cd474564b",
|
||||||
"zh:b557940dc6387dc4cce8b100981ccaadac6bc4e6b50c566baf148d67939f8f2e",
|
"zh:99baa35d28c30d0e62727c8567903b929070bd4dacb94b4f5c2abc14143bbf23",
|
||||||
"zh:d477f77ce6f807d60069c1efcfa20607088ae7ab91d22805331a7634d84c2d1c",
|
"zh:a58b6a5081db418be32a86b68f53dfe3ab9300313eb3790dd4c06a6e8430f005",
|
||||||
"zh:d95086e2338ceed511e798a2acc6d5cefdfff1a14f7b47b2d29b4ebc36b77a3a",
|
"zh:a9fd9c7b59c048a9bd239c167dc8069a722d9900498e63d4b6042d5276697cf2",
|
||||||
"zh:ea0d8d5c9cf7d5871a54dd4786c378dfd9d10416f3c4d0ea4776465e8c562e10",
|
"zh:e51d544e9f0dd533fca9d5072897df0e569cf3859a2ccf78b31fe955279f1b9a",
|
||||||
"zh:f96af7b89dc99745f6a22c0ca2aedb18e10273251b8cbac9e2b1011c68c3c3f9",
|
"zh:f5cc53057cef61c381c77f557fd256539180fcd7b02bd8148e2cd95f0b091278",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ terraform {
|
||||||
required_providers {
|
required_providers {
|
||||||
stackit = {
|
stackit = {
|
||||||
source = "stackitcloud/stackit"
|
source = "stackitcloud/stackit"
|
||||||
version = "0.50.0"
|
version = "0.76.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ resource "stackit_postgresflex_instance" "scrumlr" {
|
||||||
project_id = var.project_id
|
project_id = var.project_id
|
||||||
name = "scrumlr"
|
name = "scrumlr"
|
||||||
acl = stackit_ske_cluster.scrumlr.egress_address_ranges
|
acl = stackit_ske_cluster.scrumlr.egress_address_ranges
|
||||||
backup_schedule = "00 00 * * *"
|
backup_schedule = "0 0 * * *"
|
||||||
flavor = {
|
flavor = {
|
||||||
cpu = 2
|
cpu = 2
|
||||||
ram = 4
|
ram = 4
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
resource "stackit_ske_cluster" "scrumlr" {
|
resource "stackit_ske_cluster" "scrumlr" {
|
||||||
project_id = var.project_id
|
project_id = var.project_id
|
||||||
name = "scrumlr"
|
name = "scrumlr"
|
||||||
kubernetes_version_min = "1.31.7"
|
kubernetes_version_min = "1.34.2"
|
||||||
node_pools = [
|
node_pools = [
|
||||||
{
|
{
|
||||||
name = "scrumlrpool"
|
name = "scrumlrpool"
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ helm upgrade \
|
||||||
cert-manager jetstack/cert-manager \
|
cert-manager jetstack/cert-manager \
|
||||||
--namespace cert-manager \
|
--namespace cert-manager \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version v1.17.2 \
|
--version v1.19.2 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,4 @@ spec:
|
||||||
solvers:
|
solvers:
|
||||||
- http01:
|
- http01:
|
||||||
ingress:
|
ingress:
|
||||||
ingressClassName: nginx
|
ingressClassName: traefik
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# ingress-nginx
|
|
||||||
|
|
||||||
Docs: https://kubernetes.github.io/ingress-nginx/
|
|
||||||
Github Repo: https://github.com/kubernetes/ingress-nginx
|
|
||||||
|
|
||||||
```sh
|
|
||||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
|
|
||||||
helm upgrade \
|
|
||||||
ingress-nginx ingress-nginx/ingress-nginx \
|
|
||||||
--install \
|
|
||||||
--namespace ingress-nginx \
|
|
||||||
--create-namespace \
|
|
||||||
--version 4.12.1 \
|
|
||||||
--values values.yaml
|
|
||||||
```
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
# Note: This file is intentionally empty and is more of a placeholder to ensure consistency.
|
|
||||||
|
|
@ -10,6 +10,6 @@ helm upgrade \
|
||||||
nats nats/nats \
|
nats nats/nats \
|
||||||
--namespace nats \
|
--namespace nats \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 1.3.3 \
|
--version 2.12.3 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
15
module5/k8s/helm/traefik/README.md
Normal file
15
module5/k8s/helm/traefik/README.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# traefik
|
||||||
|
|
||||||
|
Docs: https://doc.traefik.io/traefik/setup/kubernetes/
|
||||||
|
Github Repo: https://github.com/traefik/traefik/
|
||||||
|
|
||||||
|
```sh
|
||||||
|
helm repo add traefik https://traefik.github.io/charts/ --force-update
|
||||||
|
helm upgrade \
|
||||||
|
traefik traefik/traefik \
|
||||||
|
--install \
|
||||||
|
--namespace traefik \
|
||||||
|
--create-namespace \
|
||||||
|
--version 38.0.2 \
|
||||||
|
--values values.yaml
|
||||||
|
```
|
||||||
17
module5/k8s/helm/traefik/values.yaml
Normal file
17
module5/k8s/helm/traefik/values.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# HA deployment
|
||||||
|
deployment:
|
||||||
|
replicas: 3
|
||||||
|
|
||||||
|
# Enable logs for better debugging
|
||||||
|
logs:
|
||||||
|
access:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Spread pods better between nodes
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: 1
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
whenUnsatisfiable: ScheduleAnyway
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: '{{ template "traefik.name" . }}'
|
||||||
|
|
@ -31,7 +31,7 @@ spec:
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
containers:
|
containers:
|
||||||
- name: backend
|
- name: backend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:4.4.0
|
||||||
args:
|
args:
|
||||||
- "/app/main"
|
- "/app/main"
|
||||||
- "-disable-check-origin"
|
- "-disable-check-origin"
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ spec:
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
containers:
|
containers:
|
||||||
- name: frontend
|
- name: frontend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:4.4.0
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: "25m"
|
cpu: "25m"
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,9 @@ metadata:
|
||||||
app.kubernetes.io/name: "scrumlr"
|
app.kubernetes.io/name: "scrumlr"
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
annotations:
|
annotations:
|
||||||
nginx.ingress.kubernetes.io/limit-connections: "100"
|
|
||||||
# Websocket optimization https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets
|
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "7200"
|
|
||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "7200"
|
|
||||||
cert-manager.io/cluster-issuer: "letsencrypt-production"
|
cert-manager.io/cluster-issuer: "letsencrypt-production"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: traefik
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- CHANGE-ME.domain.tld
|
- CHANGE-ME.domain.tld
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,6 @@ helm upgrade \
|
||||||
alloy grafana/alloy \
|
alloy grafana/alloy \
|
||||||
--namespace o11y \
|
--namespace o11y \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 1.0.2 \
|
--version 1.5.2 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ helm upgrade \
|
||||||
cert-manager jetstack/cert-manager \
|
cert-manager jetstack/cert-manager \
|
||||||
--namespace cert-manager \
|
--namespace cert-manager \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version v1.17.2 \
|
--version v1.19.2 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,4 @@ spec:
|
||||||
solvers:
|
solvers:
|
||||||
- http01:
|
- http01:
|
||||||
ingress:
|
ingress:
|
||||||
ingressClassName: nginx
|
ingressClassName: traefik
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# ingress-nginx
|
|
||||||
|
|
||||||
Docs: https://kubernetes.github.io/ingress-nginx/
|
|
||||||
Github Repo: https://github.com/kubernetes/ingress-nginx
|
|
||||||
|
|
||||||
```sh
|
|
||||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
|
|
||||||
helm upgrade \
|
|
||||||
ingress-nginx ingress-nginx/ingress-nginx \
|
|
||||||
--install \
|
|
||||||
--namespace ingress-nginx \
|
|
||||||
--create-namespace \
|
|
||||||
--version 4.12.1 \
|
|
||||||
--values values.yaml
|
|
||||||
```
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
controller:
|
|
||||||
metrics:
|
|
||||||
enabled: true
|
|
||||||
serviceMonitor:
|
|
||||||
enabled: true
|
|
||||||
|
|
@ -10,6 +10,6 @@ helm upgrade \
|
||||||
nats nats/nats \
|
nats nats/nats \
|
||||||
--namespace nats \
|
--namespace nats \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 1.3.3 \
|
--version 2.12.3 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,6 @@ helm upgrade \
|
||||||
prometheus-operator-crds prometheus-community/prometheus-operator-crds \
|
prometheus-operator-crds prometheus-community/prometheus-operator-crds \
|
||||||
--namespace o11y \
|
--namespace o11y \
|
||||||
--create-namespace \
|
--create-namespace \
|
||||||
--version 19.1.0 \
|
--version 26.0.0 \
|
||||||
--values values.yaml
|
--values values.yaml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
15
module6/k8s/helm/traefik/README.md
Normal file
15
module6/k8s/helm/traefik/README.md
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# traefik
|
||||||
|
|
||||||
|
Docs: https://doc.traefik.io/traefik/setup/kubernetes/
|
||||||
|
Github Repo: https://github.com/traefik/traefik/
|
||||||
|
|
||||||
|
```sh
|
||||||
|
helm repo add traefik https://traefik.github.io/charts/ --force-update
|
||||||
|
helm upgrade \
|
||||||
|
traefik traefik/traefik \
|
||||||
|
--install \
|
||||||
|
--namespace traefik \
|
||||||
|
--create-namespace \
|
||||||
|
--version 38.0.2 \
|
||||||
|
--values values.yaml
|
||||||
|
```
|
||||||
25
module6/k8s/helm/traefik/values.yaml
Normal file
25
module6/k8s/helm/traefik/values.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# HA deployment
|
||||||
|
deployment:
|
||||||
|
replicas: 3
|
||||||
|
|
||||||
|
# Enable logs for better debugging
|
||||||
|
logs:
|
||||||
|
access:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Spread pods better between nodes
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: 1
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
whenUnsatisfiable: ScheduleAnyway
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: '{{ template "traefik.name" . }}'
|
||||||
|
|
||||||
|
# Enable metrics export and collection (serviceMonitor requires prometheus-operator-crds and alloy)
|
||||||
|
metrics:
|
||||||
|
prometheus:
|
||||||
|
service:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
|
@ -31,7 +31,7 @@ spec:
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
containers:
|
containers:
|
||||||
- name: backend
|
- name: backend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-server:4.4.0
|
||||||
args:
|
args:
|
||||||
- "/app/main"
|
- "/app/main"
|
||||||
- "-disable-check-origin"
|
- "-disable-check-origin"
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ spec:
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
containers:
|
containers:
|
||||||
- name: frontend
|
- name: frontend
|
||||||
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:3.10.3
|
image: ghcr.io/inovex/scrumlr.io/scrumlr-frontend:4.4.0
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: "25m"
|
cpu: "25m"
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,9 @@ metadata:
|
||||||
app.kubernetes.io/name: "scrumlr"
|
app.kubernetes.io/name: "scrumlr"
|
||||||
app.kubernetes.io/part-of: "scrumlr"
|
app.kubernetes.io/part-of: "scrumlr"
|
||||||
annotations:
|
annotations:
|
||||||
nginx.ingress.kubernetes.io/limit-connections: "100"
|
|
||||||
# Websocket optimization https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets
|
|
||||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "7200"
|
|
||||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "7200"
|
|
||||||
cert-manager.io/cluster-issuer: "letsencrypt-production"
|
cert-manager.io/cluster-issuer: "letsencrypt-production"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: traefik
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- CHANGE-ME.domain.tld
|
- CHANGE-ME.domain.tld
|
||||||
|
|
|
||||||
|
|
@ -2,24 +2,24 @@
|
||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.terraform.io/stackitcloud/stackit" {
|
provider "registry.terraform.io/stackitcloud/stackit" {
|
||||||
version = "0.50.0"
|
version = "0.76.0"
|
||||||
constraints = "0.50.0"
|
constraints = "0.76.0"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:uU8/DLvW8tEty0PI2sUMem43IDNSrncHuLaXaEYdGFk=",
|
"h1:p7/5SsEjwvGhQUFfS1zvefqxiOztixYzcc/Ch9TQ4Dg=",
|
||||||
"zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f",
|
"zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f",
|
||||||
"zh:219d678bc471b3f5030724dcdde6be3f3fa63e911b7c7a0f446b0a0b4e5f48e7",
|
"zh:19329e79735c80f028527dc10cb1e2ed4e41d3d401f053013b5b88fe95c9ca15",
|
||||||
"zh:4cd09155a09e320b0b68db4ba2971564f3d147c19ad991d6b7e731e26034d91c",
|
"zh:1c2ca9686e5dc7a8896d50d3c17c6fdd3690a7f2a78120318f9dd7ae8650ad32",
|
||||||
"zh:507c1e24432f0d455ac8b628c37ee20db62e89a6e85508568c2820ba52404786",
|
"zh:36f7ba648784e1910e6cbff0070fa7ea5db5327d3f27b6a33664bfa5530319de",
|
||||||
"zh:5aa10bfc4baad277a2bc746c83fca19911bb95a5e8821dd46f333bc621cbb453",
|
"zh:634cba2439b3bed154db38db4c88b767361dd6052c263e86db9b99b5419d4176",
|
||||||
"zh:67b55ad1135ca12997b0928cb67973b11ea196299e0cf66e3e0145faec762644",
|
"zh:639cc643d24054cdeba68430e11a27d75c2d250066206c11364c875e176aa057",
|
||||||
"zh:6d1d108edcd6794a8839d849e6ea48699875e22afeea7edd38bee3dd56dea7e8",
|
"zh:69b6a554a13d355c9e470d82c234ca8519d36eaf4f4dab848ce92b5dede5764d",
|
||||||
"zh:7473c28b3781c0d00294d985bd067e753a419ca8e379f91a8f6f2ce4663566ee",
|
"zh:6ca4c435e9bd9619bc9c6514f64a0d80cc016e960a566dbbc697deab643a52b5",
|
||||||
"zh:8d234b24734f950f986322a5f084ca23bfd9b3d9fb7742b54404171cfcabc99e",
|
"zh:755add9446f8523e7429b9ffa8c68115f5d883abb2fe858b03c761bdeb0c6a96",
|
||||||
"zh:af0804ea918648600cc6300dffce8a7b9115d30dc88db10f962b8e596d1465e1",
|
"zh:9303619c5eb9a94dca56b8ff4b4e9cc34b701f4eb5fe3d2b10784e3cd474564b",
|
||||||
"zh:b557940dc6387dc4cce8b100981ccaadac6bc4e6b50c566baf148d67939f8f2e",
|
"zh:99baa35d28c30d0e62727c8567903b929070bd4dacb94b4f5c2abc14143bbf23",
|
||||||
"zh:d477f77ce6f807d60069c1efcfa20607088ae7ab91d22805331a7634d84c2d1c",
|
"zh:a58b6a5081db418be32a86b68f53dfe3ab9300313eb3790dd4c06a6e8430f005",
|
||||||
"zh:d95086e2338ceed511e798a2acc6d5cefdfff1a14f7b47b2d29b4ebc36b77a3a",
|
"zh:a9fd9c7b59c048a9bd239c167dc8069a722d9900498e63d4b6042d5276697cf2",
|
||||||
"zh:ea0d8d5c9cf7d5871a54dd4786c378dfd9d10416f3c4d0ea4776465e8c562e10",
|
"zh:e51d544e9f0dd533fca9d5072897df0e569cf3859a2ccf78b31fe955279f1b9a",
|
||||||
"zh:f96af7b89dc99745f6a22c0ca2aedb18e10273251b8cbac9e2b1011c68c3c3f9",
|
"zh:f5cc53057cef61c381c77f557fd256539180fcd7b02bd8148e2cd95f0b091278",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ terraform {
|
||||||
required_providers {
|
required_providers {
|
||||||
stackit = {
|
stackit = {
|
||||||
source = "stackitcloud/stackit"
|
source = "stackitcloud/stackit"
|
||||||
version = "0.50.0"
|
version = "0.76.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ resource "stackit_postgresflex_instance" "scrumlr" {
|
||||||
project_id = var.project_id
|
project_id = var.project_id
|
||||||
name = "scrumlr"
|
name = "scrumlr"
|
||||||
acl = stackit_ske_cluster.scrumlr.egress_address_ranges
|
acl = stackit_ske_cluster.scrumlr.egress_address_ranges
|
||||||
backup_schedule = "00 00 * * *"
|
backup_schedule = "0 0 * * *"
|
||||||
flavor = {
|
flavor = {
|
||||||
cpu = 2
|
cpu = 2
|
||||||
ram = 4
|
ram = 4
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
resource "stackit_ske_cluster" "scrumlr" {
|
resource "stackit_ske_cluster" "scrumlr" {
|
||||||
project_id = var.project_id
|
project_id = var.project_id
|
||||||
name = "scrumlr"
|
name = "scrumlr"
|
||||||
kubernetes_version_min = "1.31.7"
|
kubernetes_version_min = "1.34.2"
|
||||||
node_pools = [
|
node_pools = [
|
||||||
{
|
{
|
||||||
name = "scrumlrpool"
|
name = "scrumlrpool"
|
||||||
|
|
@ -24,8 +24,8 @@ resource "stackit_ske_cluster" "scrumlr" {
|
||||||
enabled = true
|
enabled = true
|
||||||
zones = [stackit_dns_zone.scrumlr.dns_name]
|
zones = [stackit_dns_zone.scrumlr.dns_name]
|
||||||
}
|
}
|
||||||
argus = {
|
observability = {
|
||||||
argus_instance_id = stackit_observability_instance.scrumlr.instance_id
|
instance_id = stackit_observability_instance.scrumlr.instance_id
|
||||||
enabled = true
|
enabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue