# Flagger Install with SuperGloo This guide walks you through setting up Flagger on a Kubernetes cluster using [SuperGloo](https://github.com/solo-io/supergloo). SuperGloo by [Solo.io](https://solo.io) is an opinionated abstraction layer that simplifies the installation, management, and operation of your service mesh. It supports running multiple ingresses with multiple meshes \(Istio, App Mesh, Consul Connect and Linkerd 2\) in the same cluster. ## Prerequisites Flagger requires a Kubernetes cluster **v1.11** or newer with the following admission controllers enabled: * MutatingAdmissionWebhook * ValidatingAdmissionWebhook ## Install Istio with SuperGloo ### Install SuperGloo command line interface helper SuperGloo includes a command line helper \(CLI\) that makes operation of SuperGloo easier. The CLI is not required for SuperGloo to function correctly. If you use [Homebrew](https://brew.sh) package manager run the following commands to install the SuperGloo CLI. ```bash brew tap solo-io/tap brew solo-io/tap/supergloo ``` Or you can download SuperGloo CLI and add it to your path: ```bash curl -sL https://run.solo.io/supergloo/install | sh export PATH=$HOME/.supergloo/bin:$PATH ``` ### Install SuperGloo controller Deploy the SuperGloo controller in the `supergloo-system` namespace: ```bash supergloo init ``` This is equivalent to installing SuperGloo using its Helm chart ```bash helm repo add supergloo http://storage.googleapis.com/supergloo-helm helm upgrade --install supergloo supergloo/supergloo --namespace supergloo-system ``` ### Install Istio using SuperGloo Create the `istio-system` namespace and install Istio with traffic management, telemetry and Prometheus enabled: ```bash ISTIO_VER="1.0.6" kubectl create namespace istio-system supergloo install istio --name istio \ --namespace=supergloo-system \ --auto-inject=true \ --installation-namespace=istio-system \ --mtls=false \ --prometheus=true \ --version=${ISTIO_VER} ``` This creates a Kubernetes Custom Resource \(CRD\) like the following. ```yaml apiVersion: supergloo.solo.io/v1 kind: Install metadata: name: istio namespace: supergloo-system spec: installationNamespace: istio-system mesh: installedMesh: name: istio namespace: supergloo-system istioMesh: enableAutoInject: true enableMtls: false installGrafana: false installJaeger: false installPrometheus: true istioVersion: 1.0.6 ``` ### Allow Flagger to manipulate SuperGloo Create a cluster role binding so that Flagger can manipulate SuperGloo custom resources: ```bash kubectl create clusterrolebinding flagger-supergloo \ --clusterrole=mesh-discovery \ --serviceaccount=istio-system:flagger ``` Wait for the Istio control plane to become available: ```bash kubectl --namespace istio-system rollout status deployment/istio-sidecar-injector kubectl --namespace istio-system rollout status deployment/prometheus ``` ## Install Flagger Add Flagger Helm repository: ```bash helm repo add flagger https://flagger.app ``` Install Flagger's Canary CRD: ```yaml kubectl apply -f https://raw.githubusercontent.com/weaveworks/flagger/master/artifacts/flagger/crd.yaml ``` Deploy Flagger in the _**istio-system**_ namespace and set the service mesh provider to SuperGloo: ```bash helm upgrade -i flagger flagger/flagger \ --namespace=istio-system \ --set crd.create=false \ --set metricsServer=http://prometheus.istio-system:9090 \ --set meshProvider=supergloo:istio.supergloo-system ``` When using SuperGloo the mesh provider format is `supergloo:.`. Optionally you can enable **Slack** notifications: ```bash helm upgrade -i flagger flagger/flagger \ --reuse-values \ --namespace=istio-system \ --set slack.url=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK \ --set slack.channel=general \ --set slack.user=flagger ``` ## 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 ``` You can access Grafana using port forwarding: ```bash kubectl -n istio-system port-forward svc/flagger-grafana 3000:80 ``` ## 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 helm fetch --untar --untardir . flagger/loadtester && helm template loadtester \ --name flagger-loadtester \ --namespace=test > $HOME/flagger-loadtester.yaml # apply kubectl apply -f $HOME/flagger-loadtester.yaml ``` > **Note** that the load tester should be deployed in a namespace with Istio sidecar injection enabled.