Sie sind hier
E-Book

Kubernetes in Action

Anwendungen in Kubernetes-Clustern bereitstellen und verwalten

AutorMarko Luk?a
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2018
Seitenanzahl670 Seiten
ISBN9783446456020
FormatPDF/ePUB
KopierschutzWasserzeichen
GerätePC/MAC/eReader/Tablet
Preis49,99 EUR
Mit Kubernetes große Container-Infrastrukturen ausfallsicher verwalten
Nach einer Einführung in die typischen Problemstellungen, mit denen Softwareentwickler und Administratoren konfrontiert sind, und wie diese mit Kubernetes gelöst werden können, lernen Sie in einem ersten Beispielprojekt die praktische Umsetzung. Es wird gezeigt, wie eine einfache in einem Container laufende Web-Applikation über ein Kubernetes-Cluster verwaltet werden kann. Im zweiten Teil des Buches lernen Sie die zu Grunde liegenden Konzepte kennen, deren Verständnis unbedingt notwendig ist, um große Container-Cluster mit Kubernetes zu betreiben. Im letzten Teil wird die Funktionsweise von Kubernetes beschrieben und auf weiterführende Aspekte eingegangen. Hier wird außerdem das erworbene Wissen aus den ersten beiden Teilen zusammengeführt, damit Sie den vollen Nutzen aus der Kubernetes-Plattform ziehen können.

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.

Kaufen Sie hier:

Horizontale Tabs

Inhaltsverzeichnis
Inhalt9
Vorwort23
Der Autor24
Danksagung zur englischsprachigen Ausgabe25
Über dieses Buch27
Zielgruppe27
Der Aufbau dieses Buches28
Der Code29
Das Forum zum Buch30
Sonstige Onlinequellen30
Teil I: Überblick31
1 Einführung in Kubernetes33
1.1 Der Bedarf für ein System wie Kubernetes34
1.1.1 Von monolithischen Anwendungen zu Microservices34
1.1.2 Eine konsistente Umgebung für Anwendungen bereitstellen38
1.1.3 Übergang zu Continuous Delivery: DevOps und NoOps38
1.2 Containertechnologien40
1.2.1 Was sind Container?40
1.2.2 Die Containerplattform Docker44
1.2.3 Die Docker-Alternative rkt48
1.3 Kubernetes49
1.3.1 Die Ursprünge49
1.3.2 Kubernetes im Überblick49
1.3.3 Die Architektur eines Kubernetes-Clusters51
1.3.4 Anwendungen auf Kubernetes ausführen52
1.3.5 Vorteile der Verwendung von Kubernetes54
1.4 Zusammenfassung57
2 Erste Schritte mit Docker und Kubernetes59
2.1 Containerimages mit Docker erstellen, ausführen und teilen59
2.1.1 Docker installieren und einen Hello-world-Container ausführen60
2.1.2 Eine triviale Node.js-Anwendung erstellen62
2.1.3 Eine Docker-Datei für das Image erstellen63
2.1.4 Das Containerimage erstellen63
2.1.5 Das Containerimage ausführen66
2.1.6 Das Innenleben eines laufenden Containers untersuchen67
2.1.7 Container anhalten und entfernen69
2.1.8 Das Image zu einer Registry hochladen69
2.2 Kubernetes-Cluster einrichten71
2.2.1 Einen lokalen Kubernetes-Cluster mit einem Knoten mithilfe von Minikube ausführen71
2.2.2 Gehostete GKE-Cluster73
2.2.3 Einen Alias und die Befehlszeilenvervollständigung für kubectl einrichten76
2.3 Eine erste Anwendung in Kubernetes ausführen77
2.3.1 Die Node.js-Anwendung bereitstellen78
2.3.2 Auf die Webanwendung zugreifen81
2.3.3 Die logischen Bestandteile des Systems82
2.3.4 Anwendungen horizontal skalieren84
2.3.5 Auf welchen Knoten läuft die Anwendung?87
2.3.6 Das Kubernetes-Dashboard88
2.4 Zusammenfassung89
Teil II: Grundlagen91
3 Pods: Container in Kubernetes ausführen93
3.1 Einführung in Pods93
3.1.1 Wozu benötigen wir Pods?94
3.1.2 Grundlagen von Pods95
3.1.3 Container auf Pods verteilen96
3.2 Pods aus YAML- und JSON-Deskriptoren erstellen99
3.2.1 Den YAML-Deskriptor eines bestehenden Pods untersuchen99
3.2.2 Einen einfachen YAML-Deskriptor für einen Pod schreiben101
3.2.3 Einen Pod mit kubectl create erstellen103
3.2.4 Anwendungsprotokolle anzeigen104
3.2.5 Anforderungen an den Pod senden105
3.3 Pods mithilfe von Labels ordnen106
3.3.1 Einführung in Labels107
3.3.2 Labels beim Erstellen eines Pods angeben108
3.3.3 Labels vorhandener Pods ändern109
3.4 Eine Auswahl der Pods mithilfe von Labelselektoren auflisten110
3.4.1 Pods anhand eines Labelselektors auflisten110
3.4.2 Labelselektoren mit mehreren Bedingungen112
3.5 Die Podzuweisung mithilfe von Labels und Selektoren einschränken112
3.5.1 Labels zur Klassifizierung von Arbeitsknoten113
3.5.2 Pods bestimmten Knoten zuweisen114
3.5.3 Zuweisung zu einem einzelnen Knoten114
3.6 Pods mit Anmerkungen versehen115
3.6.1 Die Anmerkungen zu einem Objekt einsehen115
3.6.2 Anmerkungen hinzufügen und ändern116
3.7 Ressourcen mithilfe von Namespaces gruppieren116
3.7.1 Der Bedarf für Namespaces117
3.7.2 Andere Namespaces und die zugehörigen Pods finden117
3.7.3 Namespaces erstellen118
3.7.4 Objekte in anderen Namespaces verwalten119
3.7.5 Die Trennung der Namespaces120
3.8 Pods stoppen und entfernen120
3.8.1 Pods unter Angabe des Namens löschen120
3.8.2 Pods mithilfe von Labelselektoren löschen121
3.8.3 Pods durch Entfernen eines ganzen Namespaces löschen121
3.8.4 Alle Pods in einem Namespace löschen und den Namespace erhalten122
3.8.5 (Fast) alle Ressourcen in einem Namespace löschen122
3.9 Zusammenfassung123
4 Replikationscontroller & Co.: Verwaltete Pods bereitstellen125
4.1 Pods funktionsfähig halten126
4.1.1 Aktivitätssonden126
4.1.2 HTTP-Aktivitätssonden erstellen127
4.1.3 Eine Aktivitätssonde in Aktion128
4.1.4 Weitere Eigenschaften der Aktivitätssonde festlegen129
4.1.5 Wirkungsvolle Aktivitätssonden erstellen130
4.2 Replikationscontroller132
4.2.1 Die Funktionsweise von Replikationscontrollern133
4.2.2 Einen Replikationscontroller erstellen135
4.2.3 Der Replikationscontroller in Aktion136
4.2.4 Pods in den Gültigkeitsbereich eines Replikationscontrollers bringen und daraus entfernen141
4.2.5 Das Pod-Template ändern144
4.2.6 Pods horizontal skalieren145
4.2.7 Einen Replikationscontroller löschen147
4.3 Replikationssätze anstelle von Replikationscontrollern verwenden148
4.3.1 Replikationssätze und Replikationscontroller im Vergleich148
4.3.2 Einen Replikationssatz definieren149
4.3.3 Einen Replikationssatz erstellen und untersuchen150
4.3.4 Die ausdrucksstärkeren Labelselektoren des Replikationssatzes151
4.3.5 Zusammenfassung: Replikationssätze152
4.4 Daemonsets zur Ausführung einer Instanz eines Pods auf jedem Knoten152
4.4.1 Einen Pod auf allen Knoten ausführen152
4.4.2 Einen Pod nur auf einigen Knoten ausführen153
4.5 Pods für endliche Aufgaben156
4.5.1 Jobs157
4.5.2 Einen Job definieren158
4.5.3 Ein Job in Aktion158
4.5.4 Mehrere Podinstanzen in einem Job ausführen159
4.5.5 Die Zeit zum Abschließen eines Job-Pods begrenzen160
4.6 Jobs regelmäßig oder zu einem späteren Zeitpunkt ausführen161
4.6.1 Einen Cron-Job erstellen161
4.6.2 Die Ausführung geplanter Jobs162
4.7 Zusammenfassung163
5 Dienste: Pods finden und mit ihnen kommunizieren165
5.1 Dienste166
5.1.1 Dienste erstellen167
5.1.2 Dienste finden173
5.2 Verbindungen zu Diensten außerhalb des Clusters177
5.2.1 Dienstendpunkte177
5.2.2 Manuell eingerichtete Dienstendpunkte178
5.2.3 Einen Alias für einen externen Dienst erstellen180
5.3 Dienste für externe Clients verfügbar machen181
5.3.1 Einen NodePort-Dienst verwenden181
5.3.2 Einen Dienst über einen externen Load Balancer verfügbar machen185
5.3.3 Besondere Eigenschaften von externen Verbindungen187
5.4 Dienste über eine Ingress-Ressource extern verfügbar machen189
5.4.1 Eine Ingress-Ressource erstellen191
5.4.2 Über den Ingress auf den Dienst zugreifen192
5.4.3 Mehrere Dienste über denselben Domänennamen verfügbar machen193
5.4.4 Einen Ingress für TLS-Datenverkehr einrichten194
5.5 Die Bereitschaft eines Pods zur Annahme von Verbindungen signalisieren196
5.5.1 Bereitschaftssonden197
5.5.2 Einem Pod eine Bereitschaftssonde hinzufügen198
5.5.3 Bereitschaftssonden in der Praxis200
5.6 Headless-Dienste zur Ermittlung einzelner Pods202
5.6.1 Einen headless-Dienst erstellen202
5.6.2 Pods über DNS finden203
5.6.3 Alle Pods finden – auch diejenigen, die nicht bereit sind204
5.7 Fehlerbehebung bei Diensten205
5.8 Zusammenfassung206
6 Volumes: Festplattenspeicher zu Containern hinzufügen207
6.1 Volumes208
6.1.1 Ein Beispiel208
6.1.2 Arten von Volumes210
6.2 Gemeinsame Datennutzung durch die Container211
6.2.1 emptyDir-Volumes211
6.2.2 Ein Git-Repository als Ausgangspunkt für ein Volume verwenden214
6.3 Zugriff auf Dateien im Dateisystem des Arbeitsknotens217
6.3.1 HostPath-Volumes218
6.3.2 Systempods mit hostPath-Volumes218
6.4 Dauerhafte Speicherung220
6.4.1 Eine GCE Persistent Disk in einem Pod-Volume220
6.4.2 Andere Arten von Volumes mit zugrunde liegendem persistenten Speicher223
6.5 Pods von der zugrunde liegenden Speichertechnologie entkoppeln225
6.5.1 Persistente Volumes und Claims225
6.5.2 Ein persistentes Volume erstellen226
6.5.3 Mit einem Claim ein persistentes Volume beanspruchen228
6.5.4 Einen Claim in einem Pod verwenden230
6.5.5 Vorteile der Verwendung von persistenten Volumes und Claims231
6.5.6 Persistente Volumes wiederverwenden232
6.6 Persistente Volumes dynamisch bereitstellen234
6.6.1 Die verfügbaren Speichertypen mit Speicherklassen definieren234
6.6.2 Die Speicherklasse in einem Claim angeben235
6.6.3 Dynamische Bereitstellung ohne Angabe einer Speicherklasse237
6.7 Zusammenfassung240
7 Konfigurationszuordnungen und Secrets: Anwendungen konfigurieren243
7.1 Konfiguration von Anwendungen im Allgemeinen243
7.2 Befehlszeilenargumente an Container übergeben245
7.2.1 Den Befehl und die Argumente in Docker definieren245
7.2.2 Den Befehl und die Argumente in Kubernetes überschreiben247
7.3 Umgebungsvariablen für einen Container einrichten249
7.3.1 Eine Umgebungsvariable in einer Containerdefinition festlegen250
7.3.2 Im Wert einer Variablen auf andere Umgebungsvariablen verweisen250
7.3.3 Die Nachteile hartkodierter Umgebungsvariablen251
7.4 Die Konfiguration mit einer Konfigurationszuordnung entkoppeln251
7.4.1 Einführung in Konfigurationszuordnungen251
7.4.2 Eine Konfigurationszuordnung erstellen253
7.4.3 Einen Konfigurationseintrag als Umgebungsvariable an einen Container übergeben256
7.4.4 Alle Einträge einer Konfigurationszuordnung auf einmal als Umgebungsvariablen übergeben257
7.4.5 Einen Konfigurationseintrag als Befehlszeilenargument übergeben258
7.4.6 Konfigurationsdateien mithilfe eines configMap-Volumes verfügbar machen259
7.4.7 Die Konfiguration einer Anwendung ohne Neustart ändern265
7.5 Sensible Daten mithilfe von Geheimnissen an Container übergeben267
7.5.1 Einführung in Geheimnisse268
7.5.2 Das Geheimnis default-token268
7.5.3 Ein Geheimnis erstellen270
7.5.4 Unterschiede zwischen Konfigurationszuordnungen und Geheimnissen271
7.5.5 Das Geheimnis in einem Pod verwenden273
7.5.6 Geheimnisse zum Abrufen von Images277
7.6 Zusammenfassung278
8 Von Anwendungen aus auf Podmetadaten und andere Ressourcen zugreifen279
8.1 Metadaten über die Downward-API übergeben279
8.1.1 Die verwendbaren Metadaten280
8.1.2 Metadaten über Umgebungsvariablen verfügbar machen281
8.1.3 Metadaten über Dateien in einem downwardAPI-Volume übergeben284
8.2 Kommunikation mit dem Kubernetes-API-Server287
8.2.1 Die REST-API von Kubernetes288
8.2.2 Von einem Pod aus mit dem API-Server kommunizieren292
8.2.3 Botschaftercontainer zur Vereinfachung der Kommunikation mit dem API-Server298
8.2.4 Clientbibliotheken zur Kommunikation mit dem API-Server300
8.3 Zusammenfassung303
9 Deployments: Anwendungen deklarativ aktualisieren305
9.1 Anwendungen in Pods aktualisieren306
9.1.1 Alte Pods löschen und anschließend durch neue ersetzen307
9.1.2 Neue Pods starten und danach die alten löschen307
9.2 Automatische schrittweise Aktualisierung mit einem Replikationscontroller309
9.2.1 Die ursprüngliche Version der Anwendung ausführen309
9.2.2 Die schrittweise Aktualisierung mit kubectl durchführen311
9.2.3 Warum ist kubectl rolling-update veraltet?315
9.3 Deployments zur deklarativen Verwaltung von Anwendungen317
9.3.1 Ein Deployment erstellen317
9.3.2 Ein Deployment aktualisieren320
9.3.3 Eine Bereitstellung zurücknehmen324
9.3.4 Die Rolloutrate festlegen327
9.3.5 Den Rolloutvorgang anhalten329
9.3.6 Das Rollout fehlerhafter Versionen verhindern331
9.4 Zusammenfassung336
10 StatefulSets: Replizierte statusbehaftete Anwendungen bereitstellen337
10.1 Statusbehaftete Pods replizieren337
10.1.1 Mehrere Replikate mit jeweils eigenem Speicher ausführen338
10.1.2 Eine unveränderliche Identität für jeden Pod bereitstellen339
10.2 Statussätze341
10.2.1 Statussätze und Replikationssätze im Vergleich341
10.2.2 Unveränderliche Netzwerkidentität342
10.2.3 Eigenen beständigen Speicher für jede Podinstanz zuweisen344
10.2.4 Garantien von Statussätzen346
10.3 Statussätze nutzen347
10.3.1 Die Anwendung und das Containerimage erstellen347
10.3.2 Die Anwendung mithilfe eines Statussatzes bereitstellen348
10.3.3 Die Pods untersuchen353
10.4 Peers im Statussatz finden357
10.4.1 Die Peer-Ermittlung über DNS einrichten359
10.4.2 Einen Statussatz aktualisieren360
10.4.3 Den Clusterdatenspeicher ausprobieren361
10.5 Umgang mit Knotenausfällen362
10.5.1 Die Trennung eines Knotens vom Netzwerk simulieren362
10.5.2 Den Pod manuell löschen364
10.6 Zusammenfassung366
Teil III: Fortgeschrittene Themen367
11 Interne Mechanismen von Kubernetes369
11.1 Die Architektur369
11.1.1 Die verteilte Natur der Kubernetes-Komponenten370
11.1.2 Verwendung von etcd373
11.1.3 Aufgaben des API-Servers376
11.1.4 Benachrichtigungen des API-Servers über Ressourcenänderungen378
11.1.5 Der Scheduler380
11.1.6 Die Controller im Controller-Manager382
11.1.7 Die Rolle des Kubelets387
11.1.8 Die Rolle des Kubernetes-Dienstproxys388
11.1.9 Kubernetes-Add-ons389
11.1.10 Zusammenfassung391
11.2 Kooperation der Controller391
11.2.1 Die betroffenen Komponenten391
11.2.2 Die Abfolge der Ereignisse392
11.2.3 Clusterereignisse beobachten394
11.3 Laufende Pods395
11.4 Das Podnetzwerk396
11.4.1 Anforderungen an das Netzwerk396
11.4.2 Funktionsweise des Netzwerks398
11.4.3 CNI400
11.5 Implementierung von Diensten400
11.5.1 Der Kube-Proxy400
11.5.2 Iptables-Regeln401
11.6 Cluster mit hoher Verfügbarkeit403
11.6.1 Anwendungen hochverfügbar machen403
11.6.2 Die Komponenten der Kubernetes-Steuerebene hochverfügbar machen404
11.7 Zusammenfassung407
12 Sicherheit des Kubernetes-API-Servers409
12.1 Authentifizierung409
12.1.1 Benutzer und Gruppen410
12.1.2 Dienstkonten411
12.1.3 Dienstkonten erstellen412
12.1.4 Ein Dienstkonto mit einem Pod verknüpfen414
12.2 Rollengestützte Zugriffssteuerung416
12.2.1 Das RBAC-Autorisierungs-Plug-in416
12.2.2 RBAC-Ressourcen418
12.2.3 Rollen und Rollenbindungen421
12.2.4 Clusterrollen und Clusterrollenbindungen425
12.2.5 Standardclusterrollen und -clusterrollenbindungen434
12.2.6 Berechtigungen bedachtsam gewähren436
12.3 Zusammenfassung437
13 Sicherheit der Clusterknoten und des Netzwerks439
13.1 Die Namespaces des Hostknotens in einem Pod verwenden439
13.1.1 Den Netzwerknamespace des Knotens in einem Pod verwenden440
13.1.2 Bindung an einen Hostport ohne Verwendung des Host-Netzwerknamespace441
13.1.3 Den PID- und den IPC-Namespace des Knotens verwenden443
13.2 Den Sicherheitskontext eines Containers einrichten444
13.2.1 Einen Container unter einer bestimmten Benutzer-ID ausführen445
13.2.2 Die Ausführung eines Containers als root verhindern446
13.2.3 Pods im privilegierten Modus ausführen447
13.2.4 Einem Container einzelne Kernelfähigkeiten hinzufügen448
13.2.5 Fähigkeiten von einem Container entfernen450
13.2.6 Prozesse am Schreiben im Dateisystem des Containers hindern451
13.2.7 Gemeinsame Nutzung von Volumes durch Container mit verschiedenen Benutzer-IDs452
13.3 Die Bearbeitung der Sicherheitsmerkmale in einem Pod einschränken454
13.3.1 Podsicherheitsrichtlinien454
13.3.2 Die Richtlinien runAsUser, fsGroup und supplementalGroups457
13.3.3 Zulässige, unzulässige und Standardfähigkeiten festlegen459
13.3.4 Die verwendbaren Arten von Volumes einschränken460
13.3.5 Benutzern und Gruppen unterschiedliche Podsicherheitsrichtlinien zuweisen461
13.4 Das Podnetzwerk isolieren464
13.4.1 Die Netzwerkisolierung in einem Namespace aktivieren465
13.4.2 Einzelnen Pods im Namespace die Verbindung zu einem Serverpod erlauben465
13.4.3 Das Netzwerk zwischen Kubernetes-Namespaces isolieren466
13.4.4 Verwendung der CIDR-Schreibweise zur Isolierung468
13.4.5 Den ausgehenden Datenverkehr von Pods einschränken468
13.5 Zusammenfassung469
14 Die Computerressourcen eines Pods verwalten471
14.1 Ressourcen für die Container eines Pods anfordern471
14.1.1 Pods mit Ressourcenanforderungen erstellen472
14.1.2 Einfluss der Ressourcenanforderungen auf die Zuteilung zu Knoten473
14.1.3 Der Einfluss der CPU-Anforderungen auf die CPU-Zeitzuteilung478
14.1.4 Benutzerdefinierte Ressourcen definieren und anfordern478
14.2 Die verfügbaren Ressourcen für einen Container einschränken479
14.2.1 Harte Grenzwerte für die von einem Container verwendeten Ressourcen festlegen479
14.2.2 Überschreiten der Grenzwerte481
14.2.3 Grenzwerte aus der Sicht der Anwendungen in den Containern482
14.3 QoS-Klassen für Pods484
14.3.1 Die QoS-Klasse eines Pods festlegen484
14.3.2 Auswahl des zu beendenden Prozesses bei zu wenig Speicher487
14.4 Standardanforderungen und -grenzwerte für die Pods in einem Namespace festlegen488
14.4.1 Der Grenzwertbereich489
14.4.2 Einen Grenzwertbereich erstellen490
14.4.3 Die Grenzwerte durchsetzen491
14.4.4 Standardanforderungen und -grenzwerte anwenden492
14.5 Die in einem Namespace insgesamt verfügbaren Ressourcen beschränken493
14.5.1 Ressourcenkontingente493
14.5.2 Kontingente für persistenten Speicher festlegen495
14.5.3 Die Höchstzahl der Objekte in einem Namespace beschränken496
14.5.4 Kontingente für einzelne Podstatus und QoS-Klassen festlegen497
14.6 Die Ressourcennutzung der Pods überwachen498
14.6.1 Die tatsächliche Ressourcennutzung erfassen498
14.6.2 Verlaufsdaten des Ressourcenverbrauchs speichern und analysieren500
14.7 Zusammenfassung504
15 Automatische Skalierung von Pods und Clusterknoten505
15.1 Automatische horizontale Podskalierung506
15.1.1 Der Vorgang der automatischen Skalierung506
15.1.2 Skalierung auf der Grundlage der CPU-Nutzung509
15.1.3 Skalierung auf der Grundlage der Speichernutzung516
15.1.4 Skalierung auf der Grundlage anderer Messgrößen516
15.1.5 Geeignete Messgrößen für die automatische Skalierung auswählen518
15.1.6 Herunterskalieren auf null Replikate519
15.2 Automatische vertikale Podskalierung519
15.2.1 Ressourcenanforderungen automatisch einrichten519
15.2.2 Ressourcenanforderungen von laufenden Pods ändern520
15.3 Horizontale Skalierung von Clusterknoten520
15.3.1 Der Cluster-Autoskalierer520
15.3.2 Den Cluster-Autoskalierer aktivieren522
15.3.3 Die Unterbrechung von Diensten beim Herunterskalieren des Clusters minimieren523
15.4 Zusammenfassung525
16 Erweiterte Planung527
16.1 Pods mithilfe von Mängeln und Tolerierungen von bestimmten Knoten fernhalten527
16.1.1 Mängel und Tolerierungen528
16.1.2 Einem Knoten benutzerdefinierte Mängel hinzufügen530
16.1.3 Tolerierungen zu Pods hinzufügen530
16.1.4 Verwendungszwecke für Mängel und Tolerierungen531
16.2 Knotenaffinität532
16.2.1 Feste Knotenaffinitätsregeln aufstellen533
16.2.2 Knotenprioritäten bei der Zuteilung eines Pods535
16.3 Pods mit Affinitäts- und Antiaffinitätsregeln auf denselben Knoten unter­bringen538
16.3.1 Podaffinitätsregeln zur Bereitstellung von Pods auf demselben Knoten539
16.3.2 Pods im selben Schaltschrank, in derselben Verfügbarkeitszone oder derselben geografischen Region bereitstellen541
16.3.3 Präferenzen statt fester Regeln für die Podaffinität angeben543
16.3.4 Pods mit Antiaffinitätsregeln voneinander getrennt halten544
16.4 Zusammenfassung546
17 Best Practices für die Anwendungsentwicklung549
17.1 Das Gesamtbild549
17.2 Der Lebenszyklus eines Pods551
17.2.1 Beendigung und Verlegung von Anwendungen551
17.2.2 Tote oder teilweise tote Pods neu bereitstellen554
17.2.3 Pods in einer bestimmten Reihenfolge starten555
17.2.4 Lebenszyklushooks557
17.2.5 Pods herunterfahren561
17.3 Die ordnungsgemäße Verarbeitung aller Clientanforderungen sicherstellen565
17.3.1 Unterbrechungen von Clientverbindungen beim Hochfahren eines Pods verhindern565
17.3.2 Unterbrechungen von Clientverbindungen beim Herunterfahren eines Pods verhindern565
17.4 Einfache Ausführung und Handhabung von Anwendungen in Kubernetes570
17.4.1 Einfach zu handhabende Containerimages erstellen570
17.4.2 Images sauber kennzeichnen571
17.4.3 Mehrdimensionale statt eindimensionaler Labels571
17.4.4 Ressourcen mit Anmerkungen beschreiben572
17.4.5 Gründe für die Beendigung eines Prozesses angeben572
17.4.6 Anwendungsprotokolle574
17.5 Empfohlene Vorgehensweisen für Entwicklung und Tests576
17.5.1 Anwendungen während der Entwicklung außerhalb von Kubernetes ausführen576
17.5.2 Minikube für die Entwicklung577
17.5.3 Versionssteuerung und Manifeste zur automatischen Bereitstellung von Ressourcen579
17.5.4 Ksonnet als Alternative zu YAML- und JSON-Manifesten579
17.5.5 Continuous Integration und Continuous Delivery (CI/CD)580
17.6 Zusammenfassung581
18 Kubernetes erweitern583
18.1 Eigene API-Objekte definieren583
18.1.1 Eigene Ressourcendefinitionen584
18.1.2 Benutzerdefinierte Ressourcen mit benutzerdefinierten Controllern automatisieren588
18.1.3 Benutzerdefinierte Objekte validieren592
18.1.4 Einen benutzerdefinierten API-Server für benutzerdefinierte Objekte bereitstellen592
18.2 Kubernetes mit dem Kubernetes-Dienstkatalog erweitern594
18.2.1 Der Dienstkatalog595
18.2.2 Der API-Server des Dienstkatalogs und der Controller-Manager596
18.2.3 Dienstbroker und die API OpenServiceBroker597
18.2.4 Dienste bereitstellen und nutzen598
18.2.5 Aufheben der Bindung und der Bereitstellung601
18.2.6 Vorteile des Dienstkatalogs601
18.3 Plattformen auf der Grundlage von Kubernetes602
18.3.1 Die Containerplattform Red Hat OpenShift602
18.3.2 Deis Workflow und Helm605
18.4 Zusammenfassung608
Anhang A: Verwendung von kubectl für mehrere Cluster609
A.1 Umschalten zwischen Minikube und Google Kubernetes Engine609
A.1.1 Umschalten zu Minikube609
A.1.2 Umschalten zu GKE609
A.2 Verwendung von kubectl für mehrere Cluster oder Namespaces610
A.2.1 Den Speicherort der Konfigurationsdatei festlegen610
A.2.2 Der Inhalt der Konfigurationsdatei610
A.2.3 Konfigurationseinträge auflisten, hinzufügen und ändern611
A.2.4 Verwendung von kubectl mit verschiedenen Clustern, Benutzern und Kontexten613
A.2.5 Umschalten zwischen Kontexten613
A.2.6 Kontexte und Cluster auflisten614
A.2.7 Kontexte und Cluster löschen614
Anhang B: Einen Cluster mit mehreren Knoten mit kubeadm erstellen615
B.1 Das Betriebssystem und die erforderlichen Pakete einrichten615
B.1.1 Die virtuelle Maschine erstellen615
B.1.2 Den Netzwerkadapter für die VM einrichten616
B.1.3 Das Betriebssystem installieren617
B.1.4 Docker und Kubernetes installieren620
B.1.5 Die VM klonen621
B.2 Den Master mit kubeadm konfigurieren623
B.2.1 Ausführung der Komponenten durch kubeadm624
B.3 Arbeitsknoten mit kubeadm einrichten625
B.3.1 Das Containernetzwerk einrichten626
B.4 Vom lokalen Computer auf den Cluster zugreifen627
Anhang C: Andere Containerlaufzeitumgebungen verwenden629
C.1 Docker durch rkt ersetzen629
C.1.1 Kubernetes zur Verwendung von rkt einrichten629
C.1.2 rkt in Minikube ausprobieren630
C.2 Andere Containerlaufzeiten über die CRI verwenden632
C.2.1 CRI-O632
C.2.2 Anwendungen in VMs statt in Containern ausführen632
Anhang D: Clusterverbund633
D.1 Der Kubernetes-Clusterverbund633
D.2 Die Architektur634
D.3 Verbund-API-Objekte635
D.3.1 Verbundversionen der Kubernetes-Ressourcen635
D.3.2 Funktionsweise von Verbundressourcen636
Anhang E: Kubernetes-Ressourcen in diesem Buch639
Index643

Weitere E-Books zum Thema: Informatik - Algorithmen - Softwaresysteme

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Softwaretechnik

E-Book Softwaretechnik
Format: PDF

Software-Projekte geraten oft in Schwierigkeiten: Zeit und Budget werden überschritten; das Projekt tritt auf der Stelle; im schlimmsten Fall wird es ohne Ergebnis abgebrochen. Manche…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Software Engineering

E-Book Software Engineering
Architektur-Design und Prozessorientierung Format: PDF

Das Lehrbuch behandelt alle Aspekte der Software-Entwicklung, besonders aber Methoden und Richtlinien zur Herstellung großer und qualitativ hochwertiger Softwareprodukte. Es vermittelt das zur…

Weitere Zeitschriften

Archiv und Wirtschaft

Archiv und Wirtschaft

"Archiv und Wirtschaft" ist die viermal jährlich erscheinende Verbandszeitschrift der Vereinigung der Wirtschaftsarchivarinnen und Wirtschaftsarchivare e. V. (VdW), in der seit 1967 rund 2.500 ...

Augenblick mal

Augenblick mal

Die Zeitschrift mit den guten Nachrichten "Augenblick mal" ist eine Zeitschrift, die in aktuellen Berichten, Interviews und Reportagen die biblische Botschaft und den christlichen Glauben ...

FREIE WERKSTATT

FREIE WERKSTATT

Die Fachzeitschrift FREIE WERKSTATT berichtet seit der ersten Ausgaben 1994 über die Entwicklungen des Independent Aftermarkets (IAM). Hauptzielgruppe sind Inhaberinnen und Inhaber, Kfz-Meisterinnen ...

Correo

Correo

 La Revista de Bayer CropScience para la Agricultura ModernaPflanzenschutzmagazin für den Landwirt, landwirtschaftlichen Berater, Händler und am Thema Interessierten mit umfassender ...

ea evangelische aspekte

ea evangelische aspekte

evangelische Beiträge zum Leben in Kirche und Gesellschaft Die Evangelische Akademikerschaft in Deutschland ist Herausgeberin der Zeitschrift evangelische aspekte Sie erscheint viermal im Jahr. In ...

rfe-Elektrohändler

rfe-Elektrohändler

rfe-Elektrohändler ist die Fachzeitschrift für die CE- und Hausgeräte-Branche. Wichtige Themen sind: Aktuelle Entwicklungen in beiden Branchen, Waren- und Verkaufskunde, Reportagen über ...