Ce guide vous explique comment configurer Flagger sur un cluster GKE Kubernetes avec SuperGloo. SuperGloo de Solo.io est une couche d'abstraction avisée qui simplifie l'installation, la gestion et le fonctionnement de votre réseau de services. Il prend en charge l'exécution de plusieurs entrées avec plusieurs maillages (Istio, App Mesh, Consul Connect et Linkerd 2) dans le même cluster.

Pour installer Flagger sur Gke, quelque pré-requis :

  • Cluster Kubernetes 1.11
  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook

On commence par se loguer sur son instance depuis le terminal grâce à une commande semblable à celle-ci et selon votre projet :

sudo gcloud init
MBP-de-admin:~ admin$ sudo gcloud container clusters get-credentials standard-cluster-1 --zone us-central1-a --project grand-water-234018
Password:
Fetching cluster endpoint and auth data.
kubeconfig entry generated for standard-cluster-1.

Après quoi on installe SuperGloo. Cela inclut un assistant de ligne de commande (CLI) qui facilite son utilisation. La CLI n’est pas nécessaire au bon fonctionnement de SuperGloo. Si vous utilisez le gestionnaire de paquets Homebrew, exécutez les commandes suivantes pour installer la CLI SuperGloo.

brew tap solo-io/tap
brew solo-io/tap/supergloo

Et avec curl :

MBP-de-admin:~ admin$ curl -sL https://run.solo.io/supergloo/install | sh
Attempting to download supergloo version v0.3.24
v0.3.23
v0.3.22
v0.3.21
v0.3.20
v0.3.19
v0.3.18
v0.3.17
v0.3.16
v0.3.15
v0.3.14
v0.3.13
v0.3.12
v0.3.11
v0.3.10
v0.3.9
v0.3.8
v0.3.7
v0.3.6
v0.3.5
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.1
v0.2.0
0.1.1
v0.1.0
Downloading from https://github.com/solo-io/supergloo/releases/download/v0.3.24/supergloo-cli-darwin-amd64...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    995      0 --:--:-- --:--:-- --:--:--   996
100 73.7M  100 73.7M    0     0   667k      0  0:01:53  0:01:53 --:--:--  326k

Download complete!, validating checksum...
Checksum valid.

SuperGloo was successfully installed 🎉

Add the supergloo CLI to your path with:

  export PATH=$PATH:$HOME/.supergloo/bin

Now run:

  supergloo init        # install supergloo into the 'supergloo-system' namespace

Looking for more? Visit https://supergloo.solo.io/installation/

MBP-de-admin:~ admin$ export PATH=$PATH:$HOME/.supergloo/bin
MBP-de-admin:~ admin$ sudo supergloo init 
Password:
installing supergloo version 0.3.24
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.24.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!

Nous allons avoir besoin de Helm désormais, il nous faut donc installer la barre :

brew install kubernetes-helm

Sur GKE, ne pas oublier ces commandes pour la création des services account etc...

kubectl create serviceaccount -n kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

On lance le Helm init :

helm init --service-account tiller

On l'upgrade dans la foulée :

helm init --upgrade --service-account tiller

Vérifions ensuite si tout est correctement installé :

MBP-de-admin:~ admin$ kubectl --namespace kube-system get pods | grep tiller
tiller-deploy-7b659b7fbd-5f8jl                                 1/1     Running   0          2m34s
MBP-de-admin:~ admin$ kubectl get deployments -n kube-system
NAME                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
event-exporter-v0.2.4    1         1         1            1           40h
fluentd-gcp-scaler       1         1         1            1           40h
heapster-v1.6.0-beta.1   1         1         1            1           40h
kube-dns                 2         2         2            2           40h
kube-dns-autoscaler      1         1         1            1           40h
l7-default-backend       1         1         1            1           40h
metrics-server-v0.3.1    1         1         1            1           40h
tiller-deploy            1         1         1            1           8m9s

Installer Istio avec SuperGloo

Créez le namespace istio-system et installez Istio avec la gestion du trafic, la télémétrie et Prometheus activés:

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}

Cela crée une ressource personnalisée Kubernetes (CRD) semblable à celle-ci.

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

Autoriser Flagger à manipuler SuperGloo

Créez une liaison de rôle de cluster afin que Flagger puisse manipuler les ressources personnalisées SuperGloo:

kubectl create clusterrolebinding flagger-supergloo \
--clusterrole=mesh-discovery \
--serviceaccount=istio-system:flagger

Attendez que le Istio control plane soit disponible:

kubectl --namespace istio-system rollout status deployment/istio-sidecar-injector
kubectl --namespace istio-system rollout status deployment/prometheus

Installer Flagger

Ajouter un repository Helm pour Flagger :

helm repo add flagger https://flagger.app

Déployez Flagger dans le namespace istio-system et définissez le fournisseur de service Mesh sur SuperGloo:

helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set metricsServer=http://prometheus.istio-system:9090 \
--set meshProvider=supergloo:istio.supergloo-system

Installer Grafana

Flagger est livré avec un tableau de bord Grafana conçu pour surveiller l’analyse des canaris. Déployez Grafana dans le namespace istio-system:

helm upgrade -i flagger-grafana flagger/grafana \
--namespace=istio-system \
--set url=http://prometheus.istio-system:9090

Vous pouvez accéder à Grafana en utilisant le port forwarding :

kubectl -n istio-system port-forward svc/flagger-grafana 3000:80

Ce qui donne sur localhost:3000 :

Installer le testeur de charge

Flagger est fourni avec un service facultatif de load tester qui génère du trafic lors de l’analyse des canaris lorsqu’il est configuré en tant que Webhook. Déployez le testeur de charge avec Helm:

helm upgrade -i flagger-loadtester flagger/loadtester \
--namespace=test \
--set cmd.timeout=1h

Deployer avec kubectl:

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