Kubernetes Operator to automate Helm, DaemonSet, StatefulSet & Deployment updates

CircleCI Go Report Docker Pulls Drone Status Boss Bounty Badge

Keel - automated Kubernetes deployments for the rest of us

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, Hipchat, Mattermost and standard webhook notifications, more info here

Support

Support Keel's development by:

Warp speed quick start

To achieve warp speed, we will be using sunstone.dev service and Minikube.

Start Minikube:

minikube start

Install customized Keel (feel free to change credentials, namespace and version tag) straight from your kubectl.

# To override default latest semver tag, add &tag=x.x.x query argument to the URL below
kubectl apply -f https://sunstone.dev/keel?namespace=default&username=admin&password=admin&tag=latest
# and get Keel IP:
minikube service --namespace default keel --url
http://192.168.99.100:3199

We are overriding default latest semver tag with latest since it has the new UI. If you want to use latest semver, just remove the &tag=latest part from the URL.

Creating remotely accessible Keel instance

Keel can work together with webhook relay tunnels. To deploy Keel with Webhook Relay sidecar you will need to get a token, then pre-create a tunnel and:

kubectl apply -f https://sunstone.dev/keel?namespace=default&username=admin&password=admin&relay_key=TOKEN_KEY&relay_secret=TOKEN_SECRET&relay_tunnel=TUNNEL_NAME&tag=latest

Now, you can access Keel remotely.

Helm quick start

Prerequisites:

You need to add this Chart repo to Helm:

helm repo add keel https://charts.keel.sh 
helm repo update

Install through Helm (with Helm provider enabled by default):

helm upgrade --install keel --namespace=kube-system keel/keel

If you work mostly with regular Kubernetes manifests, you can install Keel without Helm provider support:

helm upgrade --install keel --namespace=keel keel/keel --set helmProvider.enabled="false" 

To install for Helm v3, set helmProvider.version="v3" (default is "v2"):

helm install keel keel/keel --set helmProvider.version="v3" 

That's it, see Configuration section now.

Quick Start

A step-by-step guide to install Keel on your Kubernetes cluster is viewable on the Keel website:

https://keel.sh/examples/#example-1-push-to-deploy

Configuration

Once Keel is deployed, you only need to specify update policy on your deployment file or Helm chart:

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: wd
  namespace: default
  labels: 
    name: "wd"
  annotations:
    keel.sh/policy: minor # <-- policy name according to https://semver.org/
    keel.sh/trigger: poll # <-- actively query registry, otherwise defaults to webhooks
spec:
  template:
    metadata:
      name: wd
      labels:
        app: wd        
    spec:
      containers:                    
        - image: karolisr/webhook-demo:0.0.8
          imagePullPolicy: Always            
          name: wd
          command: ["/bin/webhook-demo"]
          ports:
            - containerPort: 8090

No additional configuration is required. Enabling continuous delivery for your workloads has never been this easy!

Documentation

Documentation is viewable on the Keel Website:

https://keel.sh/docs/#introduction

Contributing

Before starting to work on some big or medium features - raise an issue here so we can coordinate our efforts.

We use pull requests, so:

  1. Fork this repository
  2. Create a branch on your local copy with a sensible name
  3. Push to your fork and open a pull request

Developing Keel

If you wish to work on Keel itself, you will need Go 1.12+ installed. Make sure you put Keel into correct Gopath and go build (dependency management is done through dep).

To test Keel while developing:

  1. Launch a Kubernetes cluster like Minikube or Docker for Mac with Kubernetes.
  2. Change config to use it: kubectl config use-context docker-for-desktop
  3. Build Keel from cmd/keel directory.
  4. Start Keel with: keel --no-incluster. This will use Kubeconfig from your home.

Running unit tests

Get a test parser (makes output nice):

go get github.com/mfridman/tparse

To run unit tests:

make test

Running e2e tests

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
Owner
Keel
Lightweight and fantastic Kubernetes automation tools
Keel
Comments
  • AWS ECR Polling on AWS EC2 with kops

    AWS ECR Polling on AWS EC2 with kops

    I have a Kubernetes setup on AWS EC2 with kops. I deploy images that are stored on AWS ECR in the same account.

    Polling fails with the following logs:

    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.RepositoryWatcher.addJob: failed to get image digest" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image1/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image="123.dkr.ecr.us-east-2.amazonaws.com/image1:tag"
    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.RepositoryWatcher.Watch: failed to add image watch job" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image1/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image_name="123.dkr.ecr.us-east-2.amazonaws.com/image1:tag" registry_username=
    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.manager: failed to start watching repository" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image1/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image="123.dkr.ecr.us-east-2.amazonaws.com/image1:tag" schedule="@every 1m"
    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.RepositoryWatcher.addJob: failed to get image digest" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image2/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image="123.dkr.ecr.us-east-2.amazonaws.com/image2:tag"
    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.RepositoryWatcher.Watch: failed to add image watch job" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image2/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image_name="123.dkr.ecr.us-east-2.amazonaws.com/image2:tag" registry_username=
    time="2018-04-18T08:50:10Z" level=error msg="trigger.poll.manager: failed to start watching repository" error="Get https://123.dkr.ecr.us-east-2.amazonaws.com/v2/image2/manifests/tag: http: non-successful response (status=401 body=\"Not Authorized\\n\")" image="123.dkr.ecr.us-east-2.amazonaws.com/image2:tag" schedule="@every 1m"
    

    Normally pulling images works without any additional configuration (i.e. when creating a pod), but keel seem to have issues with ECR. How can I resolve this?

  • feature request: Helm 3 Support

    feature request: Helm 3 Support

    Hi, Would be great if Helm 3 support could be added, it's in tiller-less form now and progressing through Beta releases, potentially could be added as a provider? For the restrictions I'm working within, it would also be good to have an option for use of credentials stored in secrets. Thanks

  • imagePullSecrets not found?

    imagePullSecrets not found?

    I just installed Keel on a Kubernetes 1.12 cluster on DigitalOcean using the provided resources. I have created a deployment with an image from a private Docker Hub repository. The default service account has the correct image pull secrets; the image gets pulled and the pods are started. (imagePullSecrets is set in the pod.)

    However, I still see this in the Keel logs over and over again:

    time="2018-11-14T00:41:30Z" level=error msg="trigger.poll.RepositoryWatcher.Watch: failed to add image watch job" error="Get https:/
    /index.docker.io/v2/goabout/automat/manifests/master: http: non-successful response (status=401 body=\"{\\\"errors\\\":[{\\\"code\\\
    ":\\\"UNAUTHORIZED\\\",\\\"message\\\":\\\"authentication required\\\",\\\"detail\\\":[{\\\"Type\\\":\\\"repository\\\",\\\"Class\\\
    ":\\\"\\\",\\\"Name\\\":\\\"goabout/automat\\\",\\\"Action\\\":\\\"pull\\\"}]}]}\\n\")" image="namespace:default,image:index.docker.
    io/goabout/automat,provider:kubernetes,trigger:poll,sched:@every 5m,secrets:[]"
    

    So it seems Keel does not pick up the imagePullSecrets correctly?

    Anything I can do to debug the problem further?

  • cannot overwrite table with non table for - warning

    cannot overwrite table with non table for - warning

    I started to get this warning:

    2019/04/19 12:45:24 warning: cannot overwrite table with non table for remoteWrite (map[])
    2019/04/19 12:45:24 warning: cannot overwrite table with non table for remoteRead (map[])
    2019/04/19 12:45:27 warning: cannot overwrite table with non table for remoteWrite (map[])
    2019/04/19 12:45:27 warning: cannot overwrite table with non table for remoteRead (map[])
    2019/04/19 12:45:30 warning: cannot overwrite table with non table for remoteRead (map[])
    2019/04/19 12:45:30 warning: cannot overwrite table with non table for remoteWrite (map[])
    

    any ideas why I get this?

  • Add UI into helm chart for testing

    Add UI into helm chart for testing

    Hi @rusenask .

    Any chance to add UI into helm chart as well? I know you posted how to add it and seems quite easy, but I want to make sure I will not miss smth when adding it myself.

    Thx.

  • Harbor webhook trigger payload changed?

    Harbor webhook trigger payload changed?

    Hi Everyone,

    I spent the whole afternoon trying to get the Harbor webhook trigger work without success, maybe Keel only supports the v1.X.X notification format and not the new v2.0.X? (If there is any difference, I only tried with v2.) Or did I miss something somewhere?

    According to https://keel.sh/docs/#harbor-webhooks I added a new webhook for image push in Harbor v2 to https://example.com/v1/webhooks/registry

    image

    But no matter how I try to configure Keel, it seems that the webhook is rejected or discarded silently. According to the Harbor jobservice logs, the webhook is pulled successfully but there is no sign of it in the Keel logs/audit menu. I also added another webhook in Harbor to check the payload, and if I send it with curl to Keel, it's the same, no log of the trigger but the response code is 200 OK. However, if I send random data to Keel, there is a trigger error logged and I get back code 400, so it must accept the JSON. I also tried setting the AUTHENTICATED_WEBHOOKS env variable to true and providing the user:pass string in base64 encoded format to Harbor auth header option with and without Basic prefix (i.e. Basic asdasdasd or just asdasdasd in the form field), it doesn't change, the trigger seems to be swallowed. On the other hand, polling works fine, setting it to 1m solves it mainly, it just produces thousands of pulls in the Harbor pull counter.

    If the Harbor payload has changed, could you please fix it? If I misconfigured something somewhere, could you please provide better docs for enabling Harbor webhooks? For example, the AUTHENTICATED_WEBHOOKS env var is only mentioned once without much explanation, maybe it has to do something with it? When experimenting with curl, I also saw that I got back 200 OK for posting the Harbor push notification payload no matter if I set the authorization header or not when the auth webhook var was true. Maybe it's completely unrelated. I feel lost with enabling the Harbor webhook trigger, please help.

  • Default 0.9.5 setup with chart 0.6.2 on GKE renders pod in CrashLoopBackOff

    Default 0.9.5 setup with chart 0.6.2 on GKE renders pod in CrashLoopBackOff

    Just followed the default steps to install it after cloning the repo and got this:

    helm upgrade --install keel --namespace=keel ./chart/keel/ --set helmProvider.enabled="false" --set rbac.enabled="false" --set slack.enabled="false"
    

    I needed RBAC disabled because this is running on GKE. So...

    MacBook-Air:keel caio1982$   kubectl --namespace=keel get pods -l "app=keel"
    NAME                   READY     STATUS             RESTARTS   AGE
    keel-d575f68c7-m5x72   0/1       CrashLoopBackOff   5          3m
    
    MacBook-Air:keel caio1982$ kubectl logs -n keel keel-d575f68c7-m5x72
    time="2018-08-23T17:34:14Z" level=info msg="extension.notification: sender registered" name=hipchat
    time="2018-08-23T17:34:14Z" level=info msg="extension.notification: sender registered" name=mattermost
    time="2018-08-23T17:34:14Z" level=info msg="extension.notification: sender registered" name=slack
    time="2018-08-23T17:34:14Z" level=info msg="extension.notification: sender registered" name=webhook
    time="2018-08-23T17:34:14Z" level=info msg="extension.credentialshelper: helper registered" name=aws
    time="2018-08-23T17:34:14Z" level=info msg="bot: registered" name=slack
    time="2018-08-23T17:34:14Z" level=info msg="keel starting..." arch=amd64 build_date=2018-06-25T212350Z go_version=go1.10.3 os=linux revision=73b16284 version=0.9.5
    time="2018-08-23T17:34:14Z" level=info msg="provider.kubernetes: using in-cluster configuration"
    time="2018-08-23T17:34:14Z" level=fatal msg="main: failed to initialise kube-kv" error="configmaps \"approvals\" is forbidden: User \"system:serviceaccount:keel:keel\" cannot get configmaps in the namespace \"keel\": Unknown user \"system:serviceaccount:keel:keel\"" namespace=keel
    

    Why is it still trying to use such service account if RBAC is disabled?

    Why is it still trying to set up the Slack integration bot if Slack is disabled?

    😥

  • Unversioned deployment with multiple pods does not update all pods

    Unversioned deployment with multiple pods does not update all pods

    I have a deployment with 5 replicas following a :latest tag. From the logs, I can see that keel resets the image to 0.0.0 and after 5 seconds applies :latest.

    The deployment seems to revert back to the previous version of replicaset, and the rollout does not continue for pods. The single pod that was recreated has the same rc version, but the latest image was pulled via imagePullPolicy. During the reset, I can see 2 pods in ErrImagePull state.

    I'm running keel 0.5.0-rc.1 with native webhooks with keel.sh/policy: force in kubernetes 1.7.x

    The events from the deployment are:

    Normal  ScalingReplicaSet  2m     deployment-controller  Scaled up replica set app-1687492293 to 1
    Normal  ScalingReplicaSet  2m     deployment-controller  Scaled down replica set app-3177265212 to 4
    Normal  ScalingReplicaSet  2m     deployment-controller  Scaled up replica set app-1687492293 to 2
    Normal  ScalingReplicaSet  2m     deployment-controller  Scaled up replica set app-3177265212 to 5
    Normal  ScalingReplicaSet  2m     deployment-controller  Scaled down replica set app-1687492293 to 0
    

    and in the end, the pods are:

    Name                        RC                             AGE
    app-3177265212-40zzc    app-3177265212   2017-10-27T13:26:34Z
    app-3177265212-85jsp    app-3177265212   2017-10-27T13:43:07Z   <- This pod has changed
    app-3177265212-b2mws    app-3177265212   2017-10-27T13:26:34Z
    app-3177265212-p9mkc    app-3177265212   2017-10-27T13:26:34Z
    app-3177265212-qth3s    app-3177265212   2017-10-27T13:26:34Z
    
  • Failed to setup Tiller tunnel

    Failed to setup Tiller tunnel

    Hi after I upgraded keel, keel pod stuck in status CrashLoopBackOff

    Normal   Pulled     10m (x5 over 12m)    kubelet, gke-reservation-app-cluster-pool-1-87c0303f-6h80  Container image "keelhq/keel:0.14.3-rc1" already present on machine  
    Normal   Created    10m (x5 over 12m)    kubelet, gke-reservation-app-cluster-pool-1-87c0303f-6h80  Created container  
    Normal   Started    10m (x5 over 12m)    kubelet, gke-reservation-app-cluster-pool-1-87c0303f-6h80  Started container
    Warning  BackOff    2m5s (x50 over 12m)  kubelet, gke-reservation-app-cluster-pool-1-87c0303f-6h80  Back-off restarting failed [container 
    

    Logs from keel pod

    time="2019-06-14T10:48:59Z" level=info msg="extension.credentialshelper: helper registered" name=aws
    time="2019-06-14T10:48:59Z" level=info msg="bot: registered" name=slack
    time="2019-06-14T10:48:59Z" level=info msg="keel starting..." arch=amd64 build_date=2019-06-14T091257Z go_version=go1.12 os=linux revision=86a28a0f version=
    time="2019-06-14T10:48:59Z" level=info msg="initializing database" database_path=/data/keel.db type=sqlite3
    time="2019-06-14T10:48:59Z" level=info msg="extension.notification.auditor: audit logger configured" name=auditor
    time="2019-06-14T10:48:59Z" level=info msg="notificationSender: sender configured" sender name=auditor
    time="2019-06-14T10:48:59Z" level=info msg="provider.kubernetes: using in-cluster configuration"
    time="2019-06-14T10:48:59Z" level=fatal msg="failed to setup Tiller tunnel" error="forwarding ports: error upgrading connection: pods \"tiller-deploy-7b4c69bc6f-k6r7c\" is forbidden: User \"system:serviceaccount:kube-system:keel\" cannot create resource \"pods/portforward\" in API group \"\" in the namespace \"kube-system\""
    
  • Use helm release namespace for installation

    Use helm release namespace for installation

    This removes hard-coded installation into kube-system in favor of using the helm release namespace, allowing the user to chose where to install keel.

    To connect to tiller, I added a new value helmProvider.tillerAddress with a default that should match the old behavior (tiller-deploy in kube-system).

    Mentioned in #136

  • Google Container Registry error

    Google Container Registry error

    When polling on an image deployed from GCP, I get the following error and am unable to move forward.

    The image is deployed with a pull secret using a service account. This service account has project viewer access as mentioned here: https://stackoverflow.com/questions/44783736/how-to-list-images-and-tags-from-the-gcr-io-docker-registry-using-the-http-api

    time="2018-04-18T11:19:18Z" level=error msg="trigger.poll.manager: failed to start watching repository" error="Get https://gcr.io/v2/ZZZZZZ-177614/sd/django-rest-api/manifests/master: http: non-successful response (status=401 body=\"{\\\"errors\\\":[{\\\"code\\\":\\\"UNAUTHORIZED\\\",\\\"message\\\":\\\"Requested repository does not match bearer token resource: ZZZZZZ-177614/sd/django-rest-api\\\"}]}\")" image="gcr.io/ZZZZZZZ-177614/sd/django-rest-api:master" schedule="@every 5m"
    
  • Bump github.com/aws/aws-sdk-go from 1.31.10 to 1.33.0

    Bump github.com/aws/aws-sdk-go from 1.31.10 to 1.33.0

    Bumps github.com/aws/aws-sdk-go from 1.31.10 to 1.33.0.

    Changelog

    Sourced from github.com/aws/aws-sdk-go's changelog.

    Release v1.33.0 (2020-07-01)

    Service Client Updates

    • service/appsync: Updates service API and documentation
    • service/chime: Updates service API and documentation
      • This release supports third party emergency call routing configuration for Amazon Chime Voice Connectors.
    • service/codebuild: Updates service API and documentation
      • Support build status config in project source
    • service/imagebuilder: Updates service API and documentation
    • service/rds: Updates service API
      • This release adds the exceptions KMSKeyNotAccessibleFault and InvalidDBClusterStateFault to the Amazon RDS ModifyDBInstance API.
    • service/securityhub: Updates service API and documentation

    SDK Features

    • service/s3/s3crypto: Introduces EncryptionClientV2 and DecryptionClientV2 encryption and decryption clients which support a new key wrapping algorithm kms+context. (#3403)
      • DecryptionClientV2 maintains the ability to decrypt objects encrypted using the EncryptionClient.
      • Please see s3crypto documentation for migration details.

    Release v1.32.13 (2020-06-30)

    Service Client Updates

    • service/codeguru-reviewer: Updates service API and documentation
    • service/comprehendmedical: Updates service API
    • service/ec2: Updates service API and documentation
      • Added support for tag-on-create for CreateVpc, CreateEgressOnlyInternetGateway, CreateSecurityGroup, CreateSubnet, CreateNetworkInterface, CreateNetworkAcl, CreateDhcpOptions and CreateInternetGateway. You can now specify tags when creating any of these resources. For more information about tagging, see AWS Tagging Strategies.
    • service/ecr: Updates service API and documentation
      • Add a new parameter (ImageDigest) and a new exception (ImageDigestDoesNotMatchException) to PutImage API to support pushing image by digest.
    • service/rds: Updates service documentation
      • Documentation updates for rds

    Release v1.32.12 (2020-06-29)

    Service Client Updates

    • service/autoscaling: Updates service documentation and examples
      • Documentation updates for Amazon EC2 Auto Scaling.
    • service/codeguruprofiler: Updates service API, documentation, and paginators
    • service/codestar-connections: Updates service API, documentation, and paginators
    • service/ec2: Updates service API, documentation, and paginators
      • Virtual Private Cloud (VPC) customers can now create and manage their own Prefix Lists to simplify VPC configurations.

    Release v1.32.11 (2020-06-26)

    Service Client Updates

    • service/cloudformation: Updates service API and documentation
      • ListStackInstances and DescribeStackInstance now return a new StackInstanceStatus object that contains DetailedStatus values: a disambiguation of the more generic Status value. ListStackInstances output can now be filtered on DetailedStatus using the new Filters parameter.
    • service/cognito-idp: Updates service API

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • E1229 16:38:40.249137       1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.1-0.20190516230509-ae8359b20417+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.CronJob: the server could not find the requested resource

    E1229 16:38:40.249137 1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.CronJob: the server could not find the requested resource

    Hi,

    Just installed keel 0.16.1 via the helm chart on my microk8s cluster, but my logs are flooded with messages like:

    E1229 16:38:38.244452       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.CronJob: the server could not find the requested resource
    E1229 16:38:39.246345       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.CronJob: the server could not find the requested resource
    E1229 16:38:40.249137       1 reflector.go:126] pkg/mod/k8s.io/[email protected]+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.CronJob: the server could not find the requested resource
    

    ... Apparently, we're looking for CronJobs in the wrong api resource :-)

    $ kubectl api-resources |grep cron
    cronjobs                          cj           batch/v1                               true         CronJob
    
    
  • Add support for JFrog container registry webhooks

    Add support for JFrog container registry webhooks

    Also supports reading a PRIVATE_REGISTRY env var for cases where a webhook payload is received without containing the registry URI, since this is not currently part of their payload schema.

  • Bump express from 4.16.4 to 4.18.2 in /ui

    Bump express from 4.16.4 to 4.18.2 in /ui

    Bumps express from 4.16.4 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump decode-uri-component from 0.2.0 to 0.2.2 in /ui

    Bump decode-uri-component from 0.2.0 to 0.2.2 in /ui

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Shoutrrr Notification support (incl. Pushover and many others)

    Shoutrrr Notification support (incl. Pushover and many others)

    It would be cool if Keel supported sending its Notifications to https://pushover.net.

    Pushover's API seems pretty straight forward.

    Perhaps I will look into contributing this, some time.

    PS: An alternative could be to just use Keel's Webhook integration, and hack a "bridge" from that to Pushover, outside of Keel.

Basic Kubernetes operator that have multiple versions in CRD. This operator can be used to experiment and understand Operator/CRD behaviors.

add-operator Basic Kubernetes operator that have multiple versions in CRD. This operator can be used to experiment and understand Operator/CRD behavio

Dec 15, 2021
A best practices Go source project with unit-test and integration test, also use skaffold & helm to automate CI & CD at local to optimize development cycle

Dependencies Docker Go 1.17 MySQL 8.0.25 Bootstrap Run chmod +x start.sh if start.sh script does not have privileged to run Run ./start.sh --bootstrap

Apr 4, 2022
A helm v3 plugin to adopt existing k8s resources into a new generated helm chart

helm-adopt Overview helm-adopt is a helm plugin to adopt existing k8s resources into a new generated helm chart, the idea behind the plugin was inspir

Dec 15, 2022
helm-lint-ls is helm lint language server protocol LSP.

helm-lint-ls is helm lint language server protocol LSP.

Dec 27, 2022
An operator which complements grafana-operator for custom features which are not feasible to be merged into core operator

Grafana Complementary Operator A grafana which complements grafana-operator for custom features which are not feasible to be merged into core operator

Aug 16, 2022
Kubernetes Operator for a Cloud-Native OpenVPN Deployment.

Meerkat is a Kubernetes Operator that facilitates the deployment of OpenVPN in a Kubernetes cluster. By leveraging Hashicorp Vault, Meerkat securely manages the underlying PKI.

Jan 4, 2023
The Elastalert Operator is an implementation of a Kubernetes Operator, to easily integrate elastalert with gitops.

Elastalert Operator for Kubernetes The Elastalert Operator is an implementation of a Kubernetes Operator. Getting started Firstly, learn How to use el

Jun 28, 2022
Minecraft-operator - A Kubernetes operator for Minecraft Java Edition servers

Minecraft Operator A Kubernetes operator for dedicated servers of the video game

Dec 15, 2022
K8s-network-config-operator - Kubernetes network config operator to push network config to switches

Kubernetes Network operator Will add more to the readme later :D Operations The

May 16, 2022
Pulumi-k8s-operator-example - OpenGitOps Compliant Pulumi Kubernetes Operator Example

Pulumi GitOps Example OpenGitOps Compliant Pulumi Kubernetes Operator Example Pr

May 6, 2022
Kubernetes Operator Samples using Go, the Operator SDK and OLM
Kubernetes Operator Samples using Go, the Operator SDK and OLM

Kubernetes Operator Patterns and Best Practises This project contains Kubernetes operator samples that demonstrate best practices how to develop opera

Nov 24, 2022
provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters

provider-kubernetes provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters ty

Dec 14, 2022
Test Operator using operator-sdk 1.15

test-operator Test Operator using operator-sdk 1.15 operator-sdk init --domain rbt.com --repo github.com/ravitri/test-operator Writing kustomize manif

Dec 28, 2021
a k8s operator 、operator-sdk

helloworld-operator a k8s operator 、operator-sdk Operator 参考 https://jicki.cn/kubernetes-operator/ https://learnku.com/articles/60683 https://opensour

Jan 27, 2022
Operator Permissions Advisor is a CLI tool that will take a catalog image and statically parse it to determine what permissions an Operator will request of OLM during an install

Operator Permissions Advisor is a CLI tool that will take a catalog image and statically parse it to determine what permissions an Operator will request of OLM during an install. The permissions are aggregated from the following sources:

Apr 22, 2022
Dredger is a utility to help convert helm charts to Terraform modules using kubernetes provider.

dredger Dredger is a utility to help convert helm charts to Terraform modules using kubernetes provider. Dredger is made of dark magic and cannot full

Aug 25, 2022
Creates Helm chart from Kubernetes yaml

Helmify CLI that creates Helm charts from kubernetes yamls. Helmify reads a list of supported k8s objects from stdin and converts it to a helm chart.

Dec 28, 2022
The CLI tool glueing Git, Docker, Helm and Kubernetes with any CI system to implement CI/CD and Giterminism
The CLI tool glueing Git, Docker, Helm and Kubernetes with any CI system to implement CI/CD and Giterminism

___ werf is an Open Source CLI tool written in Go, designed to simplify and speed up the delivery of applications. To use it, you need to describe the

Jan 4, 2023