All Projects → fluxcd → Flagger

fluxcd / Flagger

Licence: apache-2.0
Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to Flagger

iter8-analytics
AI-engine that powers Iter8
Stars: ✭ 16 (-99.52%)
Mutual labels:  canary, ab-testing, istio, progressive-delivery
gitops-app-distribution
GitOps workflow for managing app delivery on multiple clusters
Stars: ✭ 22 (-99.34%)
Mutual labels:  linkerd, istio, gitops, progressive-delivery
gitops-helm-workshop
Progressive Delivery for Kubernetes with Flux, Helm, Linkerd and Flagger
Stars: ✭ 59 (-98.23%)
Mutual labels:  canary, linkerd, gitops, progressive-delivery
Gitops Istio
GitOps Progressive Delivery demo with Istio, Flux, Helm Operator and Flagger
Stars: ✭ 412 (-87.65%)
Mutual labels:  ab-testing, istio
Kubeadm Ha
Kubernetes high availiability deploy based on kubeadm, loadbalancer included (English/中文 for v1.15 - v1.20+)
Stars: ✭ 614 (-81.6%)
Mutual labels:  istio, nginx
External Auth Server
easy auth for reverse proxies
Stars: ✭ 189 (-94.34%)
Mutual labels:  istio, nginx
Arkade
Open Source Kubernetes Marketplace
Stars: ✭ 2,343 (-29.79%)
Mutual labels:  istio, nginx
service-mesh-labs
Lab scenarios for learning how to service mesh.
Stars: ✭ 22 (-99.34%)
Mutual labels:  linkerd, istio
K8s Deployment Strategies
Kubernetes deployment strategies explained
Stars: ✭ 2,649 (-20.62%)
Mutual labels:  ab-testing, canary
meshery
Meshery, the cloud native manager
Stars: ✭ 1,587 (-52.44%)
Mutual labels:  linkerd, istio
learn-layer5
A sample application for learning how to service mesh and for validating SMI conformance
Stars: ✭ 43 (-98.71%)
Mutual labels:  linkerd, istio
gitops-k8s
Declarative pull-based GitOps repository representing the state of a Kubernetes cluster
Stars: ✭ 82 (-97.54%)
Mutual labels:  istio, gitops
eks-hpa-profile
An eksctl gitops profile for autoscaling with Prometheus metrics on Amazon EKS on AWS Fargate
Stars: ✭ 26 (-99.22%)
Mutual labels:  gitops, aws-appmesh
Kubernetes-and-Cloud-Native-Associate-KCNA
Useful notes for the KCNA - Kubernetes and Cloud Native Associate
Stars: ✭ 162 (-95.15%)
Mutual labels:  istio, gitops
meshery-operator
The service mesh operator.
Stars: ✭ 41 (-98.77%)
Mutual labels:  linkerd, istio
growthbook
Open Source Feature Flagging and A/B Testing Platform
Stars: ✭ 2,342 (-29.82%)
Mutual labels:  ab-testing
gitopscli
GitOps CLI - a command line interface (CLI) to perform operations on git repositories with yaml files
Stars: ✭ 25 (-99.25%)
Mutual labels:  gitops
python-client
Python SDK client for Split Software
Stars: ✭ 12 (-99.64%)
Mutual labels:  ab-testing
solutions-terraform-jenkins-gitops
Demonstrates the use of Jenkins and Terraform to manage Infrastructure as Code using GitOps practices
Stars: ✭ 49 (-98.53%)
Mutual labels:  gitops
Microservices Traffic Management Using Istio
Istio is an open platform that provides a uniform way to connect, manage, and secure microservices. In this code we show how we can enable your microservices with advanced traffic management, routing and tracing capabilities leveraging Istio
Stars: ✭ 257 (-92.3%)
Mutual labels:  istio

flagger

CII Best Practices build report license release

Flagger is a progressive delivery tool that automates the release process for applications running on Kubernetes. It reduces the risk of introducing a new software version in production by gradually shifting traffic to the new version while measuring metrics and running conformance tests.

flagger-overview

Flagger implements several deployment strategies (Canary releases, A/B testing, Blue/Green mirroring) using a service mesh (App Mesh, Istio, Linkerd, Open Service Mesh) or an ingress controller (Contour, Gloo, NGINX, Skipper, Traefik) for traffic routing. For release analysis, Flagger can query Prometheus, Datadog, New Relic, CloudWatch, Dynatrace, InfluxDB and Stackdriver and for alerting it uses Slack, MS Teams, Discord, Rocket and Google Chat.

Flagger is a Cloud Native Computing Foundation project and part of Flux family of GitOps tools.

Documentation

Flagger documentation can be found at docs.flagger.app.

Who is using Flagger

Our list of production users has moved to https://fluxcd.io/adopters/#flagger.

If you are using Flagger, please submit a PR to add your organization to the list!

Canary CRD

Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA), then creates a series of objects (Kubernetes deployments, ClusterIP services, service mesh or ingress routes). These objects expose the application on the mesh and drive the canary analysis and promotion.

Flagger keeps track of ConfigMaps and Secrets referenced by a Kubernetes Deployment and triggers a canary analysis if any of those objects change. When promoting a workload in production, both code (container images) and configuration (config maps and secrets) are being synchronised.

For a deployment named podinfo, a canary promotion can be defined using Flagger's custom resource:

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: podinfo
  namespace: test
spec:
  # service mesh provider (optional)
  # can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, contour, gloo, supergloo, traefik, osm
  # for SMI TrafficSplit can be: smi:v1alpha1, smi:v1alpha2, smi:v1alpha3
  provider: istio
  # deployment reference
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: podinfo
  # the maximum time in seconds for the canary deployment
  # to make progress before it is rollback (default 600s)
  progressDeadlineSeconds: 60
  # HPA reference (optional)
  autoscalerRef:
    apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    name: podinfo
  service:
    # service name (defaults to targetRef.name)
    name: podinfo
    # ClusterIP port number
    port: 9898
    # container port name or number (optional)
    targetPort: 9898
    # port name can be http or grpc (default http)
    portName: http
    # add all the other container ports
    # to the ClusterIP services (default false)
    portDiscovery: true
    # HTTP match conditions (optional)
    match:
      - uri:
          prefix: /
    # HTTP rewrite (optional)
    rewrite:
      uri: /
    # request timeout (optional)
    timeout: 5s
  # promote the canary without analysing it (default false)
  skipAnalysis: false
  # define the canary analysis timing and KPIs
  analysis:
    # schedule interval (default 60s)
    interval: 1m
    # max number of failed metric checks before rollback
    threshold: 10
    # max traffic percentage routed to canary
    # percentage (0-100)
    maxWeight: 50
    # canary increment step
    # percentage (0-100)
    stepWeight: 5
    # validation (optional)
    metrics:
    - name: request-success-rate
      # builtin Prometheus check
      # minimum req success rate (non 5xx responses)
      # percentage (0-100)
      thresholdRange:
        min: 99
      interval: 1m
    - name: request-duration
      # builtin Prometheus check
      # maximum req duration P99
      # milliseconds
      thresholdRange:
        max: 500
      interval: 30s
    - name: "database connections"
      # custom metric check
      templateRef:
        name: db-connections
      thresholdRange:
        min: 2
        max: 100
      interval: 1m
    # testing (optional)
    webhooks:
      - name: "conformance test"
        type: pre-rollout
        url: http://flagger-helmtester.test/
        timeout: 5m
        metadata:
          type: "helmv3"
          cmd: "test run podinfo -n test"
      - name: "load test"
        type: rollout
        url: http://flagger-loadtester.test/
        metadata:
          cmd: "hey -z 1m -q 10 -c 2 http://podinfo.test:9898/"
    # alerting (optional)
    alerts:
      - name: "dev team Slack"
        severity: error
        providerRef:
          name: dev-slack
          namespace: flagger
      - name: "qa team Discord"
        severity: warn
        providerRef:
          name: qa-discord
      - name: "on-call MS Teams"
        severity: info
        providerRef:
          name: on-call-msteams

For more details on how the canary analysis and promotion works please read the docs.

Features

Service Mesh

Feature App Mesh Istio Linkerd Open Service Mesh SMI Kubernetes CNI
Canary deployments (weighted traffic) ✔️ ✔️ ✔️ ✔️ ✔️
A/B testing (headers and cookies routing) ✔️ ✔️
Blue/Green deployments (traffic switch) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Blue/Green deployments (traffic mirroring) ✔️
Webhooks (acceptance/load testing) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Manual gating (approve/pause/resume) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Request success rate check (L7 metric) ✔️ ✔️ ✔️ ✔️
Request duration check (L7 metric) ✔️ ✔️ ✔️ ✔️
Custom metric checks ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

For other SMI compatible service mesh solutions like Consul Connect or Nginx Service Mesh, Prometheus MetricTemplates can be used to implement the request success rate and request duration checks.

Ingress

Feature Contour Gloo NGINX Skipper Traefik
Canary deployments (weighted traffic) ✔️ ✔️ ✔️ ✔️ ✔️
A/B testing (headers and cookies routing) ✔️ ✔️ ✔️
Blue/Green deployments (traffic switch) ✔️ ✔️ ✔️ ✔️ ✔️
Webhooks (acceptance/load testing) ✔️ ✔️ ✔️ ✔️ ✔️
Manual gating (approve/pause/resume) ✔️ ✔️ ✔️ ✔️ ✔️
Request success rate check (L7 metric) ✔️ ✔️ ✔️ ✔️
Request duration check (L7 metric) ✔️ ✔️ ✔️ ✔️
Custom metric checks ✔️ ✔️ ✔️ ✔️ ✔️

Roadmap

GitOps Toolkit compatibility

  • Migrate Flagger to Kubernetes controller-runtime and kubebuilder
  • Make the Canary status compatible with kstatus
  • Make Flagger emit Kubernetes events compatible with Flux v2 notification API
  • Integrate Flagger into Flux v2 as the progressive delivery component

Integrations

  • Add support for Kubernetes Ingress v2
  • Add support for ingress controllers like HAProxy and ALB
  • Add support for metrics providers like InfluxDB, Stackdriver, SignalFX

Contributing

Flagger is Apache 2.0 licensed and accepts contributions via GitHub pull requests. To start contributing please read the development guide.

When submitting bug reports please include as much details as possible:

  • which Flagger version
  • which Flagger CRD version
  • which Kubernetes version
  • what configuration (canary, ingress and workloads definitions)
  • what happened (Flagger and Proxy logs)

Getting Help

If you have any questions about Flagger and progressive delivery:

Your feedback is always welcome!

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].