Keel is a tool for automating Kubernetes deployment updates. Keel is stateless, robust and lightweight.
Keel provides several key features:
-
Kubernetes and Helm providers - Keel has direct integrations with Kubernetes and Helm.
-
No CLI/API - tired of
f***ctl
for everything? Keel doesn't have one. Gets job done through labels, annotations, charts. -
Semver policies - specify update policy for each deployment/Helm release individually.
-
Automatic Google Container Registry configuration - Keel automatically sets up topic and subscriptions for your deployment images by periodically scanning your environment.
-
Native, DockerHub, Quay and Azure container registry webhooks support - once webhook is received impacted deployments will be identified and updated.
-
Polling - when webhooks and pubsub aren't available - Keel can still be useful by checking Docker Registry for new tags (if current tag is semver) or same tag SHA digest change (ie:
latest
). -
Notifications - out of the box Keel has Slack and standard webhook notifications, more info here
A basic Kubernetes deployment template can be found here
Once Keel is deployed, you only need to specify update policy on your deployment file or Helm chart:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hw-deployment
annotations:
keel.sh/policy: minor # <-- policy name according to https://semver.org/
keel.sh/trigger: poll # <-- actively query registry, otherwise defaults to webhooks
spec:
selector:
matchLabels:
app.kubernetes.io/name: hw
template:
metadata:
labels:
app.kubernetes.io/name: hw
spec:
containers:
- name: hw
image: rancher/hello-world:1.1.2
imagePullPolicy: Always
No additional configuration is required. Enabling continuous delivery for your workloads has never been this easy!
Documentation is viewable here
If you wish to work on Keel itself, you will need Go 1.23+ installed. Make sure you put Keel into correct Gopath and go build
(dependency management is done through dep).
To test Keel while developing:
- Launch a Kubernetes cluster like Minikube or Docker for Mac with Kubernetes.
- Change config to use it:
kubectl config use-context docker-for-desktop
- Build Keel from
cmd/keel
directory. - Start Keel with:
keel --no-incluster
. This will use Kubeconfig from your home.
Get a test parser (makes output nice):
go get github.com/mfridman/tparse
To run unit tests:
make test
Prerequisites:
- configured kubectl + kubeconfig
- a running cluster (test suite will create testing namespaces and delete them after tests)
- Go environment (will compile Keel before running)
Once prerequisites are ready:
make e2e