Book description
Cloud-Experten John Arundel und Justin Domingus zeigen Ihnen in diesem pragmatischen Buch, was Kubernetes kann, welche Tools und Frameworks Ihnen zur Verfügung stehen und wie Sie in der Cloud eine Anwendung mit Kubernetes entwickeln und deployen.
Erfahren Sie alles über das Ökosystem von Kubernetes und lernen Sie erprobte Lösungen für die tagtäglichen Probleme kennen. Bauen Sie Schritt für Schritt eine Cloud-native Beispielanwendung und die zugehörige Infrastruktur auf, zusammen mit einer Entwicklungsumgebung und Continuous-Development-Pipeline, die Sie für Ihre eigenen Anwendungen nutzen können.
Table of contents
- Cover
- Titel
- Impressum
- Inhaltsverzeichnis
- Vorwort
- Einleitung
- Danksagung
-
1 Revolution in der Cloud
- 1.1 Die Entstehung der Cloud
- 1.1.1 Zeit einkaufen
- 1.1.2 Infrastructure as a Service
- 1.2 Der Aufstieg von DevOps
- 1.2.1 Keiner versteht DevOps
- 1.2.2 Der Geschäftsvorteil
- 1.2.3 Infrastruktur als Code
- 1.2.4 Gemeinsames Lernen
- 1.3 Das Aufkommen von Containern
- 1.3.1 State of the Art
- 1.3.2 Innerhalb der Box denken
- 1.3.3 Software in Containern verpacken
- 1.3.4 Plug-and-Play-Anwendungen
- 1.4 Das Container-Orchester dirigieren
- 1.5 Kubernetes
- 1.5.1 Von Borg zu Kubernetes
- 1.5.2 Was macht Kubernetes so wertvoll?
- 1.5.3 Wird Kubernetes wieder verschwinden?
- 1.5.4 Kubernetes kann nicht alles
- 1.6 Cloud Native
- 1.7 Die Zukunft von Operations
- 1.7.1 Verteiltes DevOps
- 1.7.2 Manches wird zentralisiert bleiben
- 1.7.3 Developer Productivity Engineering
- 1.7.4 Sie sind die Zukunft
- 1.8 Zusammenfassung
-
2 Erste Schritte mit Kubernetes
- 2.1 Starten Sie Ihren ersten Container
- 2.1.1 Docker Desktop installieren
- 2.1.2 Was ist Docker?
- 2.1.3 Ein Container-Image starten
- 2.2 Die Demo-Anwendung
- 2.2.1 Den Quellcode anschauen
- 2.2.2 Go?
- 2.2.3 Wie die Demo-Anwendung funktioniert
- 2.3 Einen Container bauen
- 2.3.1 Dockerfiles verstehen
- 2.3.2 Minimale Container-Images
- 2.3.3 docker image build ausführen
- 2.3.4 Ihrem Image einen Namen geben
- 2.3.5 Port Forwarding
- 2.4 Container-Registries
- 2.4.1 Sich an der Registry authentifizieren
- 2.4.2 Ihr Image benennen und pushen
- 2.4.3 Ihr Image ausführen
- 2.5 Hallo Kubernetes
- 2.5.1 Die Demo-App starten
- 2.5.2 Wenn der Container nicht startet
- 2.6 Minikube
- 2.7 Zusammenfassung
-
3 Kubernetes-Installationen
- 3.1 Cluster-Architektur
- 3.1.1 Die Steuerungsebene
- 3.1.2 Komponenten auf den Knoten
- 3.1.3 Hochverfügbarkeit
- 3.2 Die Kosten eines selbst gehosteten Kubernetes
- 3.2.1 Es ist mehr, als Sie denken
- 3.2.2 Es geht nicht nur um das initiale Setup
- 3.2.3 Tools nehmen Ihnen nicht die ganze Arbeit ab
- 3.2.4 Kubernetes ist schwer
- 3.2.5 Administrativer Overhead
- 3.2.6 Beginnen Sie mit Managed Services
- 3.3 Managed Kubernetes Services
- 3.3.1 Google Kubernetes Engine (GKE)
- 3.3.2 Cluster Autoscaling
- 3.3.3 Amazon Elastic Container Service for Kubernetes (EKS)
- 3.3.4 Azure Kubernetes Service (AKS)
- 3.3.5 OpenShift
- 3.3.6 IBM Cloud Kubernetes Service
- 3.3.7 Heptio Kubernetes Subscription (HKS)
- 3.4 Turnkey-Kubernetes-Lösungen
- 3.4.1 Stackpoint
- 3.4.2 Containership Kubernetes Engine (CKE)
- 3.5 Kubernetes-Installer
- 3.5.1 kops
- 3.5.2 Kubespray
- 3.5.3 TK8
- 3.5.4 Kubernetes The Hard Way
- 3.5.5 kubeadm
- 3.5.6 Tarmak
- 3.5.7 Rancher Kubernetes Engine (RKE)
- 3.5.8 Puppet Kubernetes Module
- 3.5.9 Kubeformation
- 3.6 Kaufen oder bauen: Unsere Empfehlungen
- 3.6.1 Run Less Software
- 3.6.2 Nutzen Sie Managed Kubernetes, wenn Sie können
- 3.6.3 Aber was ist mit dem Vendor Lock-In?
- 3.6.4 Nutzen Sie Self-Hosting-Standard-Tools für Kubernetes, wenn Sie müssen
- 3.6.5 Wenn Ihre Auswahl begrenzt ist
- 3.6.6 Bare-Metal und On-Prem
- 3.7 Clusterless Container Services
- 3.7.1 Amazon Fargate
- 3.7.2 Azure Container Instances (ACI)
- 3.8 Zusammenfassung
-
4 Mit Kubernetes-Objekten arbeiten
- 4.1 Deployments
- 4.1.1 Supervising und Scheduling
- 4.1.2 Container neu starten
- 4.1.3 Deployments abfragen
- 4.2 Pods
- 4.3 ReplicaSets
- 4.4 Den gewünschten Status warten
- 4.5 Der Kubernetes-Scheduler
- 4.6 Ressourcen-Manifeste im YAML-Format
- 4.6.1 Ressourcen sind Daten
- 4.6.2 Deployment-Manifeste
- 4.6.3 kubectl apply verwenden
- 4.6.4 Service-Ressourcen
- 4.6.5 Das Cluster mit kubectl abfragen
- 4.6.6 Ressourcen noch leistungsfähiger machen
- 4.7 Helm: Ein Kubernetes-Paketmanager
- 4.7.1 Helm installieren
- 4.7.2 Einen Helm-Chart installieren
- 4.7.3 Charts, Repositories und Releases
- 4.7.4 Helm-Releases anzeigen
- 4.8 Zusammenfassung
-
5 Ressourcen managen
- 5.1 Ressourcen verstehen
- 5.1.1 Ressourcen-Einheiten
- 5.1.2 Ressourcen-Anforderungen
- 5.1.3 Ressourcen-Grenzen
- 5.1.4 Halten Sie Ihre Container klein
- 5.2 Den Lebenszyklus des Containers managen
- 5.2.1 Liveness-Probe
- 5.2.2 Verzögerung und Häufigkeit der Probe
- 5.2.3 Andere Arten von Proben
- 5.2.4 gRPC-Proben
- 5.2.5 Readiness-Proben
- 5.2.6 Dateibasierte Readiness-Proben
- 5.2.7 minReadySeconds
- 5.2.8 Pod Disruption Budgets
- 5.3 Namensräume verwenden
- 5.3.1 Mit Namensräumen arbeiten
- 5.3.2 Welchen Namensraum sollte ich verwenden?
- 5.3.3 Service-Adressen
- 5.3.4 Resource Quotas
- 5.3.5 Standards für Ressourcen-Anforderungen und -Grenzen
- 5.4 Die Kosten von Clustern optimieren
- 5.4.1 Deployments optimieren
- 5.4.2 Pods optimieren
- 5.4.3 Vertical Pod Autoscaler
- 5.4.4 Knoten optimieren
- 5.4.5 Storage optimieren
- 5.4.6 Ungenutzte Ressourcen aufräumen
- 5.4.7 Freie Kapazitäten prüfen
- 5.4.8 Reservierte Instanzen nutzen
- 5.4.9 Präemptive (Spot)-Instanzen verwenden
- 5.4.10 Sorgen Sie für eine ausgeglichene Verteilung Ihrer Workloads
- 5.5 Zusammenfassung
-
6 Cluster betreiben
- 6.1 Sizing und Skalieren des Clusters
- 6.1.1 Kapazitätsplanung
- 6.1.2 Knoten und Instanzen
- 6.1.3 Das Cluster skalieren
- 6.2 Konformitäts-Prüfungen
- 6.2.1 CNCF Certification
- 6.2.2 Konformitäts-Tests mit Sonobuoy
- 6.3 Validierung und Auditing
- 6.3.1 K8Guard
- 6.3.2 Copper
- 6.3.3 kube-bench
- 6.3.4 Kubernetes Audit Logging
- 6.4 Chaos Testing
- 6.4.1 Nur Produktion ist Produktion
- 6.4.2 chaoskube
- 6.4.3 kube-monkey
- 6.4.4 PowerfulSeal
- 6.5 Zusammenfassung
-
7 Power-Tools für Kubernetes
- 7.1 Die Arbeit mit kubectl
- 7.1.1 Shell-Aliasse
- 7.1.2 Kurze Flags verwenden
- 7.1.3 Ressourcen-Typen abkürzen
- 7.1.4 Autovervollständigen von kubectl-Befehlen
- 7.1.5 Hilfe erhalten
- 7.1.6 Hilfe zu Kubernetes-Ressourcen erhalten
- 7.1.7 Detaillertere Ausgaben nutzen
- 7.1.8 Mit JSON-Daten und jq arbeiten
- 7.1.9 Objekte beobachten
- 7.1.10 Objekte beschreiben
- 7.2 Mit Ressourcen arbeiten
- 7.2.1 Imperative kubectl-Befehle
- 7.2.2 Wann Sie keine imperativen Befehle verwenden sollten
- 7.2.3 Ressourcen-Manifeste generieren
- 7.2.4 Ressourcen exportieren
- 7.2.5 Ressourcen diffen
- 7.3 Mit Containern arbeiten
- 7.3.1 Die Logs eines Containers anzeigen
- 7.3.2 Sich mit einem Container verbinden
- 7.3.3 Kubernetes-Ressourcen mit kubespy beobachten
- 7.3.4 Einen Container-Port weiterleiten
- 7.3.5 Befehle in Containern ausführen
- 7.3.6 Container zur Fehlersuche ausführen
- 7.3.7 BusyBox-Befehle verwenden
- 7.3.8 BusyBox zu Ihren Containern hinzufügen
- 7.3.9 Programme auf einem Container installieren
- 7.3.10 Live Debugging mit kubesquash
- 7.4 Kontexte und Namensräume
- 7.4.1 kubectx und kubens
- 7.4.2 kube-ps1
- 7.5 Shells und Tools für Kubernetes
- 7.5.1 kube-shell
- 7.5.2 Click
- 7.5.3 kubed-sh
- 7.5.4 Stern
- 7.6 Bauen Sie Ihre eigenen Kubernetes-Tools
- 7.7 Zusammenfassung
-
8 Container ausführen
- 8.1 Container und Pods
- 8.1.1 Was ist ein Container?
- 8.1.2 Was gehört in einen Container?
- 8.1.3 Was gehört in einen Pod?
- 8.2 Container-Manifeste
- 8.2.1 Image-Bezeichner
- 8.2.2 Das Tag »latest«
- 8.2.3 Container-Digests
- 8.2.4 Basis-Image-Tags
- 8.2.5 Ports
- 8.2.6 Ressourcen-Anforderungen und -Grenzen
- 8.2.7 Image-Pull-Richtlinie
- 8.2.8 Umgebungsvariablen
- 8.3 Sicherheit von Containern
- 8.3.1 Container als Nicht-Root-Benutzer ausführen
- 8.3.2 Root-Container blockieren
- 8.3.3 Ein Read-Only-Dateisystem nutzen
- 8.3.4 Privilege Escalation deaktivieren
- 8.3.5 Capabilities
- 8.3.6 Pod Security Contexts
- 8.3.7 Pod Security Policies
- 8.3.8 Pod Service-Accounts
- 8.4 Volumes
- 8.4.1 emptyDir-Volumes
- 8.4.2 Persistente Volumes
- 8.5 Neustart-Richtlinien
- 8.6 Image Pull Secrets
- 8.7 Zusammenfassung
-
9 Pods managen
- 9.1 Labels
- 9.1.1 Was sind Labels?
- 9.1.2 Selektoren
- 9.1.3 Komplexere Selektoren
- 9.1.4 Andere Einsatzzwecke für Labels
- 9.1.5 Labels und Anmerkungen
- 9.2 Node Affinities
- 9.2.1 Hard Affinities
- 9.2.2 Soft Affinities
- 9.3 Pod Affinities und Anti-Affinities
- 9.3.1 Pods zusammenhalten
- 9.3.2 Pods auseinanderhalten
- 9.3.3 Soft Anti-Affinities
- 9.3.4 Wann Sie Pod Affinities verwenden
- 9.4 Taints und Tolerations
- 9.5 Pod-Controller
- 9.5.1 DaemonSets
- 9.5.2 StatefulSets
- 9.5.3 Jobs
- 9.5.4 Cronjobs
- 9.5.5 Horizontal Pod Autoscaler
- 9.5.6 PodPresets
- 9.5.7 Operatoren und Custom Resource Definitions (CRDs)
- 9.6 Ingress-Ressourcen
- 9.6.1 Ingress-Regeln
- 9.6.2 TLS Termination mit Ingress
- 9.6.3 Ingress-Controller
- 9.7 Istio
- 9.8 Envoy
- 9.9 Zusammenfassung
-
10 Konfiguration und Secrets
- 10.1 ConfigMaps
- 10.1.1 ConfigMaps erstellen
- 10.1.2 Umgebungsvariablen aus ConfigMaps setzen
- 10.1.3 Die gesamte Umgebung aus einer ConfigMap erstellen
- 10.1.4 Umgebungsvariablen in Argumenten für Befehle einsetzen
- 10.1.5 Konfigurationsdateien aus ConfigMaps erstellen
- 10.1.6 Pods bei einer Konfigurationsänderung aktualisieren
- 10.2 Kubernetes-Secrets
- 10.2.1 Secrets als Umgebungsvariablen verwenden
- 10.2.2 Secrets in Dateien schreiben
- 10.2.3 Secrets lesen
- 10.2.4 Zugriff auf Secrets
- 10.2.5 Encryption at Rest
- 10.2.6 Secrets behalten
- 10.3 Strategien zum Verwalten von Secrets
- 10.3.1 Secrets in der Versionsverwaltung verschlüsseln
- 10.3.2 Secrets remote ablegen
- 10.3.3 Ein dediziertes Secrets-Management-Tool einsetzen
- 10.3.4 Empfehlungen
- 10.4 Secrets mit Sops verschlüsseln
- 10.4.1 Einführung in Sops
- 10.4.2 Eine Datei mit Sops verschlüsseln
- 10.4.3 Ein KMS-Backend verwenden
- 10.5 Zusammenfassung
-
11 Sicherheit und Backups
- 11.1 Zugriffskontrolle und Berechtigungen
- 11.1.1 Den Zugriff vom Cluster abhängig machen
- 11.1.2 Role-Based Access Control (RBAC)
- 11.1.3 Rollen
- 11.1.4 Rollen mit Benutzern verbinden
- 11.1.5 Welche Rolle benötige ich?
- 11.1.6 Den Zugriff auf cluster-admin beschränken
- 11.1.7 Anwendungen und Deployment
- 11.1.8 Fehlersuche mit RBAC
- 11.2 Security Scanning
- 11.2.1 Clair
- 11.2.2 Aqua
- 11.2.3 Anchore Engine
- 11.3 Backups
- 11.3.1 Muss ich ein Backup von Kubernetes machen?
- 11.3.2 Backup von etcd
- 11.3.3 Backup des Ressourcen-Status
- 11.3.4 Backup des Cluster-Status
- 11.3.5 Große und kleine Katastrophen
- 11.3.6 Velero
- 11.4 Den Cluster-Status monitoren
- 11.4.1 kubectl
- 11.4.2 CPU- und Speicherauslastung
- 11.4.3 Konsole des Cloud-Providers
- 11.4.4 Kubernetes Dashboard
- 11.4.5 Weave Scope
- 11.4.6 kube-ops-view
- 11.4.7 node-problem-detector
- 11.5 Weitere Informationen
- 11.6 Zusammenfassung
-
12 Kubernetes-Anwendungen deployen
- 12.1 Manifeste mit Helm bauen
- 12.1.1 Was befindet sich in einem Helm-Chart?
- 12.1.2 Helm-Templates
- 12.1.3 Variablen interpolieren
- 12.1.4 Template-Werte mit Anführungszeichen versehen
- 12.1.5 Abhängigkeiten festlegen
- 12.2 Helm-Charts deployen
- 12.2.1 Variablen setzen
- 12.2.2 Werte in einem Helm-Release angeben
- 12.2.3 Eine Anwendung mit Helm aktualisieren
- 12.2.4 Zu früheren Versionen zurückrollen
- 12.2.5 Ein Helm-Chart-Repo erstellen
- 12.2.6 Helm-Chart-Secrets mit Sops managen
- 12.3 Mehrere Charts mit Helmfile managen
- 12.3.1 Was befindet sich in einem Helmfile?
- 12.3.2 Chart-Metadaten
- 12.3.3 Das Helmfile anwenden
- 12.4 Fortgeschrittene Tools zur Manifest-Verwaltung
- 12.4.1 ksonnet
- 12.4.2 Kapitan
- 12.4.3 kustomize
- 12.4.4 kompose
- 12.4.5 Ansible
- 12.4.6 kubeval
- 12.5 Zusammenfassung
-
13 Entwicklungs-Workflow
- 13.1 Entwicklungs-Tools
- 13.1.1 Skaffold
- 13.1.2 Draft
- 13.1.3 Telepresence
- 13.1.4 Knative
- 13.2 Deployment-Strategien
- 13.2.1 Rollierende Updates
- 13.2.2 Recreate
- 13.2.3 maxSurge und maxUnavailable
- 13.2.4 Blue/Green-Deployments
- 13.2.5 Rainbow-Deployments
- 13.2.6 Canary-Deployments
- 13.3 Migration mit Helm
- 13.3.1 Helm Hooks
- 13.3.2 Umgang mit fehlgeschlagenen Hooks
- 13.3.3 Andere Hooks
- 13.3.4 Hooks verketten
- 13.4 Zusammenfassung
-
14 Continuous Deployment in Kubernetes
- 14.1 Was ist Continuous Deployment?
- 14.2 Welches CD-Tool soll ich verwenden?
- 14.2.1 Jenkins
- 14.2.2 Drone
- 14.2.3 Google Cloud Build
- 14.2.4 Concourse
- 14.2.5 Spinnaker
- 14.2.6 GitLab CI
- 14.2.7 Codefresh
- 14.2.8 Azure Pipelines
- 14.3 CD-Komponenten
- 14.3.1 Docker Hub
- 14.3.2 Gitkube
- 14.3.3 Flux
- 14.3.4 Keel
- 14.4 Eine CD-Pipeline mit Cloud Build
- 14.4.1 Google Cloud und GKE einrichten
- 14.4.2 Das Demo-Repository forken
- 14.4.3 Erste Schritte in Cloud Build
- 14.4.4 Den Test-Container bauen
- 14.4.5 Die Tests ausführen
- 14.4.6 Den Anwendungs-Container bauen
- 14.4.7 Die Kubernetes-Manifeste überprüfen
- 14.4.8 Das Image veröffentlichen
- 14.4.9 Git-SHA-Tags
- 14.4.10 Den ersten Build-Trigger erstellen
- 14.4.11 Den Trigger testen
- 14.4.12 Von einer CD-Pipeline deployen
- 14.4.13 Einen Deploy-Trigger erstellen
- 14.4.14 Die Build-Pipeline optimieren
- 14.4.15 Die Beispiel-Pipeline anpassen
- 14.5 Zusammenfassung
-
15 Observability und Monitoring
- 15.1 Was ist Observability?
- 15.1.1 Was ist Monitoring?
- 15.1.2 Black-Box Monitoring
- 15.1.3 Was heißt »Up«?
- 15.1.4 Logging
- 15.1.5 Metriken
- 15.1.6 Tracing
- 15.1.7 Observability
- 15.2 Die Observability-Pipeline
- 15.3 Monitoring in Kubernetes
- 15.3.1 Externe Black-Box Checks
- 15.3.2 Interne Health-Checks
- 15.4 Zusammenfassung
-
16 Metriken in Kubernetes
- 16.1 Was sind Metriken wirklich?
- 16.1.1 Zeitreihen-Daten
- 16.1.2 Zähler und Maße
- 16.1.3 Was können uns Metriken sagen?
- 16.2 Die Wahl guter Metriken
- 16.2.1 Services: Das RED-Muster
- 16.2.2 Ressourcen: Das USE-Muster
- 16.2.3 Business-Metriken
- 16.2.4 Kubernetes-Metriken
- 16.3 Metriken analysieren
- 16.3.1 Was ist an einem einfachen Durchschnitt falsch?
- 16.3.2 Mittelwert, Median und Ausreißer
- 16.3.3 Perzentile
- 16.3.4 Perzentile auf Metrikdaten anwenden
- 16.3.5 Meist wollen wir das Schlimmste wissen
- 16.3.6 Mehr als Perzentile
- 16.4 Metriken in Dashboards visualisieren
- 16.4.1 Ein Standard-Layout für alle Services verwenden
- 16.4.2 Einen Information Radiator mit Master Dashboards bauen
- 16.4.3 Dashboards mit Fehlerursachen
- 16.5 Alarme durch Metriken
- 16.5.1 Was ist falsch an Alarmen?
- 16.5.2 Bereitschaftsdienst sollte nicht die Hölle sein
- 16.5.3 Dringende, wichtige und umsetzbare Alarme
- 16.5.4 Dokumentieren Sie Warnungen und Alarme außerhalb der Bürozeiten und in der Nacht
- 16.6 Tools und Services für Metriken
- 16.6.1 Prometheus
- 16.6.2 Google Stackdriver
- 16.6.3 AWS Cloudwatch
- 16.6.4 Azure Monitor
- 16.6.5 Datadog
- 16.6.6 New Relic
- 16.7 Zusammenfassung
- 17 Nachwort
- Fußnoten
- Index
Product information
- Title: Cloud Native DevOps mit Kubernetes
- Author(s):
- Release date: September 2019
- Publisher(s): dpunkt
- ISBN: 9783864906985
You might also like
book
Kubernetes - A Complete DevOps Cookbook
Leverage Kubernetes and container architecture to successfully run production-ready workloads Key Features Implement Kubernetes to orchestrate …
book
Docker Praxiseinstieg
Docker-Images und -Container verwenden Container deployen und debuggen Einsatz von Tools: Docker Swarm, Kubernetes, Amazon EC2 …
book
Vom Monolithen zu Microservices
Bestehende Systeme erfolgreich in eine Microservices-Architektur umgestalten
book
DevOps with Kubernetes - Second Edition
Leverage the power of Kubernetes to build an efficient software delivery pipeline. Key Features Learn about …