I was running workloads on GKE and I found that while it's easy to get images being built, there was no straightforward way to automate deployment updates. My goal was to tag a release on Github and get a new version deployed in my environment. After searching for similar tools and couldn't find anything lightweight (spinnaker or jenkins were way too big!) I ended up building Keel.
Here's an example if anyone has this problem https://keel.sh/v1/examples/enabling-auto-updates.html.
Does Keel include any ability to rollback to a previously deployed version? How to you recommend handling that use case?
Keel looks similar to Weave Flux (https://github.com/weaveworks/flux). Have you looked at Flux, are you able to compare them? At first glance it looks like Keel is probably easier to setup, but Flux is more feature rich (edits k8s .yaml files in git with updated image tags, has CLI that supports listing deployments and images, can release an old image).
Just curious, why not have Travis CI do a kubectl set-image to rollout after pushing the docker image?
The best alternative would be to have Travis CI SSH into a box with kubectl. In any case it’s bit more complicated than the setup with Keel we currently have.
Wouldn't setting up Keel on a Kubernetes cluster be the same effort (permissions, RBAC etc.)?
1) Remotes are isolated - have different authorizations for say dev and staging remotes
2) Deployments are isolated - A Remote can only deploy apps in its own namespace.
The webhooks only tell Keel that a new image is available, they cannot modify other parts of the Kubernetes deployment directly.
RBAC isn't too complicated though:
- get on specific app namespaces
- get, list, watch, patch, update on deployments
I planned to add Docker Swarm support from the beginning but a lot of people said that it's unnecessary. It's quite simple to add new providers, they need to implement this interface:
// Provider - generic provider interface
type Provider interface {
Submit(event types.Event) error // <- this is where new image event comes in
TrackedImages() ([]*types.TrackedImage, error) // <- provider needs to tell some triggers which images to track (registry watcher)
GetName() string
Stop()
}
Even though Keel was created for Kubernetes, later on Helm was added where Keel talks directly to Tiller and doesn't really use K8s API.