Kubernetes in Action (eBook)
670 Seiten
Carl Hanser Fachbuchverlag
978-3-446-45602-0 (ISBN)
Marko Luk?a ist Software Engineer bei Red Hat im Cloud Enablement Team. Das Team sorgt dafür, dass Red Hat's Enterprise Middleware-Produkte auf OpenShift funktionieren - eine PaaS-Plattform, die auf Kubernetes läuft. Durch seine 15-jährige Erfahrung als Trainer gelingt es ihm besonders gut schwierige Inhalte einfach und verständlich zu vermitteln.
Marko Lukša ist Software Engineer bei Red Hat im Cloud Enablement Team. Das Team sorgt dafür, dass Red Hat's Enterprise Middleware-Produkte auf OpenShift funktionieren – eine PaaS-Plattform, die auf Kubernetes läuft. Durch seine 15-jährige Erfahrung als Trainer gelingt es ihm besonders gut schwierige Inhalte einfach und verständlich zu vermitteln.
Inhalt 9
Vorwort 23
Der Autor 24
Danksagung zur englischsprachigen Ausgabe 25
Über dieses Buch 27
Zielgruppe 27
Der Aufbau dieses Buches 28
Der Code 29
Das Forum zum Buch 30
Sonstige Onlinequellen 30
Teil I: Überblick 31
1 Einführung in Kubernetes 33
1.1 Der Bedarf für ein System wie Kubernetes 34
1.1.1 Von monolithischen Anwendungen zu Microservices 34
1.1.2 Eine konsistente Umgebung für Anwendungen bereitstellen 38
1.1.3 Übergang zu Continuous Delivery: DevOps und NoOps 38
1.2 Containertechnologien 40
1.2.1 Was sind Container? 40
1.2.2 Die Containerplattform Docker 44
1.2.3 Die Docker-Alternative rkt 48
1.3 Kubernetes 49
1.3.1 Die Ursprünge 49
1.3.2 Kubernetes im Überblick 49
1.3.3 Die Architektur eines Kubernetes-Clusters 51
1.3.4 Anwendungen auf Kubernetes ausführen 52
1.3.5 Vorteile der Verwendung von Kubernetes 54
1.4 Zusammenfassung 57
2 Erste Schritte mit Docker und Kubernetes 59
2.1 Containerimages mit Docker erstellen, ausführen und teilen 59
2.1.1 Docker installieren und einen Hello-world-Container ausführen 60
2.1.2 Eine triviale Node.js-Anwendung erstellen 62
2.1.3 Eine Docker-Datei für das Image erstellen 63
2.1.4 Das Containerimage erstellen 63
2.1.5 Das Containerimage ausführen 66
2.1.6 Das Innenleben eines laufenden Containers untersuchen 67
2.1.7 Container anhalten und entfernen 69
2.1.8 Das Image zu einer Registry hochladen 69
2.2 Kubernetes-Cluster einrichten 71
2.2.1 Einen lokalen Kubernetes-Cluster mit einem Knoten mithilfe von Minikube ausführen 71
2.2.2 Gehostete GKE-Cluster 73
2.2.3 Einen Alias und die Befehlszeilenvervollständigung für kubectl einrichten 76
2.3 Eine erste Anwendung in Kubernetes ausführen 77
2.3.1 Die Node.js-Anwendung bereitstellen 78
2.3.2 Auf die Webanwendung zugreifen 81
2.3.3 Die logischen Bestandteile des Systems 82
2.3.4 Anwendungen horizontal skalieren 84
2.3.5 Auf welchen Knoten läuft die Anwendung? 87
2.3.6 Das Kubernetes-Dashboard 88
2.4 Zusammenfassung 89
Teil II: Grundlagen 91
3 Pods: Container in Kubernetes ausführen 93
3.1 Einführung in Pods 93
3.1.1 Wozu benötigen wir Pods? 94
3.1.2 Grundlagen von Pods 95
3.1.3 Container auf Pods verteilen 96
3.2 Pods aus YAML- und JSON-Deskriptoren erstellen 99
3.2.1 Den YAML-Deskriptor eines bestehenden Pods untersuchen 99
3.2.2 Einen einfachen YAML-Deskriptor für einen Pod schreiben 101
3.2.3 Einen Pod mit kubectl create erstellen 103
3.2.4 Anwendungsprotokolle anzeigen 104
3.2.5 Anforderungen an den Pod senden 105
3.3 Pods mithilfe von Labels ordnen 106
3.3.1 Einführung in Labels 107
3.3.2 Labels beim Erstellen eines Pods angeben 108
3.3.3 Labels vorhandener Pods ändern 109
3.4 Eine Auswahl der Pods mithilfe von Labelselektoren auflisten 110
3.4.1 Pods anhand eines Labelselektors auflisten 110
3.4.2 Labelselektoren mit mehreren Bedingungen 112
3.5 Die Podzuweisung mithilfe von Labels und Selektoren einschränken 112
3.5.1 Labels zur Klassifizierung von Arbeitsknoten 113
3.5.2 Pods bestimmten Knoten zuweisen 114
3.5.3 Zuweisung zu einem einzelnen Knoten 114
3.6 Pods mit Anmerkungen versehen 115
3.6.1 Die Anmerkungen zu einem Objekt einsehen 115
3.6.2 Anmerkungen hinzufügen und ändern 116
3.7 Ressourcen mithilfe von Namespaces gruppieren 116
3.7.1 Der Bedarf für Namespaces 117
3.7.2 Andere Namespaces und die zugehörigen Pods finden 117
3.7.3 Namespaces erstellen 118
3.7.4 Objekte in anderen Namespaces verwalten 119
3.7.5 Die Trennung der Namespaces 120
3.8 Pods stoppen und entfernen 120
3.8.1 Pods unter Angabe des Namens löschen 120
3.8.2 Pods mithilfe von Labelselektoren löschen 121
3.8.3 Pods durch Entfernen eines ganzen Namespaces löschen 121
3.8.4 Alle Pods in einem Namespace löschen und den Namespace erhalten 122
3.8.5 (Fast) alle Ressourcen in einem Namespace löschen 122
3.9 Zusammenfassung 123
4 Replikationscontroller & Co.: Verwaltete Pods bereitstellen
4.1 Pods funktionsfähig halten 126
4.1.1 Aktivitätssonden 126
4.1.2 HTTP-Aktivitätssonden erstellen 127
4.1.3 Eine Aktivitätssonde in Aktion 128
4.1.4 Weitere Eigenschaften der Aktivitätssonde festlegen 129
4.1.5 Wirkungsvolle Aktivitätssonden erstellen 130
4.2 Replikationscontroller 132
4.2.1 Die Funktionsweise von Replikationscontrollern 133
4.2.2 Einen Replikationscontroller erstellen 135
4.2.3 Der Replikationscontroller in Aktion 136
4.2.4 Pods in den Gültigkeitsbereich eines Replikationscontrollers bringen und daraus entfernen 141
4.2.5 Das Pod-Template ändern 144
4.2.6 Pods horizontal skalieren 145
4.2.7 Einen Replikationscontroller löschen 147
4.3 Replikationssätze anstelle von Replikationscontrollern verwenden 148
4.3.1 Replikationssätze und Replikationscontroller im Vergleich 148
4.3.2 Einen Replikationssatz definieren 149
4.3.3 Einen Replikationssatz erstellen und untersuchen 150
4.3.4 Die ausdrucksstärkeren Labelselektoren des Replikationssatzes 151
4.3.5 Zusammenfassung: Replikationssätze 152
4.4 Daemonsets zur Ausführung einer Instanz eines Pods auf jedem Knoten 152
4.4.1 Einen Pod auf allen Knoten ausführen 152
4.4.2 Einen Pod nur auf einigen Knoten ausführen 153
4.5 Pods für endliche Aufgaben 156
4.5.1 Jobs 157
4.5.2 Einen Job definieren 158
4.5.3 Ein Job in Aktion 158
4.5.4 Mehrere Podinstanzen in einem Job ausführen 159
4.5.5 Die Zeit zum Abschließen eines Job-Pods begrenzen 160
4.6 Jobs regelmäßig oder zu einem späteren Zeitpunkt ausführen 161
4.6.1 Einen Cron-Job erstellen 161
4.6.2 Die Ausführung geplanter Jobs 162
4.7 Zusammenfassung 163
5 Dienste: Pods finden und mit ihnen kommunizieren 165
5.1 Dienste 166
5.1.1 Dienste erstellen 167
5.1.2 Dienste finden 173
5.2 Verbindungen zu Diensten außerhalb des Clusters 177
5.2.1 Dienstendpunkte 177
5.2.2 Manuell eingerichtete Dienstendpunkte 178
5.2.3 Einen Alias für einen externen Dienst erstellen 180
5.3 Dienste für externe Clients verfügbar machen 181
5.3.1 Einen NodePort-Dienst verwenden 181
5.3.2 Einen Dienst über einen externen Load Balancer verfügbar machen 185
5.3.3 Besondere Eigenschaften von externen Verbindungen 187
5.4 Dienste über eine Ingress-Ressource extern verfügbar machen 189
5.4.1 Eine Ingress-Ressource erstellen 191
5.4.2 Über den Ingress auf den Dienst zugreifen 192
5.4.3 Mehrere Dienste über denselben Domänennamen verfügbar machen 193
5.4.4 Einen Ingress für TLS-Datenverkehr einrichten 194
5.5 Die Bereitschaft eines Pods zur Annahme von Verbindungen signalisieren 196
5.5.1 Bereitschaftssonden 197
5.5.2 Einem Pod eine Bereitschaftssonde hinzufügen 198
5.5.3 Bereitschaftssonden in der Praxis 200
5.6 Headless-Dienste zur Ermittlung einzelner Pods 202
5.6.1 Einen headless-Dienst erstellen 202
5.6.2 Pods über DNS finden 203
5.6.3 Alle Pods finden – auch diejenigen, die nicht bereit sind 204
5.7 Fehlerbehebung bei Diensten 205
5.8 Zusammenfassung 206
6 Volumes: Festplattenspeicher zu Containern hinzufügen 207
6.1 Volumes 208
6.1.1 Ein Beispiel 208
6.1.2 Arten von Volumes 210
6.2 Gemeinsame Datennutzung durch die Container 211
6.2.1 emptyDir-Volumes 211
6.2.2 Ein Git-Repository als Ausgangspunkt für ein Volume verwenden 214
6.3 Zugriff auf Dateien im Dateisystem des Arbeitsknotens 217
6.3.1 HostPath-Volumes 218
6.3.2 Systempods mit hostPath-Volumes 218
6.4 Dauerhafte Speicherung 220
6.4.1 Eine GCE Persistent Disk in einem Pod-Volume 220
6.4.2 Andere Arten von Volumes mit zugrunde liegendem persistenten Speicher 223
6.5 Pods von der zugrunde liegenden Speichertechnologie entkoppeln 225
6.5.1 Persistente Volumes und Claims 225
6.5.2 Ein persistentes Volume erstellen 226
6.5.3 Mit einem Claim ein persistentes Volume beanspruchen 228
6.5.4 Einen Claim in einem Pod verwenden 230
6.5.5 Vorteile der Verwendung von persistenten Volumes und Claims 231
6.5.6 Persistente Volumes wiederverwenden 232
6.6 Persistente Volumes dynamisch bereitstellen 234
6.6.1 Die verfügbaren Speichertypen mit Speicherklassen definieren 234
6.6.2 Die Speicherklasse in einem Claim angeben 235
6.6.3 Dynamische Bereitstellung ohne Angabe einer Speicherklasse 237
6.7 Zusammenfassung 240
7 Konfigurationszuordnungen und Secrets: Anwendungen konfigurieren 243
7.1 Konfiguration von Anwendungen im Allgemeinen 243
7.2 Befehlszeilenargumente an Container übergeben 245
7.2.1 Den Befehl und die Argumente in Docker definieren 245
7.2.2 Den Befehl und die Argumente in Kubernetes überschreiben 247
7.3 Umgebungsvariablen für einen Container einrichten 249
7.3.1 Eine Umgebungsvariable in einer Containerdefinition festlegen 250
7.3.2 Im Wert einer Variablen auf andere Umgebungsvariablen verweisen 250
7.3.3 Die Nachteile hartkodierter Umgebungsvariablen 251
7.4 Die Konfiguration mit einer Konfigurationszuordnung entkoppeln 251
7.4.1 Einführung in Konfigurationszuordnungen 251
7.4.2 Eine Konfigurationszuordnung erstellen 253
7.4.3 Einen Konfigurationseintrag als Umgebungsvariable an einen Container übergeben 256
7.4.4 Alle Einträge einer Konfigurationszuordnung auf einmal als Umgebungsvariablen übergeben 257
7.4.5 Einen Konfigurationseintrag als Befehlszeilenargument übergeben 258
7.4.6 Konfigurationsdateien mithilfe eines configMap-Volumes verfügbar machen 259
7.4.7 Die Konfiguration einer Anwendung ohne Neustart ändern 265
7.5 Sensible Daten mithilfe von Geheimnissen an Container übergeben 267
7.5.1 Einführung in Geheimnisse 268
7.5.2 Das Geheimnis default-token 268
7.5.3 Ein Geheimnis erstellen 270
7.5.4 Unterschiede zwischen Konfigurationszuordnungen und Geheimnissen 271
7.5.5 Das Geheimnis in einem Pod verwenden 273
7.5.6 Geheimnisse zum Abrufen von Images 277
7.6 Zusammenfassung 278
8 Von Anwendungen aus auf Podmetadaten und andere Ressourcen zugreifen 279
8.1 Metadaten über die Downward-API übergeben 279
8.1.1 Die verwendbaren Metadaten 280
8.1.2 Metadaten über Umgebungsvariablen verfügbar machen 281
8.1.3 Metadaten über Dateien in einem downwardAPI-Volume übergeben 284
8.2 Kommunikation mit dem Kubernetes-API-Server 287
8.2.1 Die REST-API von Kubernetes 288
8.2.2 Von einem Pod aus mit dem API-Server kommunizieren 292
8.2.3 Botschaftercontainer zur Vereinfachung der Kommunikation mit dem API-Server 298
8.2.4 Clientbibliotheken zur Kommunikation mit dem API-Server 300
8.3 Zusammenfassung 303
9 Deployments: Anwendungen deklarativ aktualisieren 305
9.1 Anwendungen in Pods aktualisieren 306
9.1.1 Alte Pods löschen und anschließend durch neue ersetzen 307
9.1.2 Neue Pods starten und danach die alten löschen 307
9.2 Automatische schrittweise Aktualisierung mit einem Replikationscontroller 309
9.2.1 Die ursprüngliche Version der Anwendung ausführen 309
9.2.2 Die schrittweise Aktualisierung mit kubectl durchführen 311
9.2.3 Warum ist kubectl rolling-update veraltet? 315
9.3 Deployments zur deklarativen Verwaltung von Anwendungen 317
9.3.1 Ein Deployment erstellen 317
9.3.2 Ein Deployment aktualisieren 320
9.3.3 Eine Bereitstellung zurücknehmen 324
9.3.4 Die Rolloutrate festlegen 327
9.3.5 Den Rolloutvorgang anhalten 329
9.3.6 Das Rollout fehlerhafter Versionen verhindern 331
9.4 Zusammenfassung 336
10 StatefulSets: Replizierte statusbehaftete Anwendungen bereitstellen 337
10.1 Statusbehaftete Pods replizieren 337
10.1.1 Mehrere Replikate mit jeweils eigenem Speicher ausführen 338
10.1.2 Eine unveränderliche Identität für jeden Pod bereitstellen 339
10.2 Statussätze 341
10.2.1 Statussätze und Replikationssätze im Vergleich 341
10.2.2 Unveränderliche Netzwerkidentität 342
10.2.3 Eigenen beständigen Speicher für jede Podinstanz zuweisen 344
10.2.4 Garantien von Statussätzen 346
10.3 Statussätze nutzen 347
10.3.1 Die Anwendung und das Containerimage erstellen 347
10.3.2 Die Anwendung mithilfe eines Statussatzes bereitstellen 348
10.3.3 Die Pods untersuchen 353
10.4 Peers im Statussatz finden 357
10.4.1 Die Peer-Ermittlung über DNS einrichten 359
10.4.2 Einen Statussatz aktualisieren 360
10.4.3 Den Clusterdatenspeicher ausprobieren 361
10.5 Umgang mit Knotenausfällen 362
10.5.1 Die Trennung eines Knotens vom Netzwerk simulieren 362
10.5.2 Den Pod manuell löschen 364
10.6 Zusammenfassung 366
Teil III: Fortgeschrittene Themen 367
11 Interne Mechanismen von Kubernetes 369
11.1 Die Architektur 369
11.1.1 Die verteilte Natur der Kubernetes-Komponenten 370
11.1.2 Verwendung von etcd 373
11.1.3 Aufgaben des API-Servers 376
11.1.4 Benachrichtigungen des API-Servers über Ressourcenänderungen 378
11.1.5 Der Scheduler 380
11.1.6 Die Controller im Controller-Manager 382
11.1.7 Die Rolle des Kubelets 387
11.1.8 Die Rolle des Kubernetes-Dienstproxys 388
11.1.9 Kubernetes-Add-ons 389
11.1.10 Zusammenfassung 391
11.2 Kooperation der Controller 391
11.2.1 Die betroffenen Komponenten 391
11.2.2 Die Abfolge der Ereignisse 392
11.2.3 Clusterereignisse beobachten 394
11.3 Laufende Pods 395
11.4 Das Podnetzwerk 396
11.4.1 Anforderungen an das Netzwerk 396
11.4.2 Funktionsweise des Netzwerks 398
11.4.3 CNI 400
11.5 Implementierung von Diensten 400
11.5.1 Der Kube-Proxy 400
11.5.2 Iptables-Regeln 401
11.6 Cluster mit hoher Verfügbarkeit 403
11.6.1 Anwendungen hochverfügbar machen 403
11.6.2 Die Komponenten der Kubernetes-Steuerebene hochverfügbar machen 404
11.7 Zusammenfassung 407
12 Sicherheit des Kubernetes-API-Servers 409
12.1 Authentifizierung 409
12.1.1 Benutzer und Gruppen 410
12.1.2 Dienstkonten 411
12.1.3 Dienstkonten erstellen 412
12.1.4 Ein Dienstkonto mit einem Pod verknüpfen 414
12.2 Rollengestützte Zugriffssteuerung 416
12.2.1 Das RBAC-Autorisierungs-Plug-in 416
12.2.2 RBAC-Ressourcen 418
12.2.3 Rollen und Rollenbindungen 421
12.2.4 Clusterrollen und Clusterrollenbindungen 425
12.2.5 Standardclusterrollen und -clusterrollenbindungen 434
12.2.6 Berechtigungen bedachtsam gewähren 436
12.3 Zusammenfassung 437
13 Sicherheit der Clusterknoten und des Netzwerks 439
13.1 Die Namespaces des Hostknotens in einem Pod verwenden 439
13.1.1 Den Netzwerknamespace des Knotens in einem Pod verwenden 440
13.1.2 Bindung an einen Hostport ohne Verwendung des Host-Netzwerknamespace 441
13.1.3 Den PID- und den IPC-Namespace des Knotens verwenden 443
13.2 Den Sicherheitskontext eines Containers einrichten 444
13.2.1 Einen Container unter einer bestimmten Benutzer-ID ausführen 445
13.2.2 Die Ausführung eines Containers als root verhindern 446
13.2.3 Pods im privilegierten Modus ausführen 447
13.2.4 Einem Container einzelne Kernelfähigkeiten hinzufügen 448
13.2.5 Fähigkeiten von einem Container entfernen 450
13.2.6 Prozesse am Schreiben im Dateisystem des Containers hindern 451
13.2.7 Gemeinsame Nutzung von Volumes durch Container mit verschiedenen Benutzer-IDs 452
13.3 Die Bearbeitung der Sicherheitsmerkmale in einem Pod einschränken 454
13.3.1 Podsicherheitsrichtlinien 454
13.3.2 Die Richtlinien runAsUser, fsGroup und supplementalGroups 457
13.3.3 Zulässige, unzulässige und Standardfähigkeiten festlegen 459
13.3.4 Die verwendbaren Arten von Volumes einschränken 460
13.3.5 Benutzern und Gruppen unterschiedliche Podsicherheitsrichtlinien zuweisen 461
13.4 Das Podnetzwerk isolieren 464
13.4.1 Die Netzwerkisolierung in einem Namespace aktivieren 465
13.4.2 Einzelnen Pods im Namespace die Verbindung zu einem Serverpod erlauben 465
13.4.3 Das Netzwerk zwischen Kubernetes-Namespaces isolieren 466
13.4.4 Verwendung der CIDR-Schreibweise zur Isolierung 468
13.4.5 Den ausgehenden Datenverkehr von Pods einschränken 468
13.5 Zusammenfassung 469
14 Die Computerressourcen eines Pods verwalten 471
14.1 Ressourcen für die Container eines Pods anfordern 471
14.1.1 Pods mit Ressourcenanforderungen erstellen 472
14.1.2 Einfluss der Ressourcenanforderungen auf die Zuteilung zu Knoten 473
14.1.3 Der Einfluss der CPU-Anforderungen auf die CPU-Zeitzuteilung 478
14.1.4 Benutzerdefinierte Ressourcen definieren und anfordern 478
14.2 Die verfügbaren Ressourcen für einen Container einschränken 479
14.2.1 Harte Grenzwerte für die von einem Container verwendeten Ressourcen festlegen 479
14.2.2 Überschreiten der Grenzwerte 481
14.2.3 Grenzwerte aus der Sicht der Anwendungen in den Containern 482
14.3 QoS-Klassen für Pods 484
14.3.1 Die QoS-Klasse eines Pods festlegen 484
14.3.2 Auswahl des zu beendenden Prozesses bei zu wenig Speicher 487
14.4 Standardanforderungen und -grenzwerte für die Pods in einem Namespace festlegen 488
14.4.1 Der Grenzwertbereich 489
14.4.2 Einen Grenzwertbereich erstellen 490
14.4.3 Die Grenzwerte durchsetzen 491
14.4.4 Standardanforderungen und -grenzwerte anwenden 492
14.5 Die in einem Namespace insgesamt verfügbaren Ressourcen beschränken 493
14.5.1 Ressourcenkontingente 493
14.5.2 Kontingente für persistenten Speicher festlegen 495
14.5.3 Die Höchstzahl der Objekte in einem Namespace beschränken 496
14.5.4 Kontingente für einzelne Podstatus und QoS-Klassen festlegen 497
14.6 Die Ressourcennutzung der Pods überwachen 498
14.6.1 Die tatsächliche Ressourcennutzung erfassen 498
14.6.2 Verlaufsdaten des Ressourcenverbrauchs speichern und analysieren 500
14.7 Zusammenfassung 504
15 Automatische Skalierung von Pods und Clusterknoten 505
15.1 Automatische horizontale Podskalierung 506
15.1.1 Der Vorgang der automatischen Skalierung 506
15.1.2 Skalierung auf der Grundlage der CPU-Nutzung 509
15.1.3 Skalierung auf der Grundlage der Speichernutzung 516
15.1.4 Skalierung auf der Grundlage anderer Messgrößen 516
15.1.5 Geeignete Messgrößen für die automatische Skalierung auswählen 518
15.1.6 Herunterskalieren auf null Replikate 519
15.2 Automatische vertikale Podskalierung 519
15.2.1 Ressourcenanforderungen automatisch einrichten 519
15.2.2 Ressourcenanforderungen von laufenden Pods ändern 520
15.3 Horizontale Skalierung von Clusterknoten 520
15.3.1 Der Cluster-Autoskalierer 520
15.3.2 Den Cluster-Autoskalierer aktivieren 522
15.3.3 Die Unterbrechung von Diensten beim Herunterskalieren des Clusters minimieren 523
15.4 Zusammenfassung 525
16 Erweiterte Planung 527
16.1 Pods mithilfe von Mängeln und Tolerierungen von bestimmten Knoten fernhalten 527
16.1.1 Mängel und Tolerierungen 528
16.1.2 Einem Knoten benutzerdefinierte Mängel hinzufügen 530
16.1.3 Tolerierungen zu Pods hinzufügen 530
16.1.4 Verwendungszwecke für Mängel und Tolerierungen 531
16.2 Knotenaffinität 532
16.2.1 Feste Knotenaffinitätsregeln aufstellen 533
16.2.2 Knotenprioritäten bei der Zuteilung eines Pods 535
16.3 Pods mit Affinitäts- und Antiaffinitätsregeln auf denselben Knoten unterbringen 538
16.3.1 Podaffinitätsregeln zur Bereitstellung von Pods auf demselben Knoten 539
16.3.2 Pods im selben Schaltschrank, in derselben Verfügbarkeitszone oder derselben geografischen Region bereitstellen 541
16.3.3 Präferenzen statt fester Regeln für die Podaffinität angeben 543
16.3.4 Pods mit Antiaffinitätsregeln voneinander getrennt halten 544
16.4 Zusammenfassung 546
17 Best Practices für die Anwendungsentwicklung 549
17.1 Das Gesamtbild 549
17.2 Der Lebenszyklus eines Pods 551
17.2.1 Beendigung und Verlegung von Anwendungen 551
17.2.2 Tote oder teilweise tote Pods neu bereitstellen 554
17.2.3 Pods in einer bestimmten Reihenfolge starten 555
17.2.4 Lebenszyklushooks 557
17.2.5 Pods herunterfahren 561
17.3 Die ordnungsgemäße Verarbeitung aller Clientanforderungen sicherstellen 565
17.3.1 Unterbrechungen von Clientverbindungen beim Hochfahren eines Pods verhindern 565
17.3.2 Unterbrechungen von Clientverbindungen beim Herunterfahren eines Pods verhindern 565
17.4 Einfache Ausführung und Handhabung von Anwendungen in Kubernetes 570
17.4.1 Einfach zu handhabende Containerimages erstellen 570
17.4.2 Images sauber kennzeichnen 571
17.4.3 Mehrdimensionale statt eindimensionaler Labels 571
17.4.4 Ressourcen mit Anmerkungen beschreiben 572
17.4.5 Gründe für die Beendigung eines Prozesses angeben 572
17.4.6 Anwendungsprotokolle 574
17.5 Empfohlene Vorgehensweisen für Entwicklung und Tests 576
17.5.1 Anwendungen während der Entwicklung außerhalb von Kubernetes ausführen 576
17.5.2 Minikube für die Entwicklung 577
17.5.3 Versionssteuerung und Manifeste zur automatischen Bereitstellung von Ressourcen 579
17.5.4 Ksonnet als Alternative zu YAML- und JSON-Manifesten 579
17.5.5 Continuous Integration und Continuous Delivery (CI/CD) 580
17.6 Zusammenfassung 581
18 Kubernetes erweitern 583
18.1 Eigene API-Objekte definieren 583
18.1.1 Eigene Ressourcendefinitionen 584
18.1.2 Benutzerdefinierte Ressourcen mit benutzerdefinierten Controllern automatisieren 588
18.1.3 Benutzerdefinierte Objekte validieren 592
18.1.4 Einen benutzerdefinierten API-Server für benutzerdefinierte Objekte bereitstellen 592
18.2 Kubernetes mit dem Kubernetes-Dienstkatalog erweitern 594
18.2.1 Der Dienstkatalog 595
18.2.2 Der API-Server des Dienstkatalogs und der Controller-Manager 596
18.2.3 Dienstbroker und die API OpenServiceBroker 597
18.2.4 Dienste bereitstellen und nutzen 598
18.2.5 Aufheben der Bindung und der Bereitstellung 601
18.2.6 Vorteile des Dienstkatalogs 601
18.3 Plattformen auf der Grundlage von Kubernetes 602
18.3.1 Die Containerplattform Red Hat OpenShift 602
18.3.2 Deis Workflow und Helm 605
18.4 Zusammenfassung 608
Anhang A: Verwendung von kubectl für mehrere Cluster 609
A.1 Umschalten zwischen Minikube und Google Kubernetes Engine 609
A.1.1 Umschalten zu Minikube 609
A.1.2 Umschalten zu GKE 609
A.2 Verwendung von kubectl für mehrere Cluster oder Namespaces 610
A.2.1 Den Speicherort der Konfigurationsdatei festlegen 610
A.2.2 Der Inhalt der Konfigurationsdatei 610
A.2.3 Konfigurationseinträge auflisten, hinzufügen und ändern 611
A.2.4 Verwendung von kubectl mit verschiedenen Clustern, Benutzern und Kontexten 613
A.2.5 Umschalten zwischen Kontexten 613
A.2.6 Kontexte und Cluster auflisten 614
A.2.7 Kontexte und Cluster löschen 614
Anhang B: Einen Cluster mit mehreren Knoten mit kubeadm erstellen 615
B.1 Das Betriebssystem und die erforderlichen Pakete einrichten 615
B.1.1 Die virtuelle Maschine erstellen 615
B.1.2 Den Netzwerkadapter für die VM einrichten 616
B.1.3 Das Betriebssystem installieren 617
B.1.4 Docker und Kubernetes installieren 620
B.1.5 Die VM klonen 621
B.2 Den Master mit kubeadm konfigurieren 623
B.2.1 Ausführung der Komponenten durch kubeadm 624
B.3 Arbeitsknoten mit kubeadm einrichten 625
B.3.1 Das Containernetzwerk einrichten 626
B.4 Vom lokalen Computer auf den Cluster zugreifen 627
Anhang C: Andere Containerlaufzeitumgebungen verwenden 629
C.1 Docker durch rkt ersetzen 629
C.1.1 Kubernetes zur Verwendung von rkt einrichten 629
C.1.2 rkt in Minikube ausprobieren 630
C.2 Andere Containerlaufzeiten über die CRI verwenden 632
C.2.1 CRI-O 632
C.2.2 Anwendungen in VMs statt in Containern ausführen 632
Anhang D: Clusterverbund 633
D.1 Der Kubernetes-Clusterverbund 633
D.2 Die Architektur 634
D.3 Verbund-API-Objekte 635
D.3.1 Verbundversionen der Kubernetes-Ressourcen 635
D.3.2 Funktionsweise von Verbundressourcen 636
Anhang E: Kubernetes-Ressourcen in diesem Buch 639
Index 643
| Erscheint lt. Verlag | 9.7.2018 |
|---|---|
| Verlagsort | München |
| Sprache | deutsch |
| Original-Titel | Kubernetes in Action (US ISBN: 978-1617293726) |
| Themenwelt | Mathematik / Informatik ► Informatik |
| Schlagworte | Ansible • aws cloud • Cloud • Cloud Computing • Container • Correo • DevOps • Docker • docker swarm • GitHub • Kubernetes • Mesos • Microservices • OpenStack • Orchestrierung • Softwareentwicklung • Virtualisierung |
| ISBN-10 | 3-446-45602-3 / 3446456023 |
| ISBN-13 | 978-3-446-45602-0 / 9783446456020 |
| Informationen gemäß Produktsicherheitsverordnung (GPSR) | |
| Haben Sie eine Frage zum Produkt? |
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich