Welcome! This assignment is designed to showcase your skills in building, deploying, and managing applications in Kubernetes and cloud-native environments.
Demonstrate your ability to:
- Containerize applications.
- Deploy them in a Kubernetes environment.
- Set up a continuous delivery (CD) pipeline with cloud-native tools.
You will accomplish the following:
-
Kubernetes Test Cluster Setup
- Build a small Kubernetes test cluster, either locally (using tools like Minikube or Kind) or in the cloud.
- A single-node cluster is sufficient, but feel free to expand as needed.
-
Application Containerization
- Create Dockerfiles for the provided applications (
app_aandapp_b), ensuring they run correctly in their containers and return expected results.
- Create Dockerfiles for the provided applications (
-
Deployment Mechanism in Kubernetes
- Develop a repeatable deployment mechanism for both applications within Kubernetes.
-
Continuous Delivery Plan
- Outline a CD plan for these applications. Specify the tools/vendors you would consider and your evaluation criteria for choosing them.
Create a GitHub repository with the following:
-
Dockerfiles for Each Application
- Separate Dockerfiles for
app_aandapp_b.
- Separate Dockerfiles for
-
Repeatable Deployment Mechanism
- A deployment script (e.g.,
deploy.sh) or Kubernetes configuration files (e.g., YAML manifests) for deploying each application.
- A deployment script (e.g.,
-
Documentation
- A README.md with setup instructions so we can run the applications ourselves.
- A short document (e.g.,
CD_Plan.txt) outlining:- Your continuous delivery plan.
- Your chosen tools and the rationale behind each choice.
-
Commit History
- Meaningful and well-organized git commit messages to demonstrate your approach.
- Each commit should describe its purpose and changes clearly.
To stand out, consider adding any of the following:
- Multi-stage Docker Builds: Separate stages in Dockerfiles for building and running the applications.
- Automated Kubernetes Environment: Script or configuration for an automated setup of a local or cloud-based Kubernetes environment.
- Repository: Create a new GitHub repository with a unique name for this assignment.
- Privacy: If you prefer, keep the repository private and add us as collaborators.
- Avoid Forks or PRs: Do not fork this task’s repo or submit pull requests.
- Please do not fork or submit a PR to this repo
- Feel free to change the python application code and/or their requirements to make them more "cloud native"
- If you get stuck or need more information, please reach out for clarity
- Have fun!
Running the apps outside of a container:
pip install -r requirements.txt
sqlite3 database.db < schema.sql
python app_a.py
python app_b.py
Making a request
# Test a non-auth'd route
curl http://127.0.0.1:5000/hello
curl -X POST -H 'Authorization: mytoken' http://127.0.0.1:5000/jobs