Slide 1

Slide 1 text

Delivering Kubernetes Apps with Helm Matt Butcher @technosophos Michelle Noorali @michellenoorali Adnan Abdulhussein @prydonius

Slide 2

Slide 2 text

https://flic.kr/p/74GbQz Kubernetes’ tools let you build your furniture from scratch.

Slide 3

Slide 3 text

Most of us don’t want to build our furniture from scratch

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

We need a tool to manage a group of resources as one unit.

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

The Package Manager for Kubernetes Packages == Charts

Slide 8

Slide 8 text

Charts ● Are application definitions ● Consist of... ○ Metadata ○ Kubernetes resource definitions ○ Documentation ● Live in chart repositories

Slide 9

Slide 9 text

Grab Helm from Github or Homebrew $ brew cask install helm

Slide 10

Slide 10 text

Getting Started is Simple $ helm init

Slide 11

Slide 11 text

Helm & Tiller Like peanut butter & jelly

Slide 12

Slide 12 text

Tiller ● in-cluster component ● Lives his life inside k8s as a pod ● helps manage releases in your cluster ○ Release = installation of a Kubernetes Chart Kubernetes Tiller Helm Client gRPC

Slide 13

Slide 13 text

Init in Action https://goo.gl/PyW0wO

Slide 14

Slide 14 text

Install Charts https://goo.gl/fWw8Lm

Slide 15

Slide 15 text

Upgrade a Release https://goo.gl/lChu5T

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Delete a Release https://goo.gl/vGUkYz

Slide 18

Slide 18 text

Your First Chart $ helm create myapp

Slide 19

Slide 19 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates └── values.yaml Navigating a Chart

Slide 20

Slide 20 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates │ ├── deployment.yaml │ └── svc.yaml └── values.yaml Templates + Go templating

Slide 21

Slide 21 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates └── values.yaml image: mycompany/myapp:1.0.0 imagePullPolicy: IfNotPresent service: port: 80 Configuration apiVersion: extensions/v1beta1 kind: Deployment spec: template: spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image }}" imagePullPolicy: {{ .Values.imagePullPolicy }} ports: - containerPort: {{ .Values.service.port }} templates/deployment.yaml values.yaml

Slide 22

Slide 22 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates └── values.yaml Configuration $ helm install --set service.port=8080 \ ./myapp $ helm install -f myvalues.yaml ./myapp image: mycompany/myapp:1.0.0 imagePullPolicy: IfNotPresent service: port: 80 values.yaml

Slide 23

Slide 23 text

myapp ├── Chart.yaml ├── README.md ├── charts │ └── mariadb-0.5.2.tgz ├── requirements.yaml ├── templates └── values.yaml dependencies: - name: mariadb version: 0.5.2 repository: http://storage.googleapis.com/kubernetes-charts Dependencies $ helm dependencies update requirements.yaml

Slide 24

Slide 24 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates │ └── NOTES.txt └── values.yaml Chart Docs

Slide 25

Slide 25 text

myapp ├── Chart.yaml ├── README.md ├── charts ├── templates └── values.yaml Chart Metadata name: mariadb version: 0.5.2 description: Chart for MariaDB keywords: - mariadb - mysql - database - sql home: https://mariadb.org sources: - https://github.com/bitnami/bitnami-docker-mariadb maintainers: - name: Bitnami email: [email protected] engine: gotpl

Slide 26

Slide 26 text

● $ helm repo add mycompany charts.mycompany.com ● $ helm install mycompany/myapp Chart Repositories

Slide 27

Slide 27 text

github.com/helm/monocular

Slide 28

Slide 28 text

github.com/kubernetes/charts

Slide 29

Slide 29 text

Curated, ready-to-run applications

Slide 30

Slide 30 text

Chart Best Practices

Slide 31

Slide 31 text

It Works Out of the Box

Slide 32

Slide 32 text

Split Out Dependencies

Slide 33

Slide 33 text

Don't Repeat Yourself

Slide 34

Slide 34 text

It's Reproducible

Slide 35

Slide 35 text

It's Configurable

Slide 36

Slide 36 text

5 Ways Helm Helps Teams

Slide 37

Slide 37 text

Get started quickly with existing charts

Slide 38

Slide 38 text

Build your own charts, and easily share them

Slide 39

Slide 39 text

Manage application lifecycle over time

Slide 40

Slide 40 text

Fit releases to your existing tools and process (not vice versa)

Slide 41

Slide 41 text

Let the cluster be the collaborative center for your releases

Slide 42

Slide 42 text

Helm Community ● Over 65 contributors ● 1 year old ● Slack channel: Kubernetes/#Helm ● Public dev meetings: Thursdays @ 9:30 pacific ● Weekly updates & demos at SIG-Apps meetings: Mondays @ 9am pacific Join us!

Slide 43

Slide 43 text

What’s Next? ● Helm 2.0.0 within 7 days ● Helm 2.x ○ Stability, security ○ Support for in-cluster testing ○ Improve the debugging output ● Monocular: The Helm Repository UI ● Charts: ○ Continue to grow the stable chart repository ○ Incubator for testing pre-Beta Kubernetes features ○ The Best Practices Guide

Slide 44

Slide 44 text

Thank You!