Skip to main content

Spring Boot template

These manifests deploy a Spring Boot service behind Traefik using Kustomize. This assumes your spring boot application is listening on port 8080.

Replace placeholders like <service-name>, <team-namespace>, <deployment-path>, <image> with your values. No angle bracket should be left in the final files.

You need to copy these files into your repo, under k8s.


kustomization.yaml

kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

metadata:
name: <service-name>

resources:
- deployment.yaml
- service.yaml
- ingress.yaml

commonLabels:
environment: <team-namespace>
managed-by: kustomize
app: <service-name>

namePrefix: "ase-"

namespace: <team-namespace>

replicas:
- name: <service-name>
count: 1

service.yaml

service.yaml
apiVersion: v1
kind: Service
metadata:
name: <service-name>
labels:
app: <service-name>
spec:
selector:
app: <service-name>
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP

ingress.yaml

ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: <service-name>
labels:
app: <service-name>
annotations:
traefik.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: traefik
rules:
- host: sau-portal.de
http:
paths:
- path: <deployment-path> # specify under which path your service should be reachable
pathType: Prefix
backend:
service:
name: <service-name>
port:
number: 8080

deployment.yaml

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: <service-name>
labels:
app: <service-name>
spec:
replicas: 1
selector:
matchLabels:
app: <service-name>
template:
metadata:
labels:
app: <service-name>
spec:
containers:
- name: <service-name>
image: <image>
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "300m"
readinessProbe:
httpGet:
path: <deployment-path> # you might need to change this to a health endpoint of your application
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
httpGet:
path: <deployment-path> # you might need to change this to a health endpoint of your application
port: 8080
initialDelaySeconds: 120
periodSeconds: 20
env: # add environment variables here if needed
- name: SOME_ENVIRONMENT_VARIABLE
value: "ᓚᘏᗢ"

Remarks

Base Path

Your application will get the full <deployment-path> as base path, so make sure your application can handle that.

To ensure this we recommend to set up a production profile that specifies server.servlet.context-path=<deployment-path>

tip

the profile can be activated via an environment variable in the deployment, e.g. SPRING_PROFILES_ACTIVE=production

Requested Resources

The resources available to the container can be adjusted in the deployment file (spec.template.spec.containers.resources)

Please make sure you don't request excessive amount of resources as we don't have a lot available in our cluster

note

if you need more resources as specified in this deployment.yaml please contact Team 15