SlideShare a Scribd company logo
Reinhard Nägele
The Better Way to Deploy on Kubernetes
1
AMSTERDAM | MAY 8-9, 2018
2
Reinhard Nägele
•Senior IT Consultant at codecentric AG
•Kubernetes Helm Charts Maintainer
•@unguiculus
The Package Manager for Kubernetes
Compare
•Apt
•Yum
•Homebrew
•Chocolatey
•…
3
4
https://helm.sh
Terminology
•Chart

A Helm package. Bundles together a set of Kubernetes resource definitions
•Repository

Hosts a collection of charts on an HTTP server
•Release

An instance of a chart running in a Kubernetes cluster
5
Features
•Manage Kubernetes resources as a single unit
•Charts can be hosted in a repository
•Release history
•Go templating support
•Access to Kubernetes capabilities
•Lifecycle management with hooks
•Dependencies
•PGP support
•Plugin support
6
Helm Architecture
7
Helm Client Tiller
gRPC
K8s API Server
Helm CLI
8
helm init Set up Helm on the cluster
helm install/upgrade Install or upgrade a chart
helm get/status/list Find out information about running charts
helm search Search charts in a repository
helm create Create a new chart
helm template Render chart templates locally
Chart Directory Structure
9
Chart.yaml
name: redis
version: 1.0.4
appVersion: 4.0.2
description: Open source, advanced key-value store.
keywords:
- redis
- keyvalue
- database
home: http://redis.io/
icon: https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png
sources:
- https://github.com/bitnami/bitnami-docker-redis
maintainers:
- name: bitnami-bot
email: containers@bitnami.com
10
Charts Catalog
11
https://github.com/kubernetes/charts
https://hub.kubeapps.com/
Templating
•Standard Kubernetes YAML manifest files
•Parameterizable via Go template language
•Includes the Sprig template library with lots of additional functions
•Chart should provide default values in values.yaml
12
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
Templating — Flow Control
13
if/else/else if for creating conditional blocks
with to specify a scope
range which provides a “for each”-style loop
Templating — Built-in Objects
•Values
•Release (Release.Name, Release.Namespace, …)
•Chart (Chart.Name, Chart.Version, …)
•Files (Files.Get, Files.GetBytes)
•Capabilities (Capabilities.APIVersions, Capabilities.KubeVersion, …)
•Template (Template.Name, Template.BasePath)
14
Templating — Partials
15
{{- define "sample.labels" }}
app: {{ template "sample.name" . }}
component: server
{{- end }}
{{- define "MY_NAME" }}
# body of template here
{{- end }}
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ template "sample.fullname" . }}
labels:
{{ include "sample.labels" . | indent 4 }}
Dependencies
16
dependencies:
- name: apache
version: 1.2.3
repository: https://example.com/charts
- name: mysql
version: 3.2.1
repository: https://another.example.com/charts
$ helm dependency build demo-app
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "local" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "example" chart repository
...Successfully got an update from the "another" chart repository
Update Complete. Happy Helming!
Saving 2 charts
Downloading apache from repo https://example.com/charts
Downloading mysql from repo https://another.example.com/charts
requirements.yaml
Hooks
•Perform operations at strategic points in a release lifecycle
•Can be weighted for ordering
•Resources a hook creates are not tracked or managed as part of the release
17
‣ pre-install
‣ post-install
‣ pre-delete
‣ post-delete
‣ pre-upgrade
‣ post-upgrade
‣ pre-rollback
‣ post-rollback
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
annotations:
"helm.sh/hook": post-delete
"helm.sh/hook-delete-policy": hook-succeeded
spec:
…
Installing Charts
•helm install <chart>
•helm install <chart> --name <release>
•helm upgrade <release> <chart>
•helm upgrade <release> <chart> --install
18
$ helm upgrade proxy stable/traefik --install 
-f traefik-values.yaml 
--set dashboard.enabled=true 
--debug
Tests
19
•Sanity checks for chart releases
•Pod specification with test commands to run
•Triggered by test hook annotations
‣ helm.sh/hooks: test-success
‣ helm.sh/hooks: test-failure
apiVersion: v1
kind: Pod
metadata:
name: my-app-test
annotations:
"helm.sh/hook": test-success
spec:
containers:
- name: my-app-test
image: foo/my-app-test:42
...
Demo Time
20
https://github.com/unguiculus/hello-world
21
Thank you
Reinhard Nägele
https://github.com/unguiculus
@unguiculus
Slides licensed under a
Creative Commons Attribution-
NonCommercial-ShareAlike 4.0
International License.

More Related Content

What's hot (20)

PPTX
Intro to Helm for Kubernetes
Carlos E. Salazar
 
PDF
Kubernetes Basics
Eueung Mulyana
 
PDF
What Is Helm
AMELIAOLIVIA2
 
PDF
Kubernetes 101 - an Introduction to Containers, Kubernetes, and OpenShift
DevOps.com
 
PDF
Kubernetes Deployment Strategies
Abdennour TM
 
PDF
GitOps and ArgoCD
Omar Fathy
 
PDF
OpenShift-Technical-Overview.pdf
JuanSalinas593459
 
PPTX
Helm - Package manager in K8S
Piotr Perzyna
 
PDF
Helm - Package Manager for Kubernetes
Knoldus Inc.
 
PPTX
Red Hat Openshift Fundamentals.pptx
ssuser18b1c6
 
PDF
Helm intro
Haggai Philip Zagury
 
PDF
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Matt Butcher
 
PDF
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Edureka!
 
PDF
GitOps with ArgoCD
CloudOps2005
 
PDF
OpenShift 4, the smarter Kubernetes platform
Kangaroot
 
PDF
Introduction to Kubernetes Workshop
Bob Killen
 
PDF
Kubernetes
erialc_w
 
PDF
Helm - Application deployment management for Kubernetes
Alexei Ledenev
 
PDF
Terraform
Marcelo Serpa
 
PPTX
Introduction to kubernetes
Rishabh Indoria
 
Intro to Helm for Kubernetes
Carlos E. Salazar
 
Kubernetes Basics
Eueung Mulyana
 
What Is Helm
AMELIAOLIVIA2
 
Kubernetes 101 - an Introduction to Containers, Kubernetes, and OpenShift
DevOps.com
 
Kubernetes Deployment Strategies
Abdennour TM
 
GitOps and ArgoCD
Omar Fathy
 
OpenShift-Technical-Overview.pdf
JuanSalinas593459
 
Helm - Package manager in K8S
Piotr Perzyna
 
Helm - Package Manager for Kubernetes
Knoldus Inc.
 
Red Hat Openshift Fundamentals.pptx
ssuser18b1c6
 
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Matt Butcher
 
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Edureka!
 
GitOps with ArgoCD
CloudOps2005
 
OpenShift 4, the smarter Kubernetes platform
Kangaroot
 
Introduction to Kubernetes Workshop
Bob Killen
 
Kubernetes
erialc_w
 
Helm - Application deployment management for Kubernetes
Alexei Ledenev
 
Terraform
Marcelo Serpa
 
Introduction to kubernetes
Rishabh Indoria
 

Similar to Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion Amsterdam 2018 (20)

PDF
learn Helm 3 for kuberenetes
Shyam Mohan
 
PPTX
Helm and the zen of managing complex Kubernetes apps
Abhishek Chanda
 
PDF
How Helm, The Package Manager For Kubernetes, Works
Matthew Farina
 
PPTX
Helm.pptx
SISTechnologies
 
PDF
helm101.pdf
SamyaBikashSantra1
 
PDF
Helm Charts Security 101
Deep Datta
 
PDF
Helm Security Webinar
Deep Datta
 
PDF
Helm 3 - Navigating to distant shores
Lachlan Evenson
 
PDF
Helm
Victor Login
 
PPTX
Helm @ Orchestructure
Matthew Farina
 
PPTX
Exploring the Future of Helm
Matthew Farina
 
PDF
Helm chart-introduction
Ganesh Pol
 
PDF
Making the Most of Helm 3 with Codefresh
Codefresh
 
PDF
What is Helm?
BelleHenry
 
PPTX
Leveraging Helm to manage Deployments on Kubernetes
Manoj Bhagwat
 
PDF
Simplify Your Code with Helmfile
Codefresh
 
PPTX
Kubernetes CI/CD with Helm
Adnan Abdulhussein
 
PPTX
Helm-1233333333333333333333_Masterclass-v3.pptx
SureshMudireddy2
 
PPTX
Manage Kubernetes application complexity with Helm
Annie Talvasto
 
PDF
Continuous Delivery for Kubernetes Apps with Helm and ChartMuseum
Codefresh
 
learn Helm 3 for kuberenetes
Shyam Mohan
 
Helm and the zen of managing complex Kubernetes apps
Abhishek Chanda
 
How Helm, The Package Manager For Kubernetes, Works
Matthew Farina
 
Helm.pptx
SISTechnologies
 
helm101.pdf
SamyaBikashSantra1
 
Helm Charts Security 101
Deep Datta
 
Helm Security Webinar
Deep Datta
 
Helm 3 - Navigating to distant shores
Lachlan Evenson
 
Helm @ Orchestructure
Matthew Farina
 
Exploring the Future of Helm
Matthew Farina
 
Helm chart-introduction
Ganesh Pol
 
Making the Most of Helm 3 with Codefresh
Codefresh
 
What is Helm?
BelleHenry
 
Leveraging Helm to manage Deployments on Kubernetes
Manoj Bhagwat
 
Simplify Your Code with Helmfile
Codefresh
 
Kubernetes CI/CD with Helm
Adnan Abdulhussein
 
Helm-1233333333333333333333_Masterclass-v3.pptx
SureshMudireddy2
 
Manage Kubernetes application complexity with Helm
Annie Talvasto
 
Continuous Delivery for Kubernetes Apps with Helm and ChartMuseum
Codefresh
 
Ad

More from Codemotion (20)

PDF
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
 
PDF
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
 
PPTX
Pastore - Commodore 65 - La storia
Codemotion
 
PPTX
Pennisi - Essere Richard Altwasser
Codemotion
 
PPTX
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
 
PPTX
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
 
PPTX
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
 
PPTX
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
 
PDF
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
 
PDF
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
 
PDF
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
 
PDF
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
 
PDF
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
 
PDF
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
 
PPTX
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
 
PPTX
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
 
PDF
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
 
PDF
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
 
PDF
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Codemotion
 
PDF
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
 
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
 
Pastore - Commodore 65 - La storia
Codemotion
 
Pennisi - Essere Richard Altwasser
Codemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
 
Ad

Recently uploaded (20)

PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 

Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion Amsterdam 2018

  • 1. Reinhard Nägele The Better Way to Deploy on Kubernetes 1 AMSTERDAM | MAY 8-9, 2018
  • 2. 2 Reinhard Nägele •Senior IT Consultant at codecentric AG •Kubernetes Helm Charts Maintainer •@unguiculus
  • 3. The Package Manager for Kubernetes Compare •Apt •Yum •Homebrew •Chocolatey •… 3
  • 5. Terminology •Chart
 A Helm package. Bundles together a set of Kubernetes resource definitions •Repository
 Hosts a collection of charts on an HTTP server •Release
 An instance of a chart running in a Kubernetes cluster 5
  • 6. Features •Manage Kubernetes resources as a single unit •Charts can be hosted in a repository •Release history •Go templating support •Access to Kubernetes capabilities •Lifecycle management with hooks •Dependencies •PGP support •Plugin support 6
  • 7. Helm Architecture 7 Helm Client Tiller gRPC K8s API Server
  • 8. Helm CLI 8 helm init Set up Helm on the cluster helm install/upgrade Install or upgrade a chart helm get/status/list Find out information about running charts helm search Search charts in a repository helm create Create a new chart helm template Render chart templates locally
  • 10. Chart.yaml name: redis version: 1.0.4 appVersion: 4.0.2 description: Open source, advanced key-value store. keywords: - redis - keyvalue - database home: http://redis.io/ icon: https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png sources: - https://github.com/bitnami/bitnami-docker-redis maintainers: - name: bitnami-bot email: [email protected] 10
  • 12. Templating •Standard Kubernetes YAML manifest files •Parameterizable via Go template language •Includes the Sprig template library with lots of additional functions •Chart should provide default values in values.yaml 12 image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePullPolicy: {{ .Values.image.pullPolicy }}
  • 13. Templating — Flow Control 13 if/else/else if for creating conditional blocks with to specify a scope range which provides a “for each”-style loop
  • 14. Templating — Built-in Objects •Values •Release (Release.Name, Release.Namespace, …) •Chart (Chart.Name, Chart.Version, …) •Files (Files.Get, Files.GetBytes) •Capabilities (Capabilities.APIVersions, Capabilities.KubeVersion, …) •Template (Template.Name, Template.BasePath) 14
  • 15. Templating — Partials 15 {{- define "sample.labels" }} app: {{ template "sample.name" . }} component: server {{- end }} {{- define "MY_NAME" }} # body of template here {{- end }} apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ template "sample.fullname" . }} labels: {{ include "sample.labels" . | indent 4 }}
  • 16. Dependencies 16 dependencies: - name: apache version: 1.2.3 repository: https://example.com/charts - name: mysql version: 3.2.1 repository: https://another.example.com/charts $ helm dependency build demo-app Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "local" chart repository ...Successfully got an update from the "stable" chart repository ...Successfully got an update from the "example" chart repository ...Successfully got an update from the "another" chart repository Update Complete. Happy Helming! Saving 2 charts Downloading apache from repo https://example.com/charts Downloading mysql from repo https://another.example.com/charts requirements.yaml
  • 17. Hooks •Perform operations at strategic points in a release lifecycle •Can be weighted for ordering •Resources a hook creates are not tracked or managed as part of the release 17 ‣ pre-install ‣ post-install ‣ pre-delete ‣ post-delete ‣ pre-upgrade ‣ post-upgrade ‣ pre-rollback ‣ post-rollback apiVersion: batch/v1 kind: Job metadata: name: demo-job annotations: "helm.sh/hook": post-delete "helm.sh/hook-delete-policy": hook-succeeded spec: …
  • 18. Installing Charts •helm install <chart> •helm install <chart> --name <release> •helm upgrade <release> <chart> •helm upgrade <release> <chart> --install 18 $ helm upgrade proxy stable/traefik --install -f traefik-values.yaml --set dashboard.enabled=true --debug
  • 19. Tests 19 •Sanity checks for chart releases •Pod specification with test commands to run •Triggered by test hook annotations ‣ helm.sh/hooks: test-success ‣ helm.sh/hooks: test-failure apiVersion: v1 kind: Pod metadata: name: my-app-test annotations: "helm.sh/hook": test-success spec: containers: - name: my-app-test image: foo/my-app-test:42 ...
  • 21. 21 Thank you Reinhard Nägele https://github.com/unguiculus @unguiculus Slides licensed under a Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International License.