All Projects → etiennecoutaud → Kanary

etiennecoutaud / Kanary

Licence: apache-2.0
Kubernetes Operator to manage canary deployment using HAProxy

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Kanary

Kubernetes Pfsense Controller
Integrate Kubernetes and pfSense
Stars: ✭ 100 (+614.29%)
Mutual labels:  load-balancer, haproxy, k8s
radondb-mysql-kubernetes
Open Source,High Availability Cluster,based on MySQL
Stars: ✭ 146 (+942.86%)
Mutual labels:  operator, k8s
siddhi-operator
Operator allows you to run stream processing logic directly on a Kubernetes cluster
Stars: ✭ 16 (+14.29%)
Mutual labels:  operator, k8s
rabbitmq-operator
RabbitMQ Kubernetes operator
Stars: ✭ 16 (+14.29%)
Mutual labels:  operator, k8s
namespace-provisioner
A Kubernetes operator creating K8s resources by annotating namespaces
Stars: ✭ 52 (+271.43%)
Mutual labels:  operator, k8s
capistrano-docker-compose
Docker Compose specific tasks for Capistrano
Stars: ✭ 17 (+21.43%)
Mutual labels:  deployment, haproxy
atlassian-kubernetes
All things Atlassian and Kubernetes
Stars: ✭ 30 (+114.29%)
Mutual labels:  deployment, k8s
codis-operator
Codis Operator creates and manages codis clusters(proxy based Redis cluster solution) running in kubernetes.(WIP)
Stars: ✭ 21 (+50%)
Mutual labels:  operator, k8s
Linstor Server
High Performance Software-Defined Block Storage for container, cloud and virtualisation. Fully integrated with Docker, Kubernetes, Openstack, Proxmox etc.
Stars: ✭ 374 (+2571.43%)
Mutual labels:  operator, k8s
Kooper
Kooper is a simple Go library to create Kubernetes operators and controllers.
Stars: ✭ 388 (+2671.43%)
Mutual labels:  operator, k8s
Marathon Lb
Marathon-lb is a service discovery & load balancing tool for DC/OS
Stars: ✭ 449 (+3107.14%)
Mutual labels:  load-balancer, haproxy
grafana-operator
An operator for Grafana that installs and manages Grafana instances, Dashboards and Datasources through Kubernetes/OpenShift CRs
Stars: ✭ 449 (+3107.14%)
Mutual labels:  operator, k8s
configurator
Synchronize and Version Control ConfigMaps & Secrets across Deployment Rollouts.
Stars: ✭ 68 (+385.71%)
Mutual labels:  deployment, k8s
HAProxy-2-RPM-builder
Build latest HAProxy binary with prometheus metrics support
Stars: ✭ 28 (+100%)
Mutual labels:  load-balancer, haproxy
bilrost
Kubernetes controller/operator to set up OAUTH2/OIDC security on any ingress based service
Stars: ✭ 17 (+21.43%)
Mutual labels:  operator, k8s
memcached
Memcached Operator for Kubernetes
Stars: ✭ 18 (+28.57%)
Mutual labels:  operator, k8s
Multitor
Create multiple TOR instances with a load-balancing.
Stars: ✭ 624 (+4357.14%)
Mutual labels:  load-balancer, haproxy
sbom-operator
Catalogue all images of a Kubernetes cluster to multiple targets with Syft
Stars: ✭ 114 (+714.29%)
Mutual labels:  operator, k8s
evolution
Evolution process of The Falco Project
Stars: ✭ 37 (+164.29%)
Mutual labels:  deployment, k8s
Adapt
ReactJS for your infrastructure. Create and deploy full-stack apps to any infrastructure using the power of React.
Stars: ✭ 317 (+2164.29%)
Mutual labels:  deployment, k8s

Kanary : Canary Release Operator for Kubernetes

toto codecov Go Report Master GitHub release License

This Kubernetes operator aims to manage canary release deployment using HAProxy container as L4 (TCP) loadbalancer

Operator installation

kubectl apply -f https://raw.githubusercontent.com/etiennecoutaud/kanary/master/manifests/kanary.yml

CustomRessourceDefinitions

Kanary Operator manipulate kanary custom ressource, short name is ky

kubectl get kanary
NAME                 AGE
simple-kanary-rule   9s
apiVersion: kanary.pyxida.io/v1alpha1
kind: Kanary
metadata:
  name: simple-kanary-rule
spec:
  destination: myapp
  routes:
  - backend:
     serviceName: "myapp-v1"
     servicePort: "http"
    weight: 80
  - backend:
      serviceName: "myapp-v2"
      servicePort: 9090
    weight: 20

In this example:

  • HAProxy will be exposed by myapp service, indicated in destination field
  • Canary release is loadbalancing to myapp-v1 and myapp-v2 services previously created by the user
  • HAProxy referenced to service backend port with servicePort fiels, it can be port name or port value
  • Loadbalancing is performed based on weight field
  • Multiple backends can be set, sum of weight must be equal to 100

How it works

Kanary Operator will act on kanary CRD and will perform:

  • HAProxy loabalancer generation
  • Manage configuration and update based on weight loadbalancing
  • Reference pod endpoint directly for more efficiency
  • Trigger automatic HAProxy rolling update when configuration changed for no service outage
  • Manage route as Kubernetes service to access to HAProxy

Kanary Operator is manipulating Kubernetes ressources:

  • Deployment
  • Endpoint
  • ConfigMap
  • Service

A RBAC dedicated role is needed to provide the ability to perform all operation on theses ressources

Architecture and example

Diagrams done with Kubernetes icons

Initial state: 2 version of the same application are running, each pods is exposed with a service initial

Kanary ressource is apply to the namespace to loadbalance pods depend on weight ky

This stack can be deployed in your cluster:

kubectl apply -f https://raw.githubusercontent.com/etiennecoutaud/kanary/master/examples/simple-stack.yml

License

The work done has been licensed under Apache License 2.0. The license file can be found here. You can find out more about the license at www.apache.org/licenses/LICENSE-2.0.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].