Rename project to flagger

This commit is contained in:
Stefan Prodan
2018-10-07 13:08:42 +03:00
parent 0848fb27d2
commit c3f4f0a925
90 changed files with 482 additions and 501 deletions
+1 -1
View File
@@ -1 +1 @@
steerer.app
flagger.app
+76 -76
View File
@@ -1,43 +1,43 @@
# steerer
# flagger
[![build](https://travis-ci.org/stefanprodan/steerer.svg?branch=master)](https://travis-ci.org/stefanprodan/steerer)
[![report](https://goreportcard.com/badge/github.com/stefanprodan/steerer)](https://goreportcard.com/report/github.com/stefanprodan/steerer)
[![license](https://img.shields.io/github/license/stefanprodan/steerer.svg)](https://github.com/stefanprodan/steerer/blob/master/LICENSE)
[![release](https://img.shields.io/github/release/stefanprodan/steerer/all.svg)](https://github.com/stefanprodan/steerer/releases)
[![build](https://travis-ci.org/stefanprodan/flagger.svg?branch=master)](https://travis-ci.org/stefanprodan/flagger)
[![report](https://goreportcard.com/badge/github.com/stefanprodan/flagger)](https://goreportcard.com/report/github.com/stefanprodan/flagger)
[![license](https://img.shields.io/github/license/stefanprodan/flagger.svg)](https://github.com/stefanprodan/flagger/blob/master/LICENSE)
[![release](https://img.shields.io/github/release/stefanprodan/flagger/all.svg)](https://github.com/stefanprodan/flagger/releases)
Steerer is a Kubernetes operator that automates the promotion of canary deployments
Flagger is a Kubernetes operator that automates the promotion of canary deployments
using Istio routing for traffic shifting and Prometheus metrics for canary analysis.
The project is currently in experimental phase and it is expected that breaking changes
to the API will be made in the upcoming releases.
### Install
Before installing Steerer make sure you have Istio setup up with Prometheus enabled.
Before installing Flagger make sure you have Istio setup up with Prometheus enabled.
If you are new to Istio you can follow my [Istio service mesh walk-through](https://github.com/stefanprodan/istio-gke).
Deploy Steerer in the `istio-system` namespace using Helm:
Deploy Flagger in the `istio-system` namespace using Helm:
```bash
# add the Helm repository
helm repo add steerer https://stefanprodan.github.io/steerer
helm repo add flagger https://stefanprodan.github.io/flagger
# install or upgrade
helm upgrade -i steerer steerer/steerer \
helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set metricsServer=http://prometheus.istio-system:9090 \
--set controlLoopInterval=1m
```
Steerer is compatible with Kubernetes >1.10.0 and Istio >1.0.0.
Flagger is compatible with Kubernetes >1.10.0 and Istio >1.0.0.
### Usage
Steerer requires two Kubernetes [deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/):
Flagger requires two Kubernetes [deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/):
one for the version you want to upgrade called _primary_ and one for the _canary_.
Each deployment must have a corresponding ClusterIP [service](https://kubernetes.io/docs/concepts/services-networking/service/)
that exposes a port named http or https. These services are used as destinations in a Istio [virtual service](https://istio.io/docs/reference/config/istio.networking.v1alpha3/#VirtualService).
![steerer-overview](https://raw.githubusercontent.com/stefanprodan/steerer/master/docs/diagrams/steerer-overview.png)
![flagger-overview](https://raw.githubusercontent.com/stefanprodan/flagger/master/docs/diagrams/flagger-overview.png)
Gated canary promotion stages:
@@ -68,9 +68,9 @@ Gated canary promotion stages:
* mark rollout as finished
* wait for the canary deployment to be updated (revision bump) and start over
You can change the canary analysis _max weight_ and the _step weight_ percentage in the Steerer's custom resource.
You can change the canary analysis _max weight_ and the _step weight_ percentage in the Flagger's custom resource.
Assuming the primary deployment is named _podinfo_ and the canary one _podinfo-canary_, Steerer will require
Assuming the primary deployment is named _podinfo_ and the canary one _podinfo-canary_, Flagger will require
a virtual service configured with weight-based routing:
```yaml
@@ -112,10 +112,10 @@ spec:
targetPort: 9898
```
Based on the two deployments, services and virtual service, a canary promotion can be defined using Steerer's custom resource:
Based on the two deployments, services and virtual service, a canary promotion can be defined using Flagger's custom resource:
```yaml
apiVersion: steerer.app/v1beta1
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
@@ -198,12 +198,12 @@ histogram_quantile(0.99,
### Automated canary analysis, promotions and rollbacks
![steerer-canary](https://raw.githubusercontent.com/stefanprodan/steerer/master/docs/diagrams/steerer-canary-hpa.png)
![flagger-canary](https://raw.githubusercontent.com/stefanprodan/flagger/master/docs/diagrams/flagger-canary-hpa.png)
Create a test namespace with Istio sidecar injection enabled:
```bash
export REPO=https://raw.githubusercontent.com/stefanprodan/steerer/master
export REPO=https://raw.githubusercontent.com/stefanprodan/flagger/master
kubectl apply -f ${REPO}/artifacts/namespaces/test.yaml
```
@@ -248,29 +248,29 @@ Status:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Synced 3m steerer Starting canary deployment for podinfo.test
Normal Synced 3m steerer Advance podinfo.test canary weight 5
Normal Synced 3m steerer Advance podinfo.test canary weight 10
Normal Synced 3m steerer Advance podinfo.test canary weight 15
Warning Synced 3m steerer Halt podinfo.test advancement request duration 2.525s > 500ms
Warning Synced 3m steerer Halt podinfo.test advancement request duration 1.567s > 500ms
Warning Synced 3m steerer Halt podinfo.test advancement request duration 823ms > 500ms
Normal Synced 2m steerer Advance podinfo.test canary weight 20
Normal Synced 2m steerer Advance podinfo.test canary weight 25
Normal Synced 1m steerer Advance podinfo.test canary weight 30
Warning Synced 1m steerer Halt podinfo.test advancement success rate 82.33% < 99%
Warning Synced 1m steerer Halt podinfo.test advancement success rate 87.22% < 99%
Warning Synced 1m steerer Halt podinfo.test advancement success rate 94.74% < 99%
Normal Synced 1m steerer Advance podinfo.test canary weight 35
Normal Synced 55s steerer Advance podinfo.test canary weight 40
Normal Synced 45s steerer Advance podinfo.test canary weight 45
Normal Synced 35s steerer Advance podinfo.test canary weight 50
Normal Synced 25s steerer Copying podinfo-canary.test template spec to podinfo.test
Warning Synced 15s steerer Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
Normal Synced 5s steerer Promotion completed! Scaling down podinfo-canary.test
Normal Synced 3m flagger Starting canary deployment for podinfo.test
Normal Synced 3m flagger Advance podinfo.test canary weight 5
Normal Synced 3m flagger Advance podinfo.test canary weight 10
Normal Synced 3m flagger Advance podinfo.test canary weight 15
Warning Synced 3m flagger Halt podinfo.test advancement request duration 2.525s > 500ms
Warning Synced 3m flagger Halt podinfo.test advancement request duration 1.567s > 500ms
Warning Synced 3m flagger Halt podinfo.test advancement request duration 823ms > 500ms
Normal Synced 2m flagger Advance podinfo.test canary weight 20
Normal Synced 2m flagger Advance podinfo.test canary weight 25
Normal Synced 1m flagger Advance podinfo.test canary weight 30
Warning Synced 1m flagger Halt podinfo.test advancement success rate 82.33% < 99%
Warning Synced 1m flagger Halt podinfo.test advancement success rate 87.22% < 99%
Warning Synced 1m flagger Halt podinfo.test advancement success rate 94.74% < 99%
Normal Synced 1m flagger Advance podinfo.test canary weight 35
Normal Synced 55s flagger Advance podinfo.test canary weight 40
Normal Synced 45s flagger Advance podinfo.test canary weight 45
Normal Synced 35s flagger Advance podinfo.test canary weight 50
Normal Synced 25s flagger Copying podinfo-canary.test template spec to podinfo.test
Warning Synced 15s flagger Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
Normal Synced 5s flagger Promotion completed! Scaling down podinfo-canary.test
```
During the canary analysis you can generate HTTP 500 errors and high latency to test if Steerer pauses the rollout.
During the canary analysis you can generate HTTP 500 errors and high latency to test if Flagger pauses the rollout.
Create a tester pod and exec into it:
@@ -304,17 +304,17 @@ Status:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Synced 3m steerer Starting canary deployment for podinfo.test
Normal Synced 3m steerer Advance podinfo.test canary weight 5
Normal Synced 3m steerer Advance podinfo.test canary weight 10
Normal Synced 3m steerer Advance podinfo.test canary weight 15
Normal Synced 3m steerer Halt podinfo.test advancement success rate 69.17% < 99%
Normal Synced 2m steerer Halt podinfo.test advancement success rate 61.39% < 99%
Normal Synced 2m steerer Halt podinfo.test advancement success rate 55.06% < 99%
Normal Synced 2m steerer Halt podinfo.test advancement success rate 47.00% < 99%
Normal Synced 2m steerer (combined from similar events): Halt podinfo.test advancement success rate 38.08% < 99%
Warning Synced 1m steerer Rolling back podinfo-canary.test failed checks threshold reached 10
Warning Synced 1m steerer Canary failed! Scaling down podinfo-canary.test
Normal Synced 3m flagger Starting canary deployment for podinfo.test
Normal Synced 3m flagger Advance podinfo.test canary weight 5
Normal Synced 3m flagger Advance podinfo.test canary weight 10
Normal Synced 3m flagger Advance podinfo.test canary weight 15
Normal Synced 3m flagger Halt podinfo.test advancement success rate 69.17% < 99%
Normal Synced 2m flagger Halt podinfo.test advancement success rate 61.39% < 99%
Normal Synced 2m flagger Halt podinfo.test advancement success rate 55.06% < 99%
Normal Synced 2m flagger Halt podinfo.test advancement success rate 47.00% < 99%
Normal Synced 2m flagger (combined from similar events): Halt podinfo.test advancement success rate 38.08% < 99%
Warning Synced 1m flagger Rolling back podinfo-canary.test failed checks threshold reached 10
Warning Synced 1m flagger Canary failed! Scaling down podinfo-canary.test
```
Trigger a new canary deployment by updating the canary image:
@@ -336,44 +336,44 @@ Status:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Synced 3m steerer New revision detected podinfo-canary.test old 17211012 new 17246876
Normal Synced 3m steerer Scaling up podinfo.test
Warning Synced 3m steerer Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
Normal Synced 3m steerer Advance podinfo.test canary weight 5
Normal Synced 3m steerer Advance podinfo.test canary weight 10
Normal Synced 3m steerer Advance podinfo.test canary weight 15
Normal Synced 2m steerer Advance podinfo.test canary weight 20
Normal Synced 2m steerer Advance podinfo.test canary weight 25
Normal Synced 1m steerer Advance podinfo.test canary weight 30
Normal Synced 1m steerer Advance podinfo.test canary weight 35
Normal Synced 55s steerer Advance podinfo.test canary weight 40
Normal Synced 45s steerer Advance podinfo.test canary weight 45
Normal Synced 35s steerer Advance podinfo.test canary weight 50
Normal Synced 25s steerer Copying podinfo-canary.test template spec to podinfo.test
Warning Synced 15s steerer Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
Normal Synced 5s steerer Promotion completed! Scaling down podinfo-canary.test
Normal Synced 3m flagger New revision detected podinfo-canary.test old 17211012 new 17246876
Normal Synced 3m flagger Scaling up podinfo.test
Warning Synced 3m flagger Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
Normal Synced 3m flagger Advance podinfo.test canary weight 5
Normal Synced 3m flagger Advance podinfo.test canary weight 10
Normal Synced 3m flagger Advance podinfo.test canary weight 15
Normal Synced 2m flagger Advance podinfo.test canary weight 20
Normal Synced 2m flagger Advance podinfo.test canary weight 25
Normal Synced 1m flagger Advance podinfo.test canary weight 30
Normal Synced 1m flagger Advance podinfo.test canary weight 35
Normal Synced 55s flagger Advance podinfo.test canary weight 40
Normal Synced 45s flagger Advance podinfo.test canary weight 45
Normal Synced 35s flagger Advance podinfo.test canary weight 50
Normal Synced 25s flagger Copying podinfo-canary.test template spec to podinfo.test
Warning Synced 15s flagger Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
Normal Synced 5s flagger Promotion completed! Scaling down podinfo-canary.test
```
### Monitoring
Steerer comes with a Grafana dashboard made for canary analysis.
Flagger comes with a Grafana dashboard made for canary analysis.
Install Grafana with Helm:
```bash
helm upgrade -i steerer-grafana steerer/grafana \
helm upgrade -i flagger-grafana flagger/grafana \
--namespace=istio-system \
--set url=http://prometheus.istio-system:9090
```
The dashboard shows the RED and USE metrics for the primary and canary workloads:
![steerer-grafana](https://raw.githubusercontent.com/stefanprodan/steerer/master/docs/screens/grafana-canary-analysis.png)
![flagger-grafana](https://raw.githubusercontent.com/stefanprodan/flagger/master/docs/screens/grafana-canary-analysis.png)
The canary errors and latency spikes have been recorded as Kubernetes events and logged by Steerer in json format:
The canary errors and latency spikes have been recorded as Kubernetes events and logged by Flagger in json format:
```
kubectl -n istio-system logs deployment/steerer --tail=100 | jq .msg
kubectl -n istio-system logs deployment/flagger --tail=100 | jq .msg
Starting canary deployment for podinfo.test
Advance podinfo.test canary weight 5
@@ -403,11 +403,11 @@ Promotion completed! podinfo-canary.test revision 81289
### Contributing
Steerer is Apache 2.0 licensed and accepts contributions via GitHub pull requests.
Flagger is Apache 2.0 licensed and accepts contributions via GitHub pull requests.
When submitting bug reports please include as much details as possible:
* which Steerer version
* which Steerer CRD version
* which Flagger version
* which Flagger CRD version
* which Kubernetes/Istio version
* what configuration (canary, virtual service and workloads definitions)
* what happened (Steerer, Istio Pilot and Proxy logs)
* what happened (Flagger, Istio Pilot and Proxy logs)
+4 -4
View File
@@ -1,10 +1,10 @@
title: Steerer - Istio Progressive Delivery Kubernetes Operator
title: Flagger - Istio Progressive Delivery Kubernetes Operator
remote_theme: errordeveloper/simple-project-homepage
repository: stefanprodan/steerer
repository: stefanprodan/flagger
by_weaveworks: true
url: "https://stefanprodan.github.io/steerer"
url: "https://stefanprodan.github.io/flagger"
baseurl: "/"
twitter:
@@ -15,7 +15,7 @@ author:
# Set default og:image
defaults:
- scope: {path: ""}
values: {image: "logo/logo-steerer.png"}
values: {image: "logo/logo-flagger.png"}
# See: https://material.io/guidelines/style/color.html
# Use color-name-value, like pink-200 or deep-purple-100
Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.
Binary file not shown.
+30 -29
View File
@@ -1,60 +1,61 @@
apiVersion: v1
entries:
flagger:
- apiVersion: v1
appVersion: 0.0.1
created: 2018-10-07T13:00:10.107115+03:00
description: Flagger is a Kubernetes operator that automates the promotion of
canary deployments using Istio routing for traffic shifting and Prometheus metrics
for canary analysis.
digest: ddf0eda9975979bdfc26f10c7b3c15f4a31ebe0484be3285fbaec99b893871be
home: https://github.com/stefanprodan/flagger
name: flagger
urls:
- https://stefanprodan.github.io/flagger/flagger-0.0.1.tgz
version: 0.0.1
grafana:
- apiVersion: v1
appVersion: 5.2.0
created: 2018-10-04T14:48:57.585857+03:00
created: 2018-10-07T13:00:10.10763+03:00
description: A Helm chart for monitoring progressive deployments powered by Istio
and Steerer
digest: f8cac4d99069abdffd432b0c7e741aa1cf3c6f88435fd1cc54c00004514d740d
home: https://github.com/stefanprodan/steerer
and Flagger
digest: 1e19e9010d2939e19d0f8465287676b185f4772f5df5a75092a8fce0b4a50e5e
home: https://github.com/stefanprodan/flagger
name: grafana
urls:
- https://stefanprodan.github.io/steerer/grafana-5.2.4.tgz
- https://stefanprodan.github.io/flagger/grafana-5.2.4.tgz
version: 5.2.4
podinfo-steerer:
podinfo-flagger:
- apiVersion: v1
appVersion: 1.2.1
created: 2018-10-04T14:48:57.586743+03:00
description: Podinfo Helm chart for Steerer progressive delivery
digest: 0d9a5037f9765cb74882bcbc1c873527b49af742bdde5ea9ca8c674efcfcb178
created: 2018-10-07T13:00:10.108001+03:00
description: Podinfo Helm chart for Flagger progressive delivery
digest: 35ce41d10df123a785ba359491668a143c5918ce6d3d24f5b545ca2cb9134d91
engine: gotpl
home: https://github.com/stefanprodan/k8s-podinfo
maintainers:
- email: stefanprodan@users.noreply.github.com
name: stefanprodan
name: podinfo-steerer
name: podinfo-flagger
sources:
- https://github.com/stefanprodan/steerer
- https://github.com/stefanprodan/flagger
urls:
- https://stefanprodan.github.io/steerer/podinfo-steerer-2.0.0.tgz
- https://stefanprodan.github.io/flagger/podinfo-flagger-2.0.0.tgz
version: 2.0.0
- apiVersion: v1
appVersion: 1.2.1
created: 2018-10-04T14:48:57.586403+03:00
description: Podinfo Helm chart for Steerer progressive delivery
description: Podinfo Helm chart for Flagger progressive delivery
digest: f559f387aa45005be085af207b8b4c91776e489fcb6ca7e60f20913ecd21184e
engine: gotpl
home: https://github.com/stefanprodan/k8s-podinfo
maintainers:
- email: stefanprodan@users.noreply.github.com
name: stefanprodan
name: podinfo-steerer
name: podinfo-flagger
sources:
- https://github.com/stefanprodan/steerer
- https://github.com/stefanprodan/flagger
urls:
- https://stefanprodan.github.io/steerer/podinfo-steerer-1.2.1.tgz
- https://stefanprodan.github.io/flagger/podinfo-flagger-1.2.1.tgz
version: 1.2.1
steerer:
- apiVersion: v1
appVersion: 0.0.1-rc.23
created: 2018-10-04T14:48:57.587058+03:00
description: Steerer is a Kubernetes operator that automates the promotion of
canary deployments using Istio routing for traffic shifting and Prometheus metrics
for canary analysis.
digest: e403eb0e6aff36146d00f0dc56820fd5a464acf6509b5d715e937757bbb29aac
name: steerer
urls:
- https://stefanprodan.github.io/steerer/steerer-0.0.1.tgz
version: 0.0.1
generated: 2018-10-04T14:48:57.584927+03:00
generated: 2018-10-07T13:00:10.106238+03:00

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.