mirror of https://github.com/fluxcd/flagger.git
143 lines
3.6 KiB
Markdown
143 lines
3.6 KiB
Markdown
# Flagger install on Kubernetes
|
|
|
|
This guide walks you through setting up Flagger on a Kubernetes cluster.
|
|
|
|
### Prerequisites
|
|
|
|
Flagger requires a Kubernetes cluster **v1.11** or newer with the following admission controllers enabled:
|
|
|
|
* MutatingAdmissionWebhook
|
|
* ValidatingAdmissionWebhook
|
|
|
|
Flagger depends on [Istio](https://istio.io/docs/setup/kubernetes/quick-start/) **v1.0.3** or newer
|
|
with traffic management, telemetry and Prometheus enabled.
|
|
|
|
A minimal Istio installation should contain the following services:
|
|
|
|
* istio-pilot
|
|
* istio-ingressgateway
|
|
* istio-sidecar-injector
|
|
* istio-telemetry
|
|
* prometheus
|
|
|
|
### Install Flagger
|
|
|
|
Add Flagger Helm repository:
|
|
|
|
```bash
|
|
helm repo add flagger https://flagger.app
|
|
```
|
|
|
|
Deploy Flagger in the _**istio-system**_ namespace:
|
|
|
|
```bash
|
|
helm upgrade -i flagger flagger/flagger \
|
|
--namespace=istio-system \
|
|
--set metricsServer=http://prometheus.istio-system:9090
|
|
```
|
|
|
|
You can install Flagger in any namespace as long as it can talk to the Istio Prometheus service on port 9090.
|
|
|
|
Enable **Slack** notifications:
|
|
|
|
```bash
|
|
helm upgrade -i flagger flagger/flagger \
|
|
--namespace=istio-system \
|
|
--set slack.url=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK \
|
|
--set slack.channel=general \
|
|
--set slack.user=flagger
|
|
```
|
|
|
|
If you don't have Tiller you can use the helm template command and apply the generated yaml with kubectl:
|
|
|
|
```bash
|
|
# generate
|
|
helm template flagger/flagger \
|
|
--name flagger \
|
|
--namespace=istio-system \
|
|
--set metricsServer=http://prometheus.istio-system:9090 \
|
|
> $HOME/flagger.yaml
|
|
|
|
# apply
|
|
kubectl apply -f $HOME/flagger.yaml
|
|
```
|
|
|
|
To uninstall the Flagger release with Helm run:
|
|
|
|
```text
|
|
helm delete --purge flagger
|
|
```
|
|
|
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
|
|
|
> **Note** that on uninstall the Canary CRD will not be removed.
|
|
Deleting the CRD will make Kubernetes remove all the objects owned by Flagger like Istio virtual services,
|
|
Kubernetes deployments and ClusterIP services.
|
|
|
|
If you want to remove all the objects created by Flagger you have delete the Canary CRD with kubectl:
|
|
|
|
```text
|
|
kubectl delete crd canaries.flagger.app
|
|
```
|
|
|
|
### Install Grafana
|
|
|
|
Flagger comes with a Grafana dashboard made for monitoring the canary analysis.
|
|
|
|
Deploy Grafana in the _**istio-system**_ namespace:
|
|
|
|
```bash
|
|
helm upgrade -i flagger-grafana flagger/grafana \
|
|
--namespace=istio-system \
|
|
--set url=http://prometheus.istio-system:9090 \
|
|
--set user=admin \
|
|
--set password=change-me
|
|
```
|
|
|
|
Or use helm template command and apply the generated yaml with kubectl:
|
|
|
|
```bash
|
|
# generate
|
|
helm template flagger/grafana \
|
|
--name flagger-grafana \
|
|
--namespace=istio-system \
|
|
--set url=http://prometheus.istio-system:9090 \
|
|
--set user=admin \
|
|
--set password=change-me \
|
|
> $HOME/flagger-grafana.yaml
|
|
|
|
# apply
|
|
kubectl apply -f $HOME/flagger-grafana.yaml
|
|
```
|
|
|
|
You can access Grafana using port forwarding:
|
|
|
|
```bash
|
|
kubectl -n istio-system port-forward svc/flagger-grafana 3000:3000
|
|
```
|
|
|
|
### Install Load Tester
|
|
|
|
Flagger comes with an optional load testing service that generates traffic
|
|
during canary analysis when configured as a webhook.
|
|
|
|
Deploy the load test runner with Helm:
|
|
|
|
```bash
|
|
helm upgrade -i flagger-loadtester flagger/loadtester \
|
|
--namespace=test \
|
|
--set cmd.timeout=1h
|
|
```
|
|
|
|
Deploy with kubectl:
|
|
|
|
```bash
|
|
export REPO=https://raw.githubusercontent.com/stefanprodan/flagger/master
|
|
|
|
kubectl -n test apply -f ${REPO}/artifacts/loadtester/deployment.yaml
|
|
kubectl -n test apply -f ${REPO}/artifacts/loadtester/service.yaml
|
|
```
|
|
|
|
> **Note** that the load tester should be deployed in a namespace with Istio sidecar injection enabled.
|
|
|