This sample project is forked from kanban-board
The repo represents a working example of a Web-App that uses a backend API service (kanban-app
) with a PostgreSQL database,
and a separate AngularJS frontend (kanban-ui
).
Everything is containerised with Docker and a sample docker-compose.yml file is available to test it locally.
Your task is to take this sample Web-App and port it to Kubernetes. The components of the app should, as much as possible, be separately configurable and scalable. The end result should be usable for deployments to different kubernetes namespaces and/or clusters. Optionally, the PostgreSQL database should be able to be replaced with a cloud Managed SQL instance (e.g. DigitalOcean, Google Cloud Platform, or another cloud provider), but by default should support a PostgreSQL instance running in the kubernetes cluster.
- Fork this repo on GitHub and commit all your work to your fork. When completed send the link to your fork of the repo to [email protected]
- The Dockerfiles exist already for the
kanban-app
andkanban-ui
but you will need to build and push the Docker images to a public Docker registry for them to be accessable from within a kubernetes cluster. (DockerHub or GCR are possible solutions for this.) - To manage making this installation reconfigurable and relocatable it is strongly recommended that you use a templating solution like Helm, an overlay system like Kustomize, or a combination of the two. Similar alternative are acceptable.
- As part of the solution, include a sample deployment. This means Helm values.yaml file(s) for a sample deployment and/or environment overlay files for Kustomize (or the equivalent if another approach is taken). Places these under an
example_env
directory in the root of the repo. (We do not need to see the running instance hosted by your own kubernetes cluster but we should be able to use your example to easily deploy it to our own clusters.) - Try to follow best practices, especially with regards to basic security in your kubernetes deployment.
- Tools like MiniKube, KinD, microk8s, or similar will be useful in developing and testing your solution. Alternatively, free trials are offered by cloud providers like DigitalOcean, GCP, Azure, AWS, etc. and may be used for this.
- If you encounter any problems with any part of the task or are blocked by something, please add a
KNOWN-ISSUES.md
file to your repo and document it there. If you have questions and need clarifications to complete the exercise please send them to [email protected]
- Demonstrate how to expose this externally (viewable outside the kubernetes cluster).
- Demonstrate some form of secrets-management for security sensitive configurations such as the database credentials or connection string.
- Improve front-end security by upgrading the base container used for the
kanban-ui
Docker image. - Can you optimize the size of the backend
kanban-app
Docker image? - Use GitHub Actions (workflows) to automate parts of the build and deployment process.