Kubernetes ermöglicht eine Automatisierung der Bereitstellung, Skalierung und Verwaltung von verteilten Docker-Container. Der Einstieg, die Umsetzung und Wartung hingegen ist eine extreme Herausforderung und kostet am Ende nicht nur viel Geld, sondern auch Ihre Nerven. Microsoft Azure bietet mit den Azure Kubernetes Services (Kurz AKS) die Erlösung, der soeben genannten Schmerzen. In dieser Session zeigt Ihnen der Docker- und Azure-Experte Gregor Biswanger einen Überblick von Kubernetes und wie einfach Azure für uns eine Kuberenetes-Landschaft herbeizaubern kann.
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
1. Verteilte Anwendungen bei Azure
Mit Docker und Kubernetes
Gregor Biswanger | Freier Dozent, Berater, Trainer und Autor
about.me/gregor.biswanger
2.
3. Über mich
▪ Freier Berater, Trainer und Autor
▪ Schwerpunkte: Softwarearchitektur, Web und
Cross-Plattform Entwicklung mit JavaScript
▪ Technologieberater für die Intel Developer Zone
▪ Internationaler Sprecher auf Konferenzen und
User Groups
▪ Freier Autor für heise.de, dotnetpro,
WindowsDeveloper und viele weitere
Fachmagazine
▪ Video-Trainer bei video2brain und Microsoft
Gregor Biswanger
Microsoft MVP, Intel Black Belt &
Intel Software Innovator
cross-platform-blog.de
about.me/gregor.biswanger
4. Unser Reiseplan
▪ Allgemeine Einführung
▪ Überblick von Docker
▪ Einführung in Kubernetes
▪ Nodes
▪ Master
▪ Nodes im Detail
▪ Pods im Detail
▪ Deployment
▪ Labels und Annotations
▪ Services
▪ Kubernetes Installation
▪ Die Azure Kubernetes Service (AKS)
▪ Beispielprojekt anlegen
▪ Lokales Deployment
▪ AKS Deployment
▪ AKS und VS 2017/2019
▪ Monitoring
15. Er dient der Zuordnung von Diensten,
der Überwachung der Integrität des Servers und der
darauf ausgeführten Dienste, sowie
dem Wiederherstellen der Serverintegrität nach einem
Ausfall.
20. Beide Welten im Vergleich
Azure Service Fabric (ASF)
▪ Native API für Azure-Lösungen
▪ Integrierte Plattform mit
Unterstützung von Microsoft
einschließlich on-premises
▪ Hauptsächlich für Windows-
Lösungen
▪ Positioniert als Microservice-
Plattform zum Ausführen von
Dateien und Containern
Azure Kubernetes Service (AKS)
▪ Gehostete API on Top bei Azure
▪ Als Container Orchestrator positioniert
▪ Hauptsächlich für Linux-Lösungen
▪ Große Community-Unterstützung
▪ Von allen gängigen Cloud-Anbietern
unterstützt
35. Images und Container
Docker Image
Beispiel: Ubuntu mit Node.js
und Anwendungscode
Docker Container
Erzeugt von einem Image.
Laufende Anwendung in einem
geschlossenen System.
48. Die Orchestrierung mittels Kubernetes wird von führenden
Cloud-Plattformen wie Microsofts Azure, IBMs Bluemix,
Red Hats OpenShift, Amazons AWS und Oracles OCI
unterstützt.
49. K8s Cluster
Node Node
Node Node
Master
Master
Master
Pod Pod
Pod Pod
Node Node
Node Node
Pod Pod
Pod Pod
73. Der Controller Manager ist jener Prozess, welcher
alle Kontrollmechanismen enthält, in dem z. B. ein
DaemonSet oder ein Replication Controller laufen.
74. Er verarbeitet die in den jeweiligen Replikationsaufgaben
definierten Replikationsprozesse.
140. In einer typischen Cloud-Umgebung sorgt der
Cloud-Provider dafür, dass diese Information bei
Kubernetes abgeholt und der richtige Endpunkt
eingetragen wird.
141. apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 8000 # the port that this service should serve on
targetPort: 80
protocol: TCP
selector:
app: nginx
type: LoadBalancer
Service-Definition
143. PaaS
▪ Konfiguration wird
übernommen
▪ Betrieb wird bis Oberkante
Cluster übernommen
▪ Schnelle Bereitstellung
▪ Keine Installations- /
Konfigurationsaufwand
▪ Höhere laufende Kosten
On-Premises
▪ Eigene Verantwortung für die
Installation
▪ Eigene Verantwortung für die
Administration
▪ Bereitstellung auf eigener
Infrastruktur
▪ Eigener Installations- /
Konfigurationsaufwand
▪ Niedrigere laufende Kosten
144. Play with Kubernetes
▪ Kubernetes ohne Installation
▪ Ohne Kosten
▪ Nur ein Testsetup
▪ Läuft für vier Stunden
https://labs.play-with-k8s.com
147. kubectl
▪ Management-Tool für Kubernetes
▪ Deployment und Upgrade von Workloads
▪ Anlegen von Kubernetes-Objekten
▪ Zugriff auf Informationen und Status
▪ Konfiguration und Installation von Komponenten
▪ Löschen von Komponenten
▪ Skalierung
▪ Wrapper um die REST-API
▪ Erlaubt Scripting und Versionierung
150. AKS ermöglicht eine schnelle und einfache
Bereitstellung und Verwaltung von
Containeranwendungen.
151. K8s Cluster
Node Node
Node Node
Master
Master
Master
Pod Pod
Pod Pod
Node Node
Node Node
Pod Pod
Pod Pod
AKS bietet eine kostenlose
Clusterverwaltung
152. K8s Cluster
Node Node
Node Node
Master
Master
Master
Pod Pod
Pod Pod
Node Node
Node Node
Pod Pod
Pod Pod
Zahlen Sie nur für
Rechenressourcen
153.
154. Die Azure CLI wird benötigt:
http://bit.ly/AzureCLI
155. Es wird ebenfalls eine Azure Subscription benötigt,
die mit der Azure CLI verknüpft ist.
156. C:UsersGregor>
Welcome to Azure CLI!
---------------------
Use `az -h` to see available commands or go to https://aka.ms/cli.
/
/ _____ _ _ ___ _
/ / |_ / | | | '__/ _
/ ____ / /| |_| | | | __/
/_/ _/___|__,_|_| ___|
Welcome to the cool new Azure CLI!
Use `az --version` to display the current version.
Here are the base commands:
...
C:UsersGregor>
az
Die Azure CLI mit dem AZ
Kommando
170. C:UsersGregor>
Name Location ResourceGroup KubernetesVersion ProvisioningState
------ ---------- ------------------ ------------------- -------------------
my-aks westeurope KubernetesTraining 1.12.7 Succeeded
az aks list --output table
Alle AKS Instanzen auflisten
Fqdn
--------------------------------------------
my-aks-dns-932203eb.hcp.westeurope.azmk8s.io
C:UsersGregor>
171. C:UsersGregor>
Name Location ResourceGroup KubernetesVersion ProvisioningState
------ ---------- ------------------ ------------------- -------------------
my-aks westeurope KubernetesTraining 1.12.7 Succeeded
az aks list --output table
Lokalen Kontext wechseln für
die kubectl
C:UsersGregor> az aks get-credentials --name my-aks -g KubernetesTraining
Merged "my-aks" as current context in C:UsersGregor.kubeconfig
C:UsersGregor>
172.
173. C:UsersGregor>
NAME STATUS ROLES AGE VERSION
aks-agentpool-12791275-0 Ready agent 40m v1.12.7
aks-agentpool-12791275-1 Ready agent 40m v1.12.7
aks-agentpool-12791275-2 Ready agent 40m v1.12.7
kubectl get nodes
Alle Nodes auflisten
C:UsersGregor>
174. C:UsersGregor>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 1h
kubectl get service
Alle Services auflisten
C:UsersGregor>
177. Die .NET Core-CLI ist ein neues plattformübergreifendes Tool
zur Entwicklung von .NET-Anwendungen mit der
Eingabeaufforderung.
178. C:dev>
Die Vorlage "ASP.NET Core Web App" wurde erfolgreich installiert.
Diese Vorlage enthält Technologien, die nicht von Microsoft stammen.
Weitere Informationen finden Sie unter https://aka.ms/template-3pn.
Aktionen nach der Erstellung werden verarbeitet...
Ausführen von 'dotnet restore' für HelloK8sHelloK8s.csproj...
Pakete für "C:devHelloK8sHelloK8s.csproj" werden wiederhergestellt...
Die MSBuild-Datei "C:devHelloK8sobjHelloK8s.csproj.nuget.g.props" wird generiert
Die MSBuild-Datei "C:devHelloK8sobjHelloK8s.csproj.nuget.g.targets" wird generie
Wiederherstellung in "2,04 sec" für "C:devHelloK8sHelloK8s.csproj" abgeschlossen.
Wiederherstellung erfolgreich.
C:dev>
dotnet new webapp --name HelloK8s
Der Kommando new erzeugt
ein neues Projekt
186. Dockerfile Beispiel
1. Starte Container vom Typ ubuntu
2. Führe Befehl apt-get install node aus
3. Speichere neue Version des Images ab
4. Führe Befehl apt-get install mongodb aus
5. Speichere neue Version des Images ab
199. C:devHelloK8s>
Sending build context to Docker daemon 5.521MB
Step 1/13 : FROM microsoft/aspnetcore-build AS publish
---> 06a6525397c2
Step 2/13 : WORKDIR /publish
---> Using cache
---> 35f41382bb00
...
...
...
...
...
...
Successfully built 0fa76744a1fb
Successfully tagged hellok8s:local
C:devHelloK8s>
docker build -t hellok8s:local .
Tag für
Imagename
Von welchen
Pfad
Docker Build erzeugt
ein Docker Image
200. C:devHelloK8s>
REPOSITORY TAG IMAGE ID CREATED SIZE
hellok8s local 0fa76744a1fb About a minute ago 264MB
C:devHelloK8s>
docker images
Image wurde erzeugt
205. Unterschiedliche Methoden zum Deployen
▪ Interaktiv über Kubectl
▪ Interaktiv über das Kubernetes Dashboard
▪ Über eine YAML/JSON-Datei
▪ Helper für das Erzeugen der YAML-Datei:
https://static.brandonpotter.com/kubernetes/DeploymentBuilder.html
▪ Vorhandene docker-compose-Datei zu YAML-Datei mit Kompose:
http://kompose.io
▪ Visual Studio 2019 hat ein integriertes Tooling via Helm (Package
Manager für Kubernetes)
206. Anwendung auf Kubernetes ausführen
Schritt 1
Anwendung in
Docker Images
verpacken
Schritt 2
Docker Images
auf einem
Image Registry
veröffentlichen
Schritt 3
K8s
Konfigurations-
Datei
ausführen
Schritt 4
K8s zieht sich
die Docker
Images
Schritt 5
K8s Scheduler
erzeugen
Container auf
verfügbaren
Nodes
207.
208. C:dev>
deployment.apps "hellok8s-deployment" created
kubectl run hellok8s-deployment --image=hellok8s:local --port=80 --replicas=3
Lokal starten über Kubectl
C:dev> kubectl get deployments
C:dev>
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hellok8s-deployment 3 3 3 3 4s
C:dev> kubectl get pods
NAME READY STATUS RESTARTS AGE
hellok8s-deployment-86dfccfb99-d6vd9 1/1 Running 0 8s
hellok8s-deployment-86dfccfb99-lzqrj 1/1 Running 0 8s
hellok8s-deployment-86dfccfb99-vckch 1/1 Running 0 8s
209. C:dev>
service "hellok8s-deployment" exposed
kubectl expose deployment hellok8s-deployment --type=NodePort
Service für den öffentlichen
Zugriff anlegen
C:dev> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellok8s-deployment NodePort 10.105.178.103 <none> 80:30514/TCP 7s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
C:dev>
213. C:devHelloK8s>
deployment.apps "hellok8s-deployment" created
service "hellok8s-deployment-service" created
kubectl create -f .hellok8s-deploy.yml
Lokal starten über
Konfigurations-Datei
C:devHelloK8s> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellok8s-deployment-service NodePort 10.100.80.72 <none> 80:31872/TCP 40s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
C:devHelloK8s>
236. C:devHelloK8s>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellok8s-deployment-service LoadBalancer 10.0.169.218 13.80.2.197 80:31211/TCP 17h
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 1d
kubectl get services --watch
IP-Adresse vom
Service ermitteln
239. Visual Studio 2019 + AKS
▪ VS 2019 unterstützt AKS
▪ Projekt-Template
▪ Team-Support mit „Azure Dev Spaces“
▪ Debug direkt von Kubernetes aus der Cloud
▪ Deployment
▪ Docker Support
▪ Helm Support
▪ „Draft Support“
▪ Für VS 2017 gibt es die Erweiterung:
„Visual Studio Tools for Kubernetes”
▪ https://marketplace.visualstudio.com/items?itemName=ms-
azuretools.vs-tools-for-kubernetes
241. C:UsersGregor>
Name Location ResourceGroup KubernetesVersion ProvisioningState
------ ---------- ------------------ ------------------- -------------------
my-aks westeurope KubernetesTraining 1.12.7 Succeeded
az aks list --output table
C:UsersGregor> kubectl create clusterrolebinding kubernetes-dashboard
clusterrolebinding.rbac.authorization.k8s.io "kubernetes-dashboard" created
C:UsersGregor>
--clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
az aks browse --name my-aks --resource-group KubernetesTraining
Merged "my-aks" as current context in C:UsersGregorAppDataLocalTemptmpugirr5az
Proxy running on http://127.0.0.1:8001/
Press CTRL+C to close the tunnel...
Forwarding from 127.0.0.1:8001 -> 9090
Forwarding from [::1]:8001 -> 9090
Handling connection for 8001
Zugreifen auf das Kubernetes-
Webdashboard in AKS