I recently found out about Skaffold, a command-line tool recently released by Google, and designed to make local Kubernetes development very easy, allowing for iterative local development against a Kubernetes cluster. It's really cool, check this out:
- It runs as a binary in your local machine (e.g., easy install with brew, etc.).
- It uses
yaml
configuration to describe how your application should be built: you specify the Docker images for your service(s) and Skaffold will tag them and push them to any valid Docker image repository.
apiVersion: skaffold/v1beta9
kind: Config
build:
artifacts:
- image: gcr.io/k8s-skaffold/skaffold-example
deploy:
kubectl:
manifests:
- k8s-*
- These images are ingested into your Kubernetes manifest and used to deploy changes to the clusters for every code change.
- Skaffold watches your local development directory for filesystem changes and automatically builds and deploy your application to any local or remote Kubernetes cluster.
- It is integrated to
kubectl
and GCP. - Skaffold not only works on your laptop as a dev tool, it also lets you reuse the same
skaffold.yaml
file to do deployments to your clusters in your continuous deployment system.
In resume, Skaffold makes development very easy: all you need to do is run skaffold dev
(local dev workflow: Minikube, etc.) or skaffold run
(continuous dev workflow: Jenkins, Travis CI, etc.) to start the entire process, creating Kubernetes pod(s) in a cluster with the Docker images of your application.
In this single command, Skaffold:
- builds container images (locally or remotely),
- pushes container images if the target is not local cluster,
- updates Kubernetes manifests with image tags,
- deploys your application with
kubectl apply
, - streams logs from the pods,
- watches for changes in the source code and Kubernetes manifests, and then repeat 1-5.