From d0fba2d1114c02b3d5ceda1c04515362f71f2847 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Mon, 4 Nov 2019 00:13:19 +0200 Subject: [PATCH] Update Istio SMI tutorial --- artifacts/smi/istio-adapter.yaml | 131 -------------------- docs/gitbook/tutorials/flagger-smi-istio.md | 64 +++------- 2 files changed, 14 insertions(+), 181 deletions(-) delete mode 100644 artifacts/smi/istio-adapter.yaml diff --git a/artifacts/smi/istio-adapter.yaml b/artifacts/smi/istio-adapter.yaml deleted file mode 100644 index eaebdcb8..00000000 --- a/artifacts/smi/istio-adapter.yaml +++ /dev/null @@ -1,131 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: trafficsplits.split.smi-spec.io -spec: - additionalPrinterColumns: - - JSONPath: .spec.service - description: The service - name: Service - type: string - group: split.smi-spec.io - names: - kind: TrafficSplit - listKind: TrafficSplitList - plural: trafficsplits - singular: trafficsplit - scope: Namespaced - subresources: - status: {} - version: v1alpha1 - versions: - - name: v1alpha1 - served: true - storage: true ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: smi-adapter-istio - namespace: istio-system ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: smi-adapter-istio -rules: - - apiGroups: - - "" - resources: - - pods - - services - - endpoints - - persistentvolumeclaims - - events - - configmaps - - secrets - verbs: - - '*' - - apiGroups: - - apps - resources: - - deployments - - daemonsets - - replicasets - - statefulsets - verbs: - - '*' - - apiGroups: - - monitoring.coreos.com - resources: - - servicemonitors - verbs: - - get - - create - - apiGroups: - - apps - resourceNames: - - smi-adapter-istio - resources: - - deployments/finalizers - verbs: - - update - - apiGroups: - - split.smi-spec.io - resources: - - '*' - verbs: - - '*' - - apiGroups: - - networking.istio.io - resources: - - '*' - verbs: - - '*' ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: smi-adapter-istio -subjects: - - kind: ServiceAccount - name: smi-adapter-istio - namespace: istio-system -roleRef: - kind: ClusterRole - name: smi-adapter-istio - apiGroup: rbac.authorization.k8s.io ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: smi-adapter-istio - namespace: istio-system -spec: - replicas: 1 - selector: - matchLabels: - name: smi-adapter-istio - template: - metadata: - labels: - name: smi-adapter-istio - annotations: - sidecar.istio.io/inject: "false" - spec: - serviceAccountName: smi-adapter-istio - containers: - - name: smi-adapter-istio - image: docker.io/stefanprodan/smi-adapter-istio:0.0.2-beta.1 - command: - - smi-adapter-istio - imagePullPolicy: Always - env: - - name: WATCH_NAMESPACE - value: "" - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: OPERATOR_NAME - value: "smi-adapter-istio" diff --git a/docs/gitbook/tutorials/flagger-smi-istio.md b/docs/gitbook/tutorials/flagger-smi-istio.md index 3fae5dda..d3467db7 100644 --- a/docs/gitbook/tutorials/flagger-smi-istio.md +++ b/docs/gitbook/tutorials/flagger-smi-istio.md @@ -4,42 +4,16 @@ This guide shows you how to use the SMI Istio adapter and Flagger to automate ca ### Prerequisites -Flagger requires a Kubernetes cluster **v1.11** or newer with the following admission controllers enabled: +* Kubernetes > 1.13 +* Istio > 1.0 -* MutatingAdmissionWebhook -* ValidatingAdmissionWebhook +### Install Istio SMI adapter -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 Istio and the SMI adapter - -Add Istio Helm repository: +Install the SMI adapter: ```bash -helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.1.5/charts -``` - -Install Istio CRDs: - -```bash -helm upgrade -i istio-init istio.io/istio-init --wait --namespace istio-system - -kubectl -n istio-system wait --for=condition=complete job/istio-init-crd-11 -``` - -Install Istio: - -```bash -helm upgrade -i istio istio.io/istio --wait --namespace istio-system +kubectl apply -f https://raw.githubusercontent.com/deislabs/smi-adapter-istio/master/deploy/crds/crds.yaml +kubectl apply -f https://raw.githubusercontent.com/deislabs/smi-adapter-istio/master/deploy/operator-and-rbac.yaml ``` Create a generic Istio gateway to expose services outside the mesh on HTTP: @@ -74,14 +48,6 @@ Find the Gateway load balancer IP and add a DNS record for it: kubectl -n istio-system get svc/istio-ingressgateway -ojson | jq -r .status.loadBalancer.ingress[0].ip ``` -Install the SMI adapter: - -```bash -REPO=https://raw.githubusercontent.com/weaveworks/flagger/master - -kubectl apply -f ${REPO}/artifacts/smi/istio-adapter.yaml -``` - ### Install Flagger and Grafana Add Flagger Helm repository: @@ -95,7 +61,6 @@ Deploy Flagger in the _**istio-system**_ namespace: ```bash helm upgrade -i flagger flagger/flagger \ --namespace=istio-system \ ---set image.tag=master-12d84b2 \ --set meshProvider=smi:istio ``` @@ -119,24 +84,23 @@ kubectl -n istio-system port-forward svc/flagger-grafana 3000:80 Create a test namespace with Istio sidecar injection enabled: -```bash -export REPO=https://raw.githubusercontent.com/weaveworks/flagger/master +Create a test namespace and enable Linkerd proxy injection: -kubectl apply -f ${REPO}/artifacts/namespaces/test.yaml +```bash +kubectl create ns test +kubectl label namespace test istio-injection=enabled ``` Create a deployment and a horizontal pod autoscaler: ```bash -kubectl apply -f ${REPO}/artifacts/canaries/deployment.yaml -kubectl apply -f ${REPO}/artifacts/canaries/hpa.yaml +kubectl apply -k github.com/weaveworks//kustomize/podinfo ``` Deploy the load testing service to generate traffic during the canary analysis: ```bash -kubectl -n test apply -f ${REPO}/artifacts/loadtester/deployment.yaml -kubectl -n test apply -f ${REPO}/artifacts/loadtester/service.yaml +kubectl apply -k github.com/weaveworks//kustomize/tester ``` Create a canary custom resource (replace example.com with your own domain): @@ -236,7 +200,7 @@ Trigger a canary deployment by updating the container image: ```bash kubectl -n test set image deployment/podinfo \ -podinfod=quay.io/stefanprodan/podinfo:1.7.1 +podinfod=quay.io/stefanprodan/podinfo:3.1.1 ``` Flagger detects that the deployment revision changed and starts a new rollout: @@ -287,7 +251,7 @@ Create a tester pod and exec into it: ```bash kubectl -n test run tester \ ---image=quay.io/stefanprodan/podinfo:1.2.1 \ +--image=quay.io/stefanprodan/podinfo:3.1.2 \ -- ./podinfo --port=9898 kubectl -n test exec -it tester-xx-xx sh