Skip to content

Single-click full-stack application (Postgres, Spring Boot & Angular) using Docker Compose

Notifications You must be signed in to change notification settings

morey-tech/code-challenge-devops-engineer-0

 
 

Repository files navigation

kanban-board-k8s-demo

Overview

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.

Exercise

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.

Things to consider in your solution

  • 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 and kanban-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]

Bonus/Optional Tasks

  • 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.

About

Single-click full-stack application (Postgres, Spring Boot & Angular) using Docker Compose

Resources

Stars

Watchers

Forks