Essential Course Notes on Cloud Native Application Architecture
My experience converting a monolithic app to microservices
A few months ago, I signed up for a course to help me understand the responsibilities of a Software Architect, and the projects mentioned in the syllabus were exactly what I was looking for. Refactoring a Monolith is the most difficult Udacity project that I've completed, so I'm making a record for myself and future students.
Setting up the developer environment
Kubernetes
The project's setup instructions calls for using vagrant to create a virtual machine which automatically installs k3s and forwards the necessary ports for access this cluster. If you already have a local kubernetes instance installed, this process can be skipped. I already had Docker Desktop installed, which includes kubernetes, it simply needed to be enabled. Once enabled, the project's deployment folder can be applied to the local cluster with ease.
kubectl apply -f deployment/
Using an existing cluster avoids having to managing access to multiple clusters. Once the project works, you can use vagrant to create your VM and debug with confidence knowing that your installation was sound. Issues typically encountered involved incompatibilities between k3s and virtualbox OS images.
Skaffold
Any project that involves local kubernetes development should use skaffold. From the documentation:
Skaffold is a command line tool that facilitates continuous development for Kubernetes-native applications. Skaffold handles the workflow for building, pushing, and deploying your application, and provides building blocks for creating CI/CD pipelines.
Near the end of your development, you can then use skaffold to push the latest images to your docker hub account. One issue I encountered was that the images pushed to docker hub had tags other than latest. I had to include the following in my skaffold.yaml build section.
tagPolicy:
sha256: {}
An example of how it looks can be seen here.
Very important: set the imagePullPolicy in your deployment files to IfNotPresent. This allows your local cluster to use the images directly built by skaffold, rather than pulling them from Docker Hub.

