Commit 66039225 authored by Nane Kratzke's avatar Nane Kratzke
Browse files

Ue5: Terminierung

parent d2bb489f
...@@ -45,7 +45,10 @@ Ingress --- Prime Service ---|- Prime Pod -|--- Redis Service --- Redis Pod ...@@ -45,7 +45,10 @@ Ingress --- Prime Service ---|- Prime Pod -|--- Redis Service --- Redis Pod
- [Übung 02: Ergänzung eines In-Memory Caches](#übung-02-ergänzung-eines-in-memory-caches) - [Übung 02: Ergänzung eines In-Memory Caches](#übung-02-ergänzung-eines-in-memory-caches)
- [Übung 03: Erweiterung zu einem persistentem Cache](#übung-03-erweiterung-zu-einem-persistentem-cache) - [Übung 03: Erweiterung zu einem persistentem Cache](#übung-03-erweiterung-zu-einem-persistentem-cache)
- [Übung 04: Skalierung und Chaos Engineering](#übung-04-skalierung-und-chaos-engineering) - [Übung 04: Skalierung und Chaos Engineering](#übung-04-skalierung-und-chaos-engineering)
- [Übung 05: Deployment des Prime Service in GKE](#übung-05-deployment-des-prime-service-in-gke) - [Übung 05: Terminieren Sie das Deployment](#übung-05-terminieren-sie-das-deployment)
- [Übung 06: Deployment des Prime Service in GKE](#übung-06-deployment-des-prime-service-in-gke)
- [Links](#links)
- [Was sollten Sie mitnehmen?](#was-sollten-sie-mitnehmen)
## Vorbereitung ## Vorbereitung
...@@ -96,17 +99,80 @@ Arbeiten Sie bitte mit der WebIDE von GitLab. Committen Sie dabei bitte immer in ...@@ -96,17 +99,80 @@ Arbeiten Sie bitte mit der WebIDE von GitLab. Committen Sie dabei bitte immer in
3. Geben Sie in der Konsole von Lens nach erfolgreicher Pipeline folgendes ein: 3. Geben Sie in der Konsole von Lens nach erfolgreicher Pipeline folgendes ein:
```bash ```bash
kubectl get all kubectl get all
NAME READY STATUS RESTARTS AGE
pod/prime-deployment-b667868f6-89qk7 1/1 Running 0 33s
pod/prime-deployment-b667868f6-b2krp 1/1 Running 0 33s
pod/prime-deployment-b667868f6-b9xkl 1/1 Running 0 33s
pod/prime-deployment-b667868f6-fcj5g 1/1 Running 0 33s
pod/prime-deployment-b667868f6-mw529 1/1 Running 0 33s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/prime-service ClusterIP 10.152.183.18 <none> 80/TCP 33s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/prime-deployment 5/5 5 5 33s
NAME DESIRED CURRENT READY AGE
replicaset.apps/prime-deployment-b667868f6 5 5 5 33s
``` ```
- Finden Sie nun den erzeugten Ingress heraus unter dem Ihr Dienst erreichbar ist:
```bash
kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
prime-ingress <none> prime-XYZ.loki.th-luebeck.dev 127.0.0.1 80, 443 44s
```
- Die Nummer XYZ im Host wird automatisch durch die Deployment Pipeline vergeben und entspricht Ihrer User-ID, die Sie in GitLab haben. Navigieren Sie nun in einem Browser z.B. auf [https://prime-XYZ.loki.th-luebeck.dev/prime/12345](https://prime-XYZ.loki.th-luebeck.dev/prime/12345)
```text
12345 is not a prime number. It can be divided by 3 (answer from prime-deployment-b667868f6-b2krp; processed)
```
Laden Sie die Seite mehrmals erneut. Sie werden feststellen, dass die Antwort jedesmal von einem anderen Pod beantwortet wird. Die Requests werden Round-Robin über alle Prime-Pods verteilt.
Die Angabe `processed` sagt aus, dass der Pod die Antwort nicht im Cache gefunden hat, sondern selber errechnen musste.
- Öffnen Sie nun Lens ![lens](lens-screenshot.png)
Nehmen Sie Ihr Deployment nun gerne mittels dieser Oberfläche genauer unter die Lupe!
- Pods anzeigen: `Workload -> Pods`
- Deployments anzeigen: `Workload -> Deployments`
- Services anzeigen: `Network -> Services`
- Ingress anzeigen: `Network -> Ingress`
- Volumes anzeigen: `Storage -> Persistent Volumes`
- Events anzeigen: `Events` (Hilfreich bei Fehlersuchen)
Gratulation! Sie haben Ihren ersten lastausgleichenden Dienst in Kubernetes deployt.
## Übung 02: Ergänzung eines In-Memory Caches ## Übung 02: Ergänzung eines In-Memory Caches
## Übung 03: Erweiterung zu einem persistentem Cache ## Übung 03: Erweiterung zu einem persistentem Cache
## Übung 04: Skalierung und Chaos Engineering ## Übung 04: Skalierung und Chaos Engineering
- Klicken Sie auf `Workloads -> Deployments` und selektieren Sie `prime-deployment -> Edit` und ändern Sie das Feld `spec.replicas` erst von 5 auf 8 und dann von 8 auf 3 (jeweils mit `Save` speichern).
- Sie sehen dann, wie die Pods des Deployments automatisch gestartet bzw. terminiert werden. Auf diese Weise lassen sich also Dienste einfach horizontal skalieren.
- Skalieren Sie Ihre Prime-Pods bis auf 30 Replicas! (Es sollten 30 Pods erzeugt werden).
- Skalieren Sie Ihre Prime-Deployment bis auf 40 Replicas! (es sollten nur max. 32 Pods erzeugt worden sein, da dann Ihr CPU Quota von 8 CPUs pro Namespace aufgebraucht ist!)
- Skalieren Sie Ihre Prime-Deployment bitte wieder auf 5 Replicas (das reicht vollkommen aus!)
## Übung 05: Terminieren Sie das Deployment
1. Löschen Sie bitte Ihr Deployment in dem Sie in Ihrer `.gitlab-ci.yml` die Variable `TERMINATE` auf `"yes"` setzen.
2. Committen Sie bitte in den Master-Branch.
Prüfen Sie in Lens mittels
```bash
kubectl get all
kubectl get ing
```
das alle Ressourcen sauber gelöscht wurden.
## Übung 05: Deployment des Prime Service in GKE ## Übung 06: Deployment des Prime Service in GKE
In diesem Schritt passen wir das in den Übungen 1 bis 3 entwickelte Deployment so an, dass es in [GKE](https://cloud.google.com/kubernetes-engine) (Google Kubernetes Engine, also einem Public Cloud Service Provider) automatisiert ausgebracht werden kann. Dies soll Ihnen zeigen, dass Kubernetes grundsätzlich eine recht standardisierte Plattform ist, die sowohl Self-Hosted in einer Private Cloud als Plain-Vanilla Kubernetes oder als Managed-Service in einer Public Cloud nutzbar ist. Tatsächlich bieten mittlerweile fast alle großen Public Cloud Service Provider Kubernetes-basierte Dienste an. Kubernetes hat es so eine Art de-facto Standard etabliert und die ehemals sehr heterogene PaaS Landschaft bis zu einem gewissen Grad vereinheitlicht. In diesem Schritt passen wir das in den Übungen 1 bis 3 entwickelte Deployment so an, dass es in [GKE](https://cloud.google.com/kubernetes-engine) (Google Kubernetes Engine, also einem Public Cloud Service Provider) automatisiert ausgebracht werden kann. Dies soll Ihnen zeigen, dass Kubernetes grundsätzlich eine recht standardisierte Plattform ist, die sowohl Self-Hosted in einer Private Cloud als Plain-Vanilla Kubernetes oder als Managed-Service in einer Public Cloud nutzbar ist. Tatsächlich bieten mittlerweile fast alle großen Public Cloud Service Provider Kubernetes-basierte Dienste an. Kubernetes hat es so eine Art de-facto Standard etabliert und die ehemals sehr heterogene PaaS Landschaft bis zu einem gewissen Grad vereinheitlicht.
## Links
- [Lens](https://k8slens.io)
## Was sollten Sie mitnehmen?
-
\ No newline at end of file
...@@ -22,7 +22,7 @@ spec: ...@@ -22,7 +22,7 @@ spec:
imagePullPolicy: Always imagePullPolicy: Always
resources: resources:
limits: limits:
cpu: "1" cpu: "250m"
ports: ports:
- containerPort: 80 - containerPort: 80
env: env:
......
...@@ -19,7 +19,7 @@ spec: ...@@ -19,7 +19,7 @@ spec:
image: k8s.gcr.io/redis image: k8s.gcr.io/redis
resources: resources:
limits: limits:
cpu: 100m cpu: 250m
memory: 100Mi memory: 100Mi
ports: ports:
- containerPort: 6379 - containerPort: 6379
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment