Local Development on Kubernetes using Skaffold
Posted October 4, 2022 by ‐ 3 min read
What is Skaffold
Skaffold is a local Kubernetes development tool that can help in building and deploying applications locally (or to any Kubernetes cluster for that matter).
It’s like docker compose, but with just Kubernetes.
What can I use it for?
Say you have an app you are developing, and it will be running in a Kubernetes cluster in production, then it makes sense to have a similar Kubernetes environment for developing. You can use Skaffold instead of docker compose for local development
Take a peek HERE for a list of features
How to use it
TL;DR : Git Repo
Here I will show you a quick demo on how to use Skaffold in developing a Golang based app.
1. Install Skaffold CLI on your local machine
This is the only installation you need.
Go HERE and install the tool following instructions specific to your local operating system.
For MacOS, you can install it using
brew install skaffold
2. Make sure your local Kubernetes cluster is up and ready
You would need a local Kubernetes cluster (obviously), it is up to you to use which environment because it depends on your already existing workflow.
Here are few things to consider
If you are using Linux
You are probably using the native docker daemon and all you need is a Kubernetes cluster. To keep things simple, I would recommend you to try minikube
If you are using MacOS
You probably are using Docker Desktop for all your docker needs. Then I recommend you to use the Kubernetes option that comes with docker desktop. You can enable it in Docker settings.
You can also use Minikube, but one thing to note here is that Docker Desktop uses its own Virtual Machine, if you use Minikube in addition to that, Minikube is going to use another Virtual Machine. So, there will be two VMs.
IMO, it would be better to go with Docker Desktop + Kubernetes cluster that comes with it
If you are using Windows
Why are you doing this to yourself?
But, yeah, Docker Desktop comes with Kubernetes, give that a try first. Then look into Minikube if it does not work.
3. Get the Skaffold POC repo
This is completely optional. If you want to start from scratch, you can run
skaffold init on a project directory and go from there. Maybe just use the repo as a reference.
It would be much easier to just clone it and modify it to your needs, or just to get a feel of how things work for the first time.
git clone https://github.com/MansoorMajeed/skaffold-poc.git
Contents of the repo
- Dockerfile : You know what this is
- main.go, go.mod : The demo app and the module file
- k8s-pod.yml : The kuberenetes deployment that will run the demo app
- k8s-service.yml : The Kubernetes service that will expose our demo app
- skaffold.yaml : The skaffold specific configuration
4. Running it
There are a few different ways you can run it.
Running it once (no reload)
skaffold run --kube-context docker-desktop
This will run the whole stack.
--kube-context argument is specified so that we are forcing skaffold to run it on our local cluster. Make sure to use the correct one depending on docker-desktop or minikube
By default skaffold will try to use the current cluster context
Development mode (use this when you are developing)
This is my favourite mode.
skaffold dev --kube-context docker-desktop --port-forward
This will start a development environment with live reload. Every time you save your codebase, it will rebuild the image and redeploy the pods. Sweet!