Vorbereitungen für den Service-Mesh-Workshop

Installation von Docker Desktop

Wir verwenden für die Demos Docker Desktop aus dem stable channel.

Hinweis:
Die Workshop-Demos würden auch mit Minikube funktionieren. Da der Bedienkomfort bei Docker Desktop besser ist, wurde der Workshop mit Docker Desktop entworfen. Wer sich mit Minikube auskennt, kann gerne Minikube für die Demos verwenden.

Installation mit Registrierung

Start der Installation von Docker Desktop mit Registrierung (ohne Registrierung siehe unten) über diesen Link:
https://www.docker.com/products/docker-desktop
Über den Button Download Desktop for Mac and Windows kommt man auf die Login-Seite. Für den Download der kostenfreien Community Edition ist eine Registrierung notwendig. Nach der Registrierung und Anmeldung kann man über die Buttons Download Docker Desktop for Mac oder Download Docker Desktop for Windows des Onboarding-Tutorials (https://hub.docker.com/?overlay=onboarding), oder mit den folgenden Links Docker Desktop herunterladen:
Mac:
https://download.docker.com/mac/stable/Docker.dmg
Windows:
https://download.docker.com/win/stable/Docker for Windows Installer.exe

Installation ohne Registrierung

Wer ohne Registrierung den Download starten will kann das über folgende Links:
Mac:
https://hub.docker.com/editions/community/docker-ce-desktop-mac
Get Docker: https://download.docker.com/mac/stable/Docker.dmg

Windows:
https://hub.docker.com/editions/community/docker-ce-desktop-windows
Get Docker: https://download.docker.com/win/stable/Docker Desktop Installer.exe

Überprüfung der Installation

Nach erfolgreicher Installation und Start von Docker Desktop kann über das Kontextmenü About Docker Desktop folgender Dialog angezeigt werden:

Die Überprüfung der Installation kann alternativ mit folgendem Shell-Command erfolgen:

➜ docker version
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 05:26:49 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.2
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.8
  Git commit:       6a30dfc
  Built:            Thu Aug 29 05:32:21 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Aktivierung von Kubernetes

Im Kontextmenü von Docker Desktop kommt man mit Preferences (oder Settings) in der Reiterkarte Kubernetes zu folgendem Dialog:

Über Enable Kubernetes und Apply wird Kubernetes aktiviert. Dies kann beim ersten mal, je nach Internet-Geschwindigkeit, ein paar Minuten dauern. Im Hintergrund werden die notwendigen Kubernetes Container heruntergeladen und gestartet.

Man kann diese Container sichtbar machen, indem man Show system containers (advanced) aktiviert:

➜ docker images
REPOSITORY                                      TAG                               IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                           v1.14.6                           ed8adf767eeb        6 weeks ago         82.1MB
k8s.gcr.io/kube-apiserver                       v1.14.6                           0e422c9884cf        6 weeks ago         209MB
k8s.gcr.io/kube-controller-manager              v1.14.6                           4bb274b1f2c3        6 weeks ago         157MB
k8s.gcr.io/kube-scheduler                       v1.14.6                           d27987bc993e        6 weeks ago         81.6MB
k8s.gcr.io/kube-proxy                           v1.14.3                           004666307c5b        4 months ago        82.1MB
k8s.gcr.io/kube-controller-manager              v1.14.3                           ac2ce44462bc        4 months ago        158MB
k8s.gcr.io/kube-apiserver                       v1.14.3                           9946f563237c        4 months ago        210MB
k8s.gcr.io/kube-scheduler                       v1.14.3                           953364a3ae7a        4 months ago        81.6MB
k8s.gcr.io/coredns                              1.3.1                             eb516548c180        8 months ago        40.3MB
k8s.gcr.io/etcd                                 3.3.10                            2c4adeb21b4f        10 months ago       258MB
k8s.gcr.io/pause                                3.1                               da86e6ba6ca1        21 months ago       742kB

Die erfolgreiche Installation und der Start von Kubernetes wird mit Kubenetes is running angezeigt:

Bei der Installation von Docker Desktop wird gleichzeitig auch noch kubectl installiert. Nach der Installation sollte man noch prüfen ob kubectl funktioniert. Dazu in einem Terminal folgenden Befehl eingeben:

➜ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:49Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:16Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

Installation des Kubernetes Dashboard

Leider wird bei der Installation von Docker Desktop das Kubernetes Dashboard nicht installiert. Dies muss mit folgendem Befehl, bei gestartetem Kubernetes, nachgeholt werden:

➜ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

Der Zugriff auf das Kubernetes Dashboard erfolgt mit folgendem Befehl:

kubectl proxy
Starting to serve on 127.0.0.1:8001

Nach Eingabe folgender URL
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
im Browser erscheint diese Seite:

Das notwendige Token zur Anmeldung im Dashboard kann mit folgendem Befehl erstellt werden:

➜ kubectl -n kube-system describe secret default
Name:         default-token-v754v
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 7217752d-e056-11e9-9152-025000000001

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXY3NTR2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3MjE3NzUyZC1lMDU2LTExZTktOTE1Mi0wMjUwMDAwMDAwMDEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.fhHzWcFb66lP9vKD1NRA4BiTwyHN0LSO0Y93mQkFAtSvyia7v7xnFxCV8huCrJP5RKErRE8jsyI-2su_DH1pcUgg3hdRjIGDP71-ShLbh9NArurO7Cn6HLzexR6yc7kkgeUZwqebuKRe5WUgnwgRhQQLY-41VeTgr_rqbB9m4DSV9tZ_9kc7fXFqTRZY8FC9vpY4PPJqXNHOyoNDpNaQCrHkyA4RwRlACa7EMnNhdJxw9vOU6h1mIcEl0_6xJhWUdj-CeSHI8KZX2YyUInf2OK919ZxGnZm4tSmWHPgeBylEf2_808whhm5RhoBqFJ7tT3n_FasIbClRuHyaKLm_ow

Alternativ kann der Token mit folgendem Command ermittelt werden:
Mac:

➜ kubectl -n kube-system describe secret default | grep -E '^token' | cut -f2 -d':' | tr -d " "
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXY3NTR2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3MjE3NzUyZC1lMDU2LTExZTktOTE1Mi0wMjUwMDAwMDAwMDEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.fhHzWcFb66lP9vKD1NRA4BiTwyHN0LSO0Y93mQkFAtSvyia7v7xnFxCV8huCrJP5RKErRE8jsyI-2su_DH1pcUgg3hdRjIGDP71-ShLbh9NArurO7Cn6HLzexR6yc7kkgeUZwqebuKRe5WUgnwgRhQQLY-41VeTgr_rqbB9m4DSV9tZ_9kc7fXFqTRZY8FC9vpY4PPJqXNHOyoNDpNaQCrHkyA4RwRlACa7EMnNhdJxw9vOU6h1mIcEl0_6xJhWUdj-CeSHI8KZX2YyUInf2OK919ZxGnZm4tSmWHPgeBylEf2_808whhm5RhoBqFJ7tT3n_FasIbClRuHyaKLm_ow

Windows:

➜ $TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
echo $TOKEN

Den Token per Copy/Paste in den Browser-Dialog eingeben

und mit SIGN IN die Anmeldung ausführen:

Installation von Istio

Zur Durchführung des Workshops verwenden wir Istio 1.3.1.

Download Istio

Beschreibung der Installation von Istio:
https://istio.io/docs/setup/kubernetes/#downloading-the-release

Der passende Download ist unter folgender URL zu finden:
https://github.com/istio/istio/releases
Hier bitte die passende Zip-Datei für das jeweilige Betriebsystem herunterladen und lokal entpacken.
Mac:
https://github.com/istio/istio/releases/download/1.3.1/istio-1.3.1-osx.tar.gz
Windows:
https://github.com/istio/istio/releases/download/1.3.1/istio-1.3.1-win.zip

Vorbereitung in Docker Desktop

Empfohlene Einstellungen für den Betrieb von Istio mit Docker Desktop:
https://istio.io/docs/setup/platform-setup/docker/

Bitte nicht von dem falschen Screenshot auf der Seite verwirren lassen. Es wird empfohlen 8 GB RAM zu verwenden, so wie auf diesem Screenshot:

Installation von Helm

Der einfachste Weg zur Installation von Istio erfolgt mit Helm als Kubernetes Package-Manager.

Beschreibung der Helm Client Installation:
https://github.com/helm/helm/blob/master/docs/install.md

Mac:

➜ brew install kubernetes-helm

oder wenn helm schon installiert war:

➜ brew upgrade kubernetes-helm
Upgrade: kubernetes-helm 2.12.2 -> 2.14.3

Windows:

➜ choco install kubernetes-helm

Die Installation von Helm kann mit folgendem Befehl überprüft werden:

➜ helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Error: could not find tiller

Der Hinweis, daß tiller nicht erreicht werden kann darf ignoriert werden (wir installieren Istio ohne Tiller, nur mit helm template).

Installation von Istio mit helm template

Beschreibung der Install mit Helm template:
https://istio.io/docs/setup/kubernetes/install/helm/#option-1-install-with-helm-via-helm-template

In einer Shell:

➜ cd istio-1.3.1/
➜ ls
LICENSE       README.md     bin           install       istio.VERSION samples       tools
➜ export PATH=$PWD/bin:$PATH

Erstellung des Kubernetes Namespaces für die Istio-Komponenten:

➜ kubectl create namespace istio-system
namespace/istio-system created

Anlegen der Istio Custom Resource Definitions (CRDs):

➜ helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -
configmap/istio-crd-10 created
configmap/istio-crd-11 created
configmap/istio-crd-12 created
serviceaccount/istio-init-service-account created
clusterrole.rbac.authorization.k8s.io/istio-init-istio-system created
clusterrolebinding.rbac.authorization.k8s.io/istio-init-admin-role-binding-istio-system created
job.batch/istio-init-crd-10-1.3.1 created
job.batch/istio-init-crd-11-1.3.1 created
job.batch/istio-init-crd-12-1.3.1 created

Prüfung ob Istio´s CRDs alle angelegt wurden (es müssen 23 Stück sein):

➜ kubectl get crds | grep 'istio.io' | wc -l
      23

Für den Workshop verwenden wir das Istio demo Profil, da dadurch alles installiert wird, was wir für die Übungen benötigen:
https://istio.io/docs/setup/kubernetes/additional-setup/config-profiles/

Vorsicht: Keine doppelten Blanks in der Kommandozeile von Helm Kommandos! Dies führt zu Fehlern bei der Installation.

➜ helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
    --values install/kubernetes/helm/istio/values-istio-demo.yaml | kubectl apply -f -

Die Installation der Istio-Komponenten kann auch wieder, je nach Internet-Geschwindigkeit, eine Weile dauern. Erst wenn alle Pods von ContainerCreating auf Running oder Completed gewechselt sind und die Anzahl der geforderten Pods gestartet wurden, ist die Installation von Istio abgeschlossen:

➜ kubectl get pods -n istio-system
NAME                                      READY   STATUS      RESTARTS   AGE
grafana-6fc987bd95-zfs79                  1/1     Running     0          5m9s
istio-citadel-55646d8965-zxlrj            1/1     Running     0          5m9s
istio-egressgateway-7bdb7bf7b5-7wcln      1/1     Running     0          5m10s
istio-galley-56bf6b7497-7rv9n             1/1     Running     0          5m10s
istio-grafana-post-install-1.3.1-n922p    0/1     Completed   0          5m11s
istio-ingressgateway-64dbd4b954-627xb     1/1     Running     0          5m10s
istio-init-crd-10-1.3.1-pfw6p             0/1     Completed   0          8m15s
istio-init-crd-11-1.3.1-66nfq             0/1     Completed   0          8m15s
istio-init-crd-12-1.3.1-mfct4             0/1     Completed   0          8m15s
istio-pilot-5d4c86d576-glw4x              2/2     Running     0          5m9s
istio-policy-759d4988df-d8gpl             2/2     Running     2          5m9s
istio-security-post-install-1.3.1-vdhxd   0/1     Completed   0          5m10s
istio-sidecar-injector-5d6ff6d758-t964t   1/1     Running     0          5m9s
istio-telemetry-7c88764b9c-6m8l9          2/2     Running     2          5m9s
istio-tracing-669fd4b9f8-6gdxr            1/1     Running     0          5m9s
kiali-94f8cbd99-pg9nm                     1/1     Running     0          5m9s
prometheus-776fdf7479-njszp               1/1     Running     0          5m9s

Installation Shell-Completion für Kubernetes und Istio

Wer sich das arbeiten mit der Shell erleichtern möchte kann noch die Shell-Completions für Kubernetes und Istio installieren:

Kubernetes:
https://kubernetes.io/de/docs/tasks/tools/install-kubectl/#aktivieren-der-automatischen-autovervollständigung-der-shell

Istio:
https://istio.io/docs/ops/troubleshooting/istioctl/#istioctl-auto-completion

Entwicklungsumgebung für die Services

Für die Programmierung der Java Services kann die gewohnte IDE verwendet werden. Die Java Services werden mit Maven und Gradle gebaut, d.h. Maven UND Gradle müssen in der IDE oder auf dem Rechner verfügbar sein.

Wer will kann sich noch, zur komfortablen Anzeige von Kubernetes Logfiles, stern installieren:
https://github.com/wercker/stern