In module1
find a simple Spring Boot application for uploading and downloading files.
Start the application using the Gradle wrapper:
./gradlew bootRun
To upload files you need pass a secret API key via the Celonis-Auth
header, e.g. using curl
:
curl -X POST \
http://localhost:8080/files \
-H 'Celonis-Auth: dev' \
-F file=@/path/to/some/image.jpg
The value of this API key for local development is configured in src/main/resources/application.yaml
.
You can download files from the application using e.g.:
curl -LO http://localhost:8080/files/image.jpg
The goal of this module is to deploy this application to Kubernetes by completing the following three tasks:
Build the application into a Docker image so it can be run in Kubernetes. Make sure to not bake any secrets into the image
Write the manifests to deploy the application to a Kubernetes cluster. Try to fulfill all of the following three requirements:
- Zero-downtime deployments should be possible
- Data is persisted across application restarts
- The application should be exposed via Ingress
What would you add or change to make this a fully production ready application?
Operate multiple instances (which we call realms) of our Intelligent Business Cloud (IBC) all around the world across multiple cloud providers. Their configuration (e.g. database hosts, connectivity to external services) is of course slightly different for each realm. What challenges can you imagine us facing in such a setup? Try to sketch a solution for maintaining and deploying into these environments as efficiently as possible.