Raus aus dem YAML-Chaos!

Individualisierte Kubernetes-Deployments mit Kustomize

Webinar // Cloud Native Computing Rheinland // 16. Juni 2020

Mail // Twitter

About Me

Eure Erfahrungen?

https://unsplash.com/photos/uBe2mknURG4

Agenda

YAMLs everywhere

Approaches

Fork & Rebase

Helm

Kustomize

What to use when?

Q&A

Deklarative Konfiguration

Ganz schön viel YAML

  • Typisches Deployment: Container inkl. Sidecar- und Init-Container, Umgebungsvariablen, Volumes, Health Checks, Ressource Requests/Limits, ...

  • Zusätzlich: ConfigMaps, Secrets, Service, Ingress, RBAC, Network Policy, ...

  • Microservices?

  • Umgebungen: Hier entstehen die Varianten!

Alle Umgebungen gleich?

https://unsplash.com/photos/KmKZV8pso-s

Realität erfordert Flexibilität

https://unsplash.com/photos/hG26UoUfU9s

Agenda

YAMLs everywhere

Approaches

Fork & Rebase

Helm

Kustomize

What to use when?

Q&A

Helm

De-facto Standard

Package-Manager: Auslieferung von Charts, Plug&Play-UX

Templates mit Parametern, basierend auf go:text/template

values.yaml als API

Alles ist ein Parameter?

90 Templates, >3000 LOY

https://unsplash.com/photos/W_ZYCEUapF0

Helm

Pro

  • Viele Community Charts: https://github.com/helm/charts

  • "Plug & Play"-Setups inkl. Dependencies

  • Austausch von Charts, values.yaml als API

  • Chart zur Bündelung aller YAML-Files einer Anwendung

Contra

  • Neue "Sprache"

  • Schwer lesbare Dateien

  • Mäßiger IDE-Support

  • Deklarativ? Zu viele Kontrollstrukturen

  • Das Chart unterstützt das Feature nicht, was ich brauche! Und nun? Fork?

Agenda

YAMLs everywhere

Approaches

Fork & Rebase

Helm

Kustomize

What to use when?

Q&A

Kustomize

Kustomize should expose and teach native k8s APIs, rather than hide them.
https://github.com/kubernetes-sigs/kustomize/blob/master/docs/glossary.md
... provides a new, purely declarative approach to configuration customization that adheres to and leverages the familiar and carefully designed Kubernetes API.
https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/
kustomize lets you customize raw, template-free YAML files for multiple purposes, leaving the original YAML untouched and usable as is.
https://github.com/kubernetes-sigs/kustomize

kustomize

  • Kein Paket-Manager: Leichtgewichtiges Tool zum Anpassen von K8s-YAML-Dateien. Verteilung von Anwendungspaketen ist nicht im Scope.

  • Keine Templates: Kustomize setzt auf eine Overlay-/Patch-Strategie

kustomize

kustomize

  • Kein Paket-Manager: Leichtgewichtiges Tool zum Anpassen von K8s-YAML-Dateien. Verteilung von Anwendungspaketen ist nicht im Scope.

  • Keine Templates: Kustomize setzt auf eine Overlay-/Patch-Strategie

  • Deklarativ: Jederzeit valide Kubernetes-YAML-Dateien ohne Platzhalter, volle IDE-Unterstützung inkl. Auto-Completion.

  • Praktische Features: Namespace, "Common-Label", ConfigMap/Secret-Änderungen

  • Flexibel und unabhängig: Das CLI-Tool kustomize rendert letztlich nur YAML-Output nach Stdout

    $ kustomize build ~/someApp/overlays/production | kubectl apply -f -

  • Integration: Seit kubectl v.1.14 integriert

    $ kubectl apply -k ~/someApp/overlays/production

Live-Demo

https://unsplash.com/photos/m1WZS5ye404

Kustomize

Pro

  • Gut lesbare Dateien, mehr Transparenz, einfachere Wartung

  • Voller IDE-Support

  • Praktische Features (z.B. ConfigMap-Generator)

  • Maximale Flexibilität durch Low-Level-Modifikationen (z.B. JSON6902 Patches)

Contra

  • Community-Arbeit passiert meist in Helm

  • Eigene Lösung für Verteilung und Umgang mit Rollouts notwendig

  • Anwender muss wissen, wie Konfigurationen der Anwendung funktionieren (Doku!)

  • Streit-Thema: Kein Support für die Übergabe von Argumenten zur Laufzeit

Helm & Kustomize


$ mkdir ./base  

$ helm template --values ./values.yaml stable/nginx-ingress \
  > ./base/manifests.yaml

$ cat < ./base/kustomization.yaml   
bases:   
— manifests.yaml    
EOF  

# create your overlays based on the rendered Helm chart
$ kubectl apply -k ./overlays/prod/
							

Von Community-Projekten profitieren

Wartbare Anpassungen mit Kustomize vornehmen

Agenda

YAMLs everywhere

Approaches

Fork & Rebase

Helm

Kustomize

What to use when?

Q&A

Empfehlungen

Disclaimer: Stark generalisiert und vereinfacht.
Lasst uns gerne eure Anwendungsfälle diskutieren!

Tool Use Cases
Helm
  • Externe Verteilung (außerhalb des Teams/Organisation)
  • Hohe Komplexität im Deployment, Abstraktion sinnvoll, Magie verstecken
Kustomize
  • Primär interne Nutzung
  • Geringe Komplexität, Abstraktion lohnt nicht
  • GitOps (z.B. Rollback durch Revert eines Commits)
Helm & Kustomize
  • Bestehende Helm-Charts patchen
Operators
  • Automatisierung von betrieblichen Aspekten
  • Komplexität i.d.R. innerhalb des Operators, Deployment dann sehr simpel

Agenda

YAMLs everywhere

Approaches

Fork & Rebase

Helm

Kustomize

What to use when?

Q&A