Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Verteilte Anwendungen bei Azure mit Docker und Kubernetes

220 views

Published on

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.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Verteilte Anwendungen bei Azure mit Docker und Kubernetes

  1. 1. Verteilte Anwendungen bei Azure Mit Docker und Kubernetes Gregor Biswanger | Freier Dozent, Berater, Trainer und Autor about.me/gregor.biswanger
  2. 2. Ü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
  3. 3. 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
  4. 4. Jetzzzt für all eure Software!
  5. 5. Hohe Verfügbarkeit
  6. 6. Hohe Ausfallsicherheit
  7. 7. Hohe Skalierbarkeit
  8. 8. Hohe Performance
  9. 9. Woher kennen wir diese Versprechen?
  10. 10. Richtig! Durch die Cloud…
  11. 11. Wie andere Cloudplattformen auch, basiert Azure auf einer Technologie, die als Virtualisierung bezeichnet wird.
  12. 12. Der Fabric Controller ist eine verteilte Anwendung mit vielen Aufgaben.
  13. 13. 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.
  14. 14. Nativ läuft also der Azure Service Fabric Controller
  15. 15. Kubernetes ist eine alternative Open-Source Lösung zur Orchestrierung.
  16. 16. Vergleichbar mit der Azure Service Fabric.
  17. 17. Azure unterstützt beide Welten.
  18. 18. 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
  19. 19. Ein Überblick zu Docker
  20. 20. Docker ist Open-Source auf der Apache 2.0 Lizenz
  21. 21. Läuft Cross-Plattform auf * * * Benötigt eine Virtuelle Maschine
  22. 22. Linux Container sind seit über 10 Jahren Teil des Kernels.
  23. 23. Erste Umsetzung gab es beim Free BSD Jail. Aus Gründen der Sicherheit, wollte man einzelne Prozesse in andere Root-Ordner verschieben.
  24. 24. Wenn beispielsweise Apache gehackt wird, hat man nicht automatisch Berechtigung/Zugriff auf das Gesamtsystem.
  25. 25. Die erste richtige Implementierung gab es mit Solaris Zonen von Sun.
  26. 26. Sun wollte nicht auf eine richtige Hardware- Virtualisierung setzen.
  27. 27. Linux Container (LXC) sind zu Komplex zu administrieren.
  28. 28. Es fehlt an einfacher Reproduzierbarkeit und teilweise auch um richtige Schnittstellen.
  29. 29. Docker ist eine Abstraktionsschicht der Linux Container und Löst die Komplexität.
  30. 30. Docker baute nur bis Version 0.9 auf die nativen Linux Container auf.
  31. 31. Docker verwendet heute eine eigene Implementierung und heißt Libcontainer.
  32. 32. Docker Architektur Docker Daemon Libcontainer REST-Schnittstelle Docker CLI (Client) cgroups Namespaces MAC Dateisysteme Capabilities chroot
  33. 33. Images und Container Docker Image Beispiel: Ubuntu mit Node.js und Anwendungscode Docker Container Erzeugt von einem Image. Laufende Anwendung in einem geschlossenen System.
  34. 34. Virtuelle Maschinen vs. Docker Container Betriebssystem Hypervisor Virtuelle Maschine Betriebssystem Betriebssystem Bins/Libs Bins/Libs App 1 App 2 Betriebssystem Docker Engine (Daemon) Docker Container Bins/Libs Bins/Libs App 1 App 2
  35. 35. Docker-Lebenszyklus
  36. 36. Lokale Images Docker Hub Registry pull push Run Dockerfile Build Docker Container Gestoppter Container start stop Commit restart Run-Befehl shell attach stdout history logs
  37. 37. Welche Vorteile für Entwickler?
  38. 38. Schnelles Bereitstellen der Entwicklungsumgebung
  39. 39. Vermeiden von Softwarekonflikten. Unterschiedliche Runtime Versionen, fehlende Dienste etc.
  40. 40. Konsistente Umgebungen
  41. 41. Schnelle Auslieferung der Software
  42. 42. Kubernetes („K8s“) ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen.
  43. 43. Kubernetes ist altgriechisch und bedeutet „Steuermann“.
  44. 44. K8s wurde ursprünglich von Google entworfen und an die Cloud Native Computing Foundation gespendet.
  45. 45. Es unterstützt eine Reihe von Container-Tools, einschließlich Docker.
  46. 46. 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.
  47. 47. K8s Cluster Node Node Node Node Master Master Master Pod Pod Pod Pod Node Node Node Node Pod Pod Pod Pod
  48. 48. Kubernetes Node
  49. 49. Der Kubernetes Node ist auch bekannt als Minion.
  50. 50. Ein Node ist ein einzelner Server, auf dem die Container gestartet werden.
  51. 51. Somit ist auf jedem Node eine Container-Laufzeitumgebung installiert (z. B. Docker oder rkt (Rocket))
  52. 52. Kubernetes Master
  53. 53. Der Kubernetes Master ist die Steuereinheit des Clusters, welcher die Container auf den Nodes verteilt und verwaltet.
  54. 54. Es existieren mehrere Prozesse um diese Aufgaben zu verwalten.
  55. 55. Diese können auf einem einzelnen Master oder – zwecks Hochverfügbarkeit – auf mehreren verteilt sein.
  56. 56. K8s Cluster Node Node Node Node Pod Pod Pod Pod Node Node Node Node Pod Pod Pod Pod Master
  57. 57. Master API-Server Controller Cluster Store (etcd) kubectl Commands Node Pod Node Pod Scheduler
  58. 58. Master API-Server Controller Cluster Store (etcd) kubectl Commands Node Pod Node Pod Scheduler
  59. 59. Der API Server ist eine der wichtigsten Komponenten.
  60. 60. Er ist die zentrale Anlaufstelle und bedient alle anderen Komponenten mit Informationen mittels JSON über eine REST-Schnittstelle.
  61. 61. Diese Schnittstelle bietet allen internen sowie externen Diensten die Möglichkeit, mit dem Kubernetes Cluster zu kommunizieren.
  62. 62. Die Autorisierung kann über verschiedene Mechanismen erfolgen.
  63. 63. Master API-Server Controller Cluster Store (etcd) kubectl Commands Node Pod Node Pod Scheduler
  64. 64. Der API Server persistiert alle Informationen (Gesamtstatus und Konfiguration) im Cluster Store (etcd).
  65. 65. Der etcd ist eine von CoreOS entwickelte persistente, leichtgewichtige, verteilte Key-Value-Datenbank.
  66. 66. Master API-Server Controller Cluster Store (etcd) kubectl Commands Node Pod Node Pod Scheduler
  67. 67. Der Scheduler entscheidet als eigenständige Komponente, die Lastverteilung auf einzelne Nodes.
  68. 68. Dies ist abhängig von den zur Verfügung stehenden Ressourcen.
  69. 69. Berücksichtigt werden dabei Richtlinien wie QoS, Node-Zugehörigkeiten und z. B. Orte der Nodes im Cluster (Rechenzentren).
  70. 70. Master API-Server Controller Cluster Store (etcd) kubectl Commands Node Pod Node Pod Scheduler
  71. 71. Der Controller Manager ist jener Prozess, welcher alle Kontrollmechanismen enthält, in dem z. B. ein DaemonSet oder ein Replication Controller laufen.
  72. 72. Er verarbeitet die in den jeweiligen Replikationsaufgaben definierten Replikationsprozesse.
  73. 73. Die dazu benötigten Informationen werden in der etcd festgehalten.
  74. 74. Der Controller Manager überwacht diese auf Änderungen.
  75. 75. Bei einer Änderung führt er die nötigen Schritte aus, um den gewünschten Zustand zu erreichen.
  76. 76. Zum Beispiel das Skalieren eines ReplicaSet oder das Löschen eines Pods.
  77. 77. Auch der Controller Manager bedient sich hierbei beim API-Service.
  78. 78. Master API-Server Controller Cluster Store (etcd) Node Pod Scheduler
  79. 79. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  80. 80. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  81. 81. Das Kubelet ist für den Status jedes Nodes verantwortlich.
  82. 82. Er wird vom Controller Manager gesteuert und übernimmt das Starten und Stoppen von Containern.
  83. 83. Wenn ein Container nicht mehr läuft, sorgt das Kubelet auch für den Neustart auf dem gleichen Node.
  84. 84. Alle paar Sekunden rapportiert er an den Kubernetes Master über seinen Status.
  85. 85. Bei einem Fehler oder der Nichterreichbarkeit des Nodes erkennt der Master dies aufgrund des nicht gemeldeten Status.
  86. 86. Der Controller Manager startet dann die Pods auf anderen "gesunden" Nodes erneut.
  87. 87. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  88. 88. Der cAdvisor ist im Kubelet integriert und zeichnet die Ressourcen (CPU, Memory) eines Containers auf.
  89. 89. Andere Monitoring-Lösungen können diesen Dienst konsultieren, um Langzeitaufzeichnungen anzubieten.
  90. 90. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  91. 91. Der Kube-Proxy ist ein Proxy mit Integriertem Load Balancer.
  92. 92. Er öffnet die Ports zu den Container- Services und verwaltet die Verbindungen.
  93. 93. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  94. 94. Der Container Manager hat eine Container-Laufzeitumgebung installiert und kann einen oder mehrere Pods verwalten.
  95. 95. Master API-Server Controller Cluster Store (etcd) Node Container Manager Pod Scheduler Pod … Kube-ProxycAdvisorKubelet Benutzer
  96. 96. Pod Docker Container Transport Network Link IPC Mount …
  97. 97. Ein Pod ist ein Wrapper für einen oder mehrere Container.
  98. 98. Dieser stellt den einzelnen Containern die zugeteilten Ressourcen zur Verfügung.
  99. 99. Alle Container in einem Pod, teilen sich somit die Pod Ressourcen.
  100. 100. Dies ermöglicht, mehrere voneinander abhängige Container gemeinsam lauffähig zu halten.
  101. 101. Mehrere Container in einem Pod, sollten nur untergebracht werden, wenn diese auch voneinander abhängig sind.
  102. 102. Pod Pod Lifecycle Pod Pod Pending Running Succeeded / Failed
  103. 103. Deployment
  104. 104. Mit Deployments werden gewünschte Zustände eines oder mehrerer Objekte definiert, die durch den Controller sichergestellt werden.
  105. 105. K8s Cluster Master Master Master apiVersion: v1 kind: Pod etadata: YAML-Datei Replication Controller Node PodDeployment
  106. 106. Ein ReplicaSet ist eine Gruppierung, die dafür sorgt, dass eine gewisse Anzahl von Pods im Cluster läuft.
  107. 107. Deployments wiederum, bauen auf Replica Sets auf und lassen sich darüber managen.
  108. 108. Ein Deployment kümmert sich dabei darum, Replica Sets zu starten, zu aktualisieren und zu löschen.
  109. 109. Deployments erzeugen bei einem Update ein neues ReplicaSet und skalieren die Pods nach oben.
  110. 110. Laufen die neuen Pods, wird das alte ReplicaSet herunterskaliert und am Ende gelöscht.
  111. 111. Ein Deployment lässt sich auch pausieren oder zurückrollen.
  112. 112. Alternativ können auch Pods als DaemonSet, StatefullSet oder als CronJobs ausgeführt werden.
  113. 113. Bei einem DaemonSet werden Pods auf jeder Node im Cluster ausgeführt.
  114. 114. Dies ist für Infrastrukturaufgaben geeignet. Zum Beispiel für Log- Collectoren, Zustandsüberwachung etc.
  115. 115. Ein CronJob wird nach einem bestimmten Zeitplan ausgeführt.
  116. 116. Labels und Annotations
  117. 117. Labels sind Schlüssel-Wert-Paare, die an einzelne Objekte, wie zum Beispiel Services oder Pods gebunden werden.
  118. 118. Labels werden für die Organisation und Gruppierung von einzelnen Kubernetes- Objekten verwendet.
  119. 119. Sie können zu jedem Zeitpunkt hinzugefügt, verändert oder ganz gelöscht werden.
  120. 120. Ein Objekt muss kein Label erhalten, der Schlüssel hingegen muss pro Objekt gleich sein.
  121. 121. In einem Namespace kann es zum Beispiel app:backend und app:frontend geben.
  122. 122. Node Pod Pod Service
  123. 123. Die Schlüssel der Label dürfen nicht größer als 63 Zeichen lang sein.
  124. 124. Annotationen sind ebenfalls Schlüssel-Werte- Paare.
  125. 125. Die Schlüssel der Annotationen können beliebig lang sein.
  126. 126. Annotationen können nicht zur Filterung/Selektion verwendet werden.
  127. 127. Labels Annotationen "metadata": { "labels": { "key1": "value", "key2": "value" } } "metadata": { "annotations": { "key1": "value", "key2": "value" } }
  128. 128. Bei Labels kann auf die Existenz oder Werte selektiert werden.
  129. 129. apiVersion: v1 kind: Pod metadata: name: ... spec: [...] nodeSelector: backend: foo-bar Wertbasierende Selektoren
  130. 130. apiVersion: v1 kind: Pod metadata: name: ... spec: [...] selector: matchLabels: component: nginx matchExpressions: - { key: foo, operator: In, values: [cache] } - { key: environment, operator: NotIn, values: [dev] } Set-Selektoren
  131. 131. Services
  132. 132. Ein Service verbindet die Pods mit der Außenwelt.
  133. 133. Ein Service hat immer eine feste IP-Adresse und wird konstant bereitgestellt.
  134. 134. Ein Pod kann zu jedem Zeitpunkt beendet werden, dieser wird dann durch das ReplicaSet neu erstellt und erhält eine neue IP-Adresse.
  135. 135. Node Pod Pod Service 10.0.0.10 10.0.0.30 IP: 10.0.0.90 DNS: app.myservice
  136. 136. Er holt die Pods auf dem targetPort des über den Selector gelabelten Nodes ab und erzeugt einen zufälligen Port auf dem Node.
  137. 137. Dieser dient als Endpunkt für den LoadBalancer.
  138. 138. In einer typischen Cloud-Umgebung sorgt der Cloud-Provider dafür, dass diese Information bei Kubernetes abgeholt und der richtige Endpunkt eingetragen wird.
  139. 139. 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
  140. 140. K8s Installation
  141. 141. 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
  142. 142. Play with Kubernetes ▪ Kubernetes ohne Installation ▪ Ohne Kosten ▪ Nur ein Testsetup ▪ Läuft für vier Stunden https://labs.play-with-k8s.com
  143. 143. Kubernetes für die lokale Entwicklung mit Minikube
  144. 144. Kubernetes für die lokale Entwicklung mit Minikube
  145. 145. 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
  146. 146. Azure Kubernetes Service (AKS)
  147. 147. Azure Kubernetes Service (AKS) verwaltet Ihre gehostete Kubernetes-Umgebung.
  148. 148. AKS ermöglicht eine schnelle und einfache Bereitstellung und Verwaltung von Containeranwendungen.
  149. 149. 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
  150. 150. 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
  151. 151. Die Azure CLI wird benötigt: http://bit.ly/AzureCLI
  152. 152. Es wird ebenfalls eine Azure Subscription benötigt, die mit der Azure CLI verknüpft ist.
  153. 153. 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
  154. 154. C:UsersGregor> Note, we have launched a browser for you to login. az login Mit dem Azure-Account einloggen
  155. 155. C:UsersGregor> C:UsersGregor> az account set --subscription "Azure Training Subscription" Die gewünschte Subscription festlegen
  156. 156. C:UsersGregor> C:UsersGregor> az aks create –g K8s-training –n my-aks --node-vm-size Standard_DS2 Alternativ kann ein neuer AKS auch über die Azure CLI angelegt werden
  157. 157. 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>
  158. 158. 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>
  159. 159. 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>
  160. 160. 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>
  161. 161. C:UsersGregor> No resources found. kubectl get pods Alle Pods auflisten C:UsersGregor>
  162. 162. Ein neues ASP.NET Core Projekt anlegen
  163. 163. Die .NET Core-CLI ist ein neues plattformübergreifendes Tool zur Entwicklung von .NET-Anwendungen mit der Eingabeaufforderung.
  164. 164. 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
  165. 165. Index.cshtml anpassen
  166. 166. Anwendungseinstellungen erweitern
  167. 167. Das Bereitstellen der eigenen Anwendung auf Kubernetes, erfolgt durch Docker Images.
  168. 168. Dockerfile Dockerfile und Images Docker Image docker build
  169. 169. Um Docker Images nicht jedes mal mühsam in der Konsole zu erstellen, gibt es das sogenannte Dockerfile.
  170. 170. Ein Dockerfile ist eine simpel aufgebaute Textdatei.
  171. 171. Darin wird der Aufbau eines Docker Images beschrieben.
  172. 172. 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
  173. 173. Dockerfiles werden in der Regel in einer Versionsverwaltung wie GIT hinzugefügt.
  174. 174. Docker hat ein Caching-Mechanismus. Wurde ein Befehl bereits ausgeführt, wird dieser aus dem Cache schneller verarbeitet.
  175. 175. Der Vorteil von Dockerfiles ist die Reproduzierbarkeit. Ein Zustand kann jederzeit wiederhergestellt werden.
  176. 176. Eine Dockerfile dient ebenfalls als saubere Systemaufbaudokumentation.
  177. 177. Das Management von Lizenzierungen wird vereinfacht. Es wird eine Art „Archivierung“ von Lizenzen vermieden.
  178. 178. Mit der .dockerignore-Datei können auch Verzeichnisse/Dateien beim Verarbeiten ignoriert werden.
  179. 179. VS Code Extension hilft beim Erzeugen von Docker-Dateien
  180. 180. Mit der F1-Taste die Command-Line öffnen
  181. 181. Projekt-Type auswählen
  182. 182. Gewünschte Plattform
  183. 183. Öffentlichen Port festlegen
  184. 184. Fertige Docker-File für ASP.NET Core
  185. 185. 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
  186. 186. C:devHelloK8s> REPOSITORY TAG IMAGE ID CREATED SIZE hellok8s local 0fa76744a1fb About a minute ago 264MB C:devHelloK8s> docker images Image wurde erzeugt
  187. 187. C:devHelloK8s> 274fec1e33e4b02bd88b7d291819554027172d08338f7acb5af058ef8c44d38a C:devHelloK8s> docker run -d --rm -p 80:80 hellok8s:local Eigenes Image als Container starten Port Mapping Host-Port:Container-Port Container Remove Entfernt Container wenn dieser gestoppt wurde Daemon „Im Hintergrund Ausführen“
  188. 188. Webseite vom Container öffnen
  189. 189. C:devHelloK8s> 274 C:devHelloK8s> docker stop 274 Container beenden
  190. 190. Lokales K8s deployment
  191. 191. 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)
  192. 192. 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
  193. 193. 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
  194. 194. 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>
  195. 195. Webseite wird automatisch von unterschiedlichen Pods ausgeführt.
  196. 196. C:dev> deployment.extensions "hellok8s-deployment" deleted kubectl delete deployment hellok8s-deployment Lokales deployment und Service löschen C:dev> kubectl delete service hellok8s-deployment service "hellok8s-deployment" deleted C:dev>
  197. 197. 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>
  198. 198. C:devHelloK8s> deployment.apps "hellok8s-deployment" deleted service "hellok8s-deployment-service" deleted kubectl delete -f .hellok8s-deploy.yml Lokales deployment und Service löschen C:devHelloK8s>
  199. 199. AKS deployment
  200. 200. Mein Source-Code Browser Mein Deployment Ziel
  201. 201. Mein Source-Code Browser Mein Deployment Ziel 1. Erzeugt Docker Images 2. Veröffentlicht Docker Images 3. Startet Kubectl mit Konfig-Datei
  202. 202. Die Azure Container Registry bietet das Hosting in der Cloud für Docker Repositories.
  203. 203. ACR Service anlegen
  204. 204. AKS die Lese-Rolle zur Berechtigung zuweisen
  205. 205. GitHub Projekt anlegen und Source-Code veröffentlichen
  206. 206. Azure DevOps Projekt anlegen und Build-Pipeline erzeugen
  207. 207. Mit GitHub Projekt verknüpfen
  208. 208. Docker Image erzeugen
  209. 209. Docker Image veröffentlichen
  210. 210. Kubectl mit Konfig- Datei ausführen
  211. 211. Trigger festlegen
  212. 212. Build-Pipeline abspeichern
  213. 213. K8s Konfig-Datei anpassen
  214. 214. Code einchecken und auf GitHub pushen.
  215. 215. 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
  216. 216. Projekt auf AKS verfügbar
  217. 217. + Better Together
  218. 218. 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
  219. 219. Monitoring
  220. 220. 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
  221. 221. Kubernetes-Webdashboard
  222. 222. Beispielcode: https://github.com/GregorBiswanger/HelloKubernetes
  223. 223. http://about.me/Gregor.Biswanger Ich freue mich auf Feedback! Vielen Dank!

×