SlideShare une entreprise Scribd logo
1  sur  98
Télécharger pour lire hors ligne
FullStack Developers Israel
Haggai Philip Zagury | DevOps Architect & Group Lead Tikal Knowledge LTD
A HELM INTRODUCTION OR WHY EVERYONE SHOULD BE USING HELM
What the HELM !?
FullStack Developers Israel
SELF INTRODUCTION
▸ My open thinking and open techniques
ideology is driven by Open Source
technologies and the collaborative manner
defining my M.O.
▸ My solution driven approach is strongly based on hands-on
and deep understanding of Operating Systems,
Applications stacks and Software languages, Networking,
Cloud in general and today more an more Cloud Native
solutions.
HAGGAI PHILIP ZAGURY - DEVOPS ARCHITECT AND GROUP TECH LEAD
FullStack Developers Israel
FullStack Developers Israel
HELM INTRODUCTION
AGENDA
‣ Introduction to what helm is
‣ Life before HELM
‣ Intro - sample app
‣ demo
‣ Life with HELM
‣ HELM Architecture
‣ Real life examples
FullStack Developers Israel
HELM INTRODUCTION
kube-systemdefaultkube-public
dns Tillerdashboardmsa-api
ASSUMPTIONS | PERQUISITES
‣ You know what kubernetes is:
‣ Namespaces [link]
‣ Labels & Selectors [link]
‣ Deployments [link]
‣ Pods [link]
‣ Services [link]
Resource Definitions
FullStack Developers Israel
LIFE BEFORE
HELM
FullStack Developers Israel
LAND
FullStack Developers Israel
INTRODUCTION TO HELM
OUR “COMPLICATED” MICRO SERVICE APPLICATION
/ -> GET "pings"
/ping -> SET "pings" + 1
/isAlive -> return “It's aaaalive!”
{ pings: Int }
FullStack Developers Israel
INTRODUCTION TO HELM
OUR “COMPLICATED” MICRO SERVICE APPLICATION
Status Poller
/ -> GET "pings"
/ping -> SET "pings" + 1
/isAlive -> return “It's aaaalive!”
{ pings: Int }
curl -s -X POST “${API_URL}/ping”
curl -s "${API_URL}/"
read every 1 sec
Increment by 1 every 1 sec
Pinger
FullStack Developers Israel
INTRODUCTION TO HELM
OUR “COMPLICATED” MICRO SERVICE APPLICATION
Status Poller
/ -> GET "pings"
/ping -> SET "pings" + 1
/isAlive -> return “It's aaaalive!”
{ pings: Int }
curl -s -X POST “${API_URL}/ping”
curl -s "${API_URL}/"
read every 1 sec
Increment by 1 every 1 sec
Pinger
FullStack Developers Israel
INTRODUCTION TO HELM
OUR “COMPLICATED” MICRO SERVICE APPLICATION - DOCKERIZED
Status Poller
/ -> GET "pings"
/ping -> SET "pings" + 1
/isAlive -> return “It's aaaalive!”
{ pings: Int }
curl -s -X POST “${API_URL}/ping”
curl -s "${API_URL}/"
read every 1 sec
Increment by 1 every 1 sec
Pinger
FullStack Developers Israel
INTRODUCTION TO HELM
GET THE DEMO CODE
▸ https://github.com/shelleg/msa-demo-app
FullStack Developers Israel
INTRODUCTION TO HELM
PLANNING OUR DEPLOYMENT
▸ Each micro service has a build
process which pushes the container
to a docker registry.
▸ Docker registry is available to the k8s
cluster during deployment (with or
without authentication depending on
the deployment)
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ redis deployment + service for redis
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ redis deployment + service for redis
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ msa-pinger deployment
‣ redis deployment + service for redis
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ msa-pinger deployment
‣ redis deployment + service for redis
‣ msa-poller deployment
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ msa-pinger deployment
‣ redis deployment + service for redis
‣ msa-poller deployment ‣ msa-demo namespace
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ msa-pinger deployment
‣ redis deployment + service for redis
‣ persistent volume for redis data
‣ msa-poller deployment ‣ msa-demo namespace
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOYMENT SEQUENCE
‣ msa-api deployment + service for the msa-api
‣ msa-pinger deployment
‣ redis deployment + service for redis
‣ persistent volume for redis data
‣ configmaps / secrets for all components
‣ msa-poller deployment ‣ msa-demo namespace
FullStack Developers Israel
INTRODUCTION TO HELM
KUBERNETES “NATIVE” WAY
▸ Create a namespace:

kubectl create namespace msa-demo --dry-run -o yaml > msa-demo-ns.yml
▸ Create a deployment + service for redis:

kubectl run redis --image=redis --port=6379 --expose --dry-run -o yaml > redis.yml
▸ Create a deployment + service for msa-api:

kubectl run msa-api --image=shelleg/msa-api:config --port=8080 —expose --image-pull-
policy=Always --dry-run -o yaml > msa-api.yml

FullStack Developers Israel
INTRODUCTION TO HELM
KUBERNETES “NATIVE” WAY
▸ Create a deployment for msa-pinger:

kubectl run msa-pinger --image=shelleg/msa-pinger:latest --env="API_URL=msa-api:
8080" --env="DEBUG=true" --dry-run -o yaml > msa-pinger.yml
▸ Create a deployment for msa-poller:

kubectl run msa-poller --image=shelleg/msa-poller:latest --env="API_URL=msa-api:8080"
--dry-run -o yaml > msa-pinger.yml
FullStack Developers Israel
HANDS ON
FullStack Developers Israel
INTRODUCTION TO HELM
WE NOW HAVE A BUNCH OF FILES DESCRIBING OUR APPLICATION
.
|-- msa-api.yml
|-- msa-demo-ns.yml
|-- msa-pinger.yml
|-- msa-poller.yml
`-- redis.yml
0 directories, 5 files
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: msa-api
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
run: msa-api
status:
loadBalancer: {}
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: msa-api
name: msa-api
spec:
replicas: 1
selector:
matchLabels:
run: msa-api
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: msa-api
spec:
containers:
- image: shelleg/msa-api:config
imagePullPolicy: Always
FullStack Developers Israel
INTRODUCTION TO HELM
SO WHY DO WE NEED HELM ?!
▸ We want to better control “what goes where” e.g ports
▸ Container image versions ?! (is the only change between releases)
▸ Manage Dependencies
▸ Update components individually updating things like image
versions e.g msa-api:latest -> msa-api:config
▸ Write once run on any cluster
▸ Reproducible & Shareable resource definition specs -
TEMPLATES
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: msa-api
spec:
ports:
- port: {{ variable }}
protocol: TCP
targetPort: {{ variable }}
selector:
run: msa-api
status:
loadBalancer: {}
FullStack Developers Israel
INTRODUCTION TO HELM
TEMPLATES
▸ Not a foreign concept … Jinja / erb / jsonnet
{% for key, svc in services.items() %}
upstream {{ key }} {
least_conn;
{% for server in svc.delegate %}
server {{ server }}:{{ svc.ports[0].split(':')[0] }} weight=10
max_fails=3 fail_timeout=30s;
{% endfor %}
}
{% endfor %}
// A function that returns an object.
local Person(name='Alice') = {
name: name,
welcome: 'Hello ' + name + '!',
};
{
person1: Person(),
person2: Person('Bob'),
}
<% @sudoers_users.each do |user| -%>
<%= user %> ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
<% end -%>
# Members of the sysadmin group may gain root privileges
%sysadmin ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
FullStack Developers Israel
INTRODUCTION TO HELM
SO WHY DO WE NEED HELM ?!
▸ Kubernetes native discovery mechanism is focused around the Service /
deployment
▸ Helm Charts are Application focused
FullStack Developers Israel
LIFE WITH
HELM
FullStack Developers Israel
HELM INTRODUCTION
IN A NUT SHELL -> HELM MANAGES CHARTS, RELEASES & VERSIONS
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| `-- service.yaml
`-- values.yaml
2 directories, 6 files
‣ Describe your deployment + service / any other
kubernetes Resource Definition
apiVersion: v1
description: My Cool Chart
engine: gotpl
name: myCoolChart
version: 0.1.0
FullStack Developers Israel
HELM INTRODUCTION
IN A NUT SHELL -> HELM MANAGES CHARTS
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| `-- service.yaml
`-- values.yaml
2 directories, 6 files
‣ Use values.yaml
‣ A rich templating system

for making charts generic

yet highly customisable
image:
repository: shelleg/msa-api
tag: config
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8080
…
FullStack Developers Israel
HOW DOES WORK ?
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - A KUBERNETES CLUSTER
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - A HELMSMAN WORKSTATION
HELM CLI
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - HELM INIT
TillerHELM CLI helm init
~/.helm/…
helm init —client-only
FullStack Developers Israel
HELM INTRODUCTION
HELM CLIENT
▸ Local chart development
▸ Managing repositories
▸ Interacting with the Tiller server
▸ Sending charts to be installed
▸ Asking for information about releases
▸ Requesting upgrading or uninstalling of existing releases
▸ It can be used to serve your local charts via http …
▸
FullStack Developers Israel
HELM INTRODUCTION
TILLER - “HELM SERVER”
▸ Listening for incoming requests from the Helm client
▸ Combining a chart and configuration to build a release
▸ Installing charts into Kubernetes, and then tracking the subsequent release
▸ Upgrading and uninstalling charts by interacting with Kubernetes
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - HELM INIT
TillerHELM CLI helm init
~/.helm/…
helm init —client-only
MANAGE CHARTS MANAGE RELEASES
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - INSTALL AN EXISTING CHART
TillerHELM CLI
CHAOSKUBE
FullStack Developers Israel
USE EXISTING CHARTS
FullStack Developers Israel
HELM INTRODUCTION
CHAOSKUBE
▸ chaoskube is a “chaos-monkey lite” it basically takes down pod based on a
schedule to test you resilience (and there are some tweaks via configuration)
https://github.com/linki/chaoskube
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - WORK WITH REPOS
TillerHELM CLI
CHAOSKUBE
HELM REPO
helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE
TillerHELM CLI
STABLE/
CHAOSKUBE
HELM REPO
helm install stable/chaoskube
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE
TillerHELM CLI
STABLE/
CHAOSKUBE
HELM REPO
CHAOSKUBE
RELEASE 1.0
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- ingress.yaml
| `-- service.yaml
`-- values.yaml
2 directories, 7 files
apiVersion: v1
appVersion: 0.10.0
description: Chaoskube periodically kills random pods in your cluster.
engine: gotpl
home: https://github.com/linki/chaoskube
maintainers:
- email: linki+kubernetes.io@posteo.de
name: linki
name: chaoskube
sources:
- https://github.com/linki/chaoskube
version: 0.10.0
Chart and image version
{not always identical …}
Chart.yaml
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
|-- Chart.yaml
|-- OWNERS
|-- README.md
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- clusterrole.yaml
| |-- clusterrolebinding.yaml
| |-- deployment.yaml
| |-- role.yaml
| |-- rolebinding.yaml
| `-- serviceaccount.yaml
`-- values.yaml
1 directory, 12 files
▸ /templates for your resource definitions such as:
▸ Service
▸ Deployment
▸ configMap
▸ Secret
▸ Daemonset
▸ Pod
▸ Ingress
▸ Job
▸ persistentvolume
▸ persistentvolumeclaim
▸ Service account
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
# container name
name: chaoskube
# docker image
image: quay.io/linki/chaoskube
# docker image tag
imageTag: v0.10.0
# number of replicas to run
replicas: 1
# interval between pod terminations
interval: 10m
# label selector to filter pods by, e.g. app=foo,stage!=prod
labels:
# annotation selector to filter pods by, e.g.
chaos.alpha.kubernetes.io/enabled=true
annotations:
…
values.yaml
|-- Chart.yaml
|-- OWNERS
|-- README.md
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- clusterrole.yaml
| |-- clusterrolebinding.yaml
| |-- deployment.yaml
| |-- role.yaml
| |-- rolebinding.yaml
| `-- serviceaccount.yaml
`-- values.yaml
1 directory, 12 files
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
# container name
name: chaoskube
serviceaccount.yaml
values.yaml
|-- Chart.yaml
|-- OWNERS
|-- README.md
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- clusterrole.yaml
| |-- clusterrolebinding.yaml
| |-- deployment.yaml
| |-- role.yaml
| |-- rolebinding.yaml
| `-- serviceaccount.yaml
`-- values.yaml
1 directory, 12 files
{{- if .Values.rbac.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
{{ include "labels.standard" . | indent 4 }}
name: {{ printf "%s-%s" .Release.Name .Values.name }}
{{- end -}}
Control Structures:
{ render based on boolean }
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- ingress.yaml
| `-- service.yaml
`-- values.yaml
2 directories, 7 files
{{/*
Expand the name of the chart.
*/}}
{{- define "chaoskube.name" -}}
{{- default .Chart.Name .Values.nameOverride |
trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes
name fields are limited to this (by the DNS
naming spec).
If release name contains chart name it will be
used as a full name.
*/}}
{{- define "chaoskube.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 |
trimSuffix "-" -}}
{{- else -}}
…
Custom functions +
set default based on
Environment
_helpers.tpl
FullStack Developers Israel
HELM INTRODUCTION
CAHRTS STRUCTURE
chaoskube is running and will kill arbitrary pods every
{{ .Values.interval }}.
You can follow the logs to see what chaoskube does:
POD=$(kubectl -n {{ .Release.Namespace }} get pods -
l='release={{ template "chaoskube.fullname" . }}' --
output=jsonpath='{.items[0].metadata.name}
')
kubectl -n {{ .Release.Namespace }} logs -f $POD
{{ if .Values.dryRun }}
You are running in dry-run mode. No pod is actually terminated.
{{ end -}}
NOTES.txt
▸ A HELM standard way of
showing information the end
user can use in order to access
the application.
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE
TillerHELM CLI
STABLE/
CHAOSKUBE
HELM REPO
CHAOSKUBE
RELEASE 1.0
helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
anxious-hummingbird 1 Wed Aug 15 21:51:26 2018 DEPLOYED chaoskube-0.9.0 default
laughing-orangutan 1 Wed Aug 15 22:14:40 2018 DEPLOYED chaoskube-0.9.0 default
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE - MANY REPOSITORY OPTIONS
TillerHELM CLI
STABLE/
CHAOSKUBE
HELM REPO
CHAOSKUBE
RELEASE 1.0
helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
anxious-hummingbird 1 Wed Aug 15 21:51:26 2018 DEPLOYED chaoskube-0.9.0 default
laughing-orangutan 1 Wed Aug 15 22:14:40 2018 DEPLOYED chaoskube-0.9.0 default
{ …}
FullStack Developers Israel
HELM INTRODUCTION
HELM ARCHITECTURE
TillerHELM CLI
HELM REPO
CHART 1
RELEASE 14
CHART 2
RELEASE 6
CHART 2
RELEASE 6
CHART 1
RELEASE 14CHART 1
RELEASE 14
CHART 1 CHART 2
helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
youngling-quokka 1 Sun Sep 2 00:37:13 2018 DEPLOYED chaoskube-0.10.0 msa-demo
kubectl get configmaps --namespace=kube-system | grep youngling-quokka
youngling-quokka.v1 1 29s
FullStack Developers Israel
“CHARTIFY” ( & REUSE)…
FullStack Developers Israel
INTRODUCTION TO HELM
OUR “COMPLICATED” MICRO SERVICE APPLICATION - DOCKERIZED
Status Poller
/ -> GET "pings"
/ping -> SET "pings" + 1
/isAlive -> return “It's aaaalive!”
{ pings: Int }
curl -s -X POST “${API_URL}/ping”
curl -s "${API_URL}/"
read every 1 sec
Increment by 1 every 1 sec
Pinger
FullStack Developers Israel
INTRODUCTION TO HELM
CHART PER COMPONENT
|-- pinger
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
|-- poller
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
|-- redis
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
|-- api
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
FullStack Developers Israel
INTRODUCTION TO HELM
CHART PER COMPONENT
|-- pinger
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
|-- poller
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
|-- redis
|
|-- api
| |-- Chart.yaml
| |-- charts
| |-- templates
| | |-- NOTES.txt
| | |-- _helpers.tpl
| | |-- deployment.yaml
| | |-- ingress.yaml
| | `-- service.yaml
| `-- values.yaml
| Use stable/redis
FullStack Developers Israel
INTRODUCTION TO HELM
“MSA” CHART
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- api-deployment.yaml
| |-- api-service.yaml
| |-- deployment.yaml
| |-- pinger-deployment.yaml
| |-- poller-deployment.yaml
| `-- service.yaml
`-- values.yaml
FullStack Developers Israel
INTRODUCTION TO HELM
VALUES
api:
name: api
replicaCount: 1
image:
repository: shelleg/msa-api
tag: config
pullPolicy: Always
containerPort: 8080
service:
enabled: true
type: ClusterIP
port: 8080
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
pinger:
name: pinger
replicaCount: 1
image:
repository: shelleg/msa-pinger
tag: latest
pullPolicy: Always
service:
enabled: false
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
poller:
name: poller
replicaCount: 1
image:
repository: shelleg/msa-poller
tag: latest
pullPolicy: Always
service:
enabled: false
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
values.yaml
| This works ;) but …
FullStack Developers Israel
INTRODUCTION TO HELM
TEMPLATES
api-deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ .Values.api.name }}
labels:
app: {{ .Values.api.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.api.replicaCount }}
selector:
matchLabels:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
api-service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.api.name }}
labels:
app: {{ .Values.api.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
type: {{ .Values.api.service.type }}
ports:
- port: {{ .Values.api.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
FullStack Developers Israel
INTRODUCTION TO HELM
Compose chart Package chart Store chart in
shared/private repo
| helm install myrepo/msa —set nameOverride: api —set service.enabled=true —name api
| helm install myrepo/msa —set nameOverride: pinger —name pinger
| helm install myrepo/msa —set nameOverride: poller —name poller
FullStack Developers Israel
INTRODUCTION TO HELM
HELPERS & VALUES
▸ nameOverride: [ e.g. api | pinger | poller ]
FullStack Developers Israel
INTRODUCTION TO HELM
HELPERS & VALUES
▸ nameOverride: [ api | pinger | poller ]
{{- define “chart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
_helpers.yaml
FullStack Developers Israel
INTRODUCTION TO HELM
HELPERS & VALUES
▸ nameOverride: [ api | pinger | poller ]
{{- define “chart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
_helpers.yaml | Make the chart reusable
FullStack Developers Israel
INTRODUCTION TO HELM
HELPERS & VALUES
▸ nameOverride: [ api | pinger | poller ]
▸ service.enabled: true
{{- define “chart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
_helpers.yaml
{{- if .Values.service.enabled }}
{{- end }}
service.yaml
| Make the chart reusable
FullStack Developers Israel
INTRODUCTION TO HELM
HELPERS & VALUES
▸ nameOverride: [ api | pinger | poller ]
▸ service.enabled: true
{{- define “chart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
_helpers.yaml
{{- if .Values.service.enabled -}}
{{- end -}}
service.yaml
| Make the chart reusable
| Make entire RD optional
FullStack Developers Israel
INTRODUCTION TO HELM
TEMPLATES
api-deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ .Values.api.name }}
labels:
app: {{ .Values.api.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.api.replicaCount }}
selector:
matchLabels:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
This works ;)

but …
deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ .Values.name }}
labels:
app: {{ .Values.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.name }}
release: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Values.name }}
release: {{ .Release.Name }}
This is D.R.Y !
FullStack Developers Israel
INTRODUCTION TO HELM
TEMPLATES
api-service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.api.name }}
labels:
app: {{ .Values.api.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
type: {{ .Values.api.service.type }}
ports:
- port: {{ .Values.api.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
app: {{ .Values.api.name }}
release: {{ .Release.Name }}
This works ;)

but …
service.yaml
{{- if .Values.service.enabled -}}
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.api.name }}
labels:
app: {{ .Values.api.name }}
chart: {{ template "msa.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
type: {{ .Values.api.service.type }}
ports:
- port:
{{ .Values.api.service.port }}
targetPort: http
protocol: TCP
name: http
…
{{- end -}}
This is D.R.Y !
FullStack Developers Israel
INTRODUCTION TO HELM
“MSA” CHART
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- service.yaml
`-- values.yaml
my-chart-repo/msa-0.1.0.gz
apiVersion: v1
appVersion: "1.0"
description: msg chart for Kubernetes
name: api
version: 0.1.0
FullStack Developers Israel
INTRODUCTION TO HELM
Compose chart Package chart Store chart in
shared/private repo
| helm install myrepo/msa —set nameOverride: api —set service.enabled=true —name api
| helm install myrepo/msa —set nameOverride: pinger —name pinger
| helm install myrepo/msa —set nameOverride: poller —name poller
| helm install stable/redis —name redis
Public repo
FullStack Developers Israel
INTRODUCTION TO HELM
MANAGING DEPENDENCIES - A.K.A UMBRELLA CHAT
.
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- dependencies.yaml
`-- values.yaml
dependencies:
- name: msa
repository: file://../msa
version: 0.1.0
- name: redis
repository: stable/redis
version: x.x.x
FullStack Developers Israel
HANDS ON
FullStack Developers Israel
Informational -> you don’t have / need to do it ;)
Get your hands dirty -> follow the instructions
HOW TO USE THIS LAB ?!
Tikal Knowledge
MINIKUBE
FullStack Developers IL
KUBERNETES 101 | GETTING STARTED
MINIKUBE
▸ Minikube supports Kubernetes features such as:
▸ DNS
▸ NodePorts
▸ ConfigMaps and Secrets
▸ Dashboards
▸ Container Runtime: Docker, rkt and CRI-O
▸ Enabling CNI (Container Network Interface)
▸ Ingress
FullStack Developers IL
KUBERNETES 101 | GETTING STARTED
WHY
▸ Good for POC, QuickStarts and Demo’s
▸ Gives a taste of Kubernetes and how to work with it, without going through a
complex setup
FullStack Developers IL
KUBERNETES 101 | GETTING STARTED
INSTALLING MINIKUBE
▸ Install kubectl link
▸ Install minikube link
FullStack Developers IL
KUBERNETES 101 | GETTING STARTED
MINIKUBE START
▸ minikube start
▸ 20:31 $ minikube start
Starting local Kubernetes v1.9.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
FullStack Developers IL
INTRODUCTION TO HELM
MACOSX VIA HOMEBREW
brew update
brew install kubernetes-cli kubernetes-helm
brew cask install minikube
FullStack Developers IL
INTRODUCTION TO HELM
UBUNTU/DEBIAN
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/
sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-
linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
FullStack Developers IL
INTRODUCTION TO HELM
CENTOS/RHEL/FEDORA
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpghttps://
packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubectl
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-linux-
amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
FullStack Developers IL
INTRODUCTION TO HELM
WINDOWS
Use the Chocolaty package manager:
choco install kubernetes-cli kubernetes-helm
Download Minikube from: https://github.com/kubernetes/minikube/releases
Download the minikube-windows-amd64.exe file,
rename it to minikube.exe and add it to your path.
Tikal Knowledge
FullStack Developers Israel
INTRODUCTION TO HELM
INSTALL HELM ON KUBERNETES
helm init --service-account helm --dry-run --debug > helm-init.yml
kubectl create -f helm-rbac-cluster-wide.yml
kubectl create -f helm-init.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: helm
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: helm
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: helm
namespace: kube-system
FullStack Developers Israel
INTRODUCTION TO HELM
CONFIGURE HELM REPOSITORIES
helm repo add stable https://kubernetes-charts.storage.googleapis.com
FullStack Developers Israel
INTRODUCTION TO HELM
INSTALL HELM-S3 PLUGIN
helm plugin install https://github.com/hypnoglow/helm-s3.git
-> If you are planning on pushing to your s3 based helm repo
-> get your own repo and setup the required permissions.
-> I our case you will be using it for read / download purposes which is already public / open source.
FullStack Developers Israel
INTRODUCTION TO HELM
ADD THE MSA-CHARTS S3 HELM REPOSITORY
helm repo add msa-charts s3://msa-charts/
s3 plugin updates
the index.yaml on
each version
updload
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOY YOUR UMBRELLA …
kubectl create namespace msa-umbrella
helm dep build ./helm/msa-umbrella
helm install --name v1 --namespace msa-umbrella ./helm/msa-umbrella
FullStack Developers Israel
INTRODUCTION TO HELM
DEPLOY YOUR UMBRELLA …
kubectl create namespace msa-umbrella
helm dep build ./helm/msa-umbrella
helm install --name v1 --namespace msa-umbrella ./helm/msa-umbrella
FullStack Developers Israel
INTRODUCTION TO HELM
CHECK YOUR UMBRELLA …
helm list # view helm releases which are installed
kubectl -n msa-umbrella get po,svc,deploy # view msa-umbrella pods, services & deployments
FullStack Developers Israel
INTRODUCTION TO HELM
RECAP
▸ Helm is awesome -> ( completes Kubernetes )
▸ Application centric solution
▸ Flexible templating language
▸ Well integrated into workflows such as GitKube, Scafold and others
FullStack Developers Israel
INTRODUCTION TO HELM
USE [ DON’T OVER USE ] YOUR IMAGINATION
▸ Custom Resource Definitions { e.g istio }
▸ Common monitoring RD’s { e.g prometheus }
▸ Common logging RD’s { e.g fluentd }
▸ Ingresses (yes / no)
▸ Services (type: NodePort, ClusterIp, LoadBalancer)
▸ Provider specific configs { on-prem vs. cloud }
▸
| {{ if .Values.monitoring.enabled }}
| {{ if .Values.logging.enabled }}
| {{ if .Values.service.nodeIp }}
FullStack Developers Israel
So Whats Next ? …
FullStack Developers Israel
INTRODUCTION TO HELM
kubectl create
namespace for build …
CONTINUES INTEGRATION PROCESS [ JENKINS || GITLAB || “FOOBAR” ]
FullStack Developers Israel
INTRODUCTION TO HELM
JENKINS PIPELINE
FullStack Developers Israel
INTRODUCTION TO HELM
PIPELINE LIBRARY - NOW SUPPORTS HELM LIFECYCLE
FullStack Developers Israel
HELM INTRODUCTION
CREDITS
▸ Mark Kirshner & Anatoly Rabkin
▸ Helm documentation -> https://docs.helm.sh/
▸ ChaosKube helm chart -> https://github.com/helm/charts/tree/master/stable/
chaoskube
▸ Icons -> https://github.com/octo-technology/kubernetes-icons
▸ Kubernetes docs -> https://kubernetes.io/docs/home/?path=users
FullStack Developers Israel
We Love
Tech
Thank you for tuning in

Contenu connexe

Tendances

Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)Matt Butcher
 
Rancher 2.0 Technical Deep Dive
Rancher 2.0 Technical Deep DiveRancher 2.0 Technical Deep Dive
Rancher 2.0 Technical Deep DiveLINE Corporation
 
Kubernetes Helm: Why It Matters
Kubernetes Helm: Why It MattersKubernetes Helm: Why It Matters
Kubernetes Helm: Why It MattersPlatform9
 
Intro to Helm for Kubernetes
Intro to Helm for KubernetesIntro to Helm for Kubernetes
Intro to Helm for KubernetesCarlos E. Salazar
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopBob Killen
 
Deploy Application on Kubernetes
Deploy Application on KubernetesDeploy Application on Kubernetes
Deploy Application on KubernetesOpsta
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingSreenivas Makam
 
Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...
 Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion... Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...
Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...Codemotion
 
Helm Charts Security 101
Helm Charts Security 101Helm Charts Security 101
Helm Charts Security 101Deep Datta
 
Everything You Need To Know About Persistent Storage in Kubernetes
Everything You Need To Know About Persistent Storage in KubernetesEverything You Need To Know About Persistent Storage in Kubernetes
Everything You Need To Know About Persistent Storage in KubernetesThe {code} Team
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Ryan Jarvinen
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes IntroductionPeng Xiao
 
GitOps and ArgoCD
GitOps and ArgoCDGitOps and ArgoCD
GitOps and ArgoCDOmar Fathy
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingPiotr Perzyna
 

Tendances (20)

Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
Kubernetes Helm (Boulder Kubernetes Meetup, June 2016)
 
What Is Helm
 What Is Helm What Is Helm
What Is Helm
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
Introduction to helm
Introduction to helmIntroduction to helm
Introduction to helm
 
Rancher 2.0 Technical Deep Dive
Rancher 2.0 Technical Deep DiveRancher 2.0 Technical Deep Dive
Rancher 2.0 Technical Deep Dive
 
Kubernetes Helm: Why It Matters
Kubernetes Helm: Why It MattersKubernetes Helm: Why It Matters
Kubernetes Helm: Why It Matters
 
Helm.pptx
Helm.pptxHelm.pptx
Helm.pptx
 
Intro to Helm for Kubernetes
Intro to Helm for KubernetesIntro to Helm for Kubernetes
Intro to Helm for Kubernetes
 
DevOps with Kubernetes
DevOps with KubernetesDevOps with Kubernetes
DevOps with Kubernetes
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes Workshop
 
Deploy Application on Kubernetes
Deploy Application on KubernetesDeploy Application on Kubernetes
Deploy Application on Kubernetes
 
Deep dive into Kubernetes Networking
Deep dive into Kubernetes NetworkingDeep dive into Kubernetes Networking
Deep dive into Kubernetes Networking
 
Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...
 Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion... Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...
Helm - the Better Way to Deploy on Kubernetes - Reinhard Nägele - Codemotion...
 
Helm Charts Security 101
Helm Charts Security 101Helm Charts Security 101
Helm Charts Security 101
 
Kubernetes PPT.pptx
Kubernetes PPT.pptxKubernetes PPT.pptx
Kubernetes PPT.pptx
 
Everything You Need To Know About Persistent Storage in Kubernetes
Everything You Need To Know About Persistent Storage in KubernetesEverything You Need To Know About Persistent Storage in Kubernetes
Everything You Need To Know About Persistent Storage in Kubernetes
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
GitOps and ArgoCD
GitOps and ArgoCDGitOps and ArgoCD
GitOps and ArgoCD
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals Training
 

Similaire à Helm intro

How Zalando runs Kubernetes clusters at scale on AWS - AWS re:Invent
How Zalando runs Kubernetes clusters at scale on AWS - AWS re:InventHow Zalando runs Kubernetes clusters at scale on AWS - AWS re:Invent
How Zalando runs Kubernetes clusters at scale on AWS - AWS re:InventHenning Jacobs
 
Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Wojciech Barczyński
 
[k8s] Kubernetes terminology (1).pdf
[k8s] Kubernetes terminology (1).pdf[k8s] Kubernetes terminology (1).pdf
[k8s] Kubernetes terminology (1).pdfFrederik Wouters
 
The Big Cloud native FaaS Lebowski
The Big Cloud native FaaS Lebowski The Big Cloud native FaaS Lebowski
The Big Cloud native FaaS Lebowski QAware GmbH
 
TIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldTIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldThe Incredible Automation Day
 
Devoxx UK 2018 - A cloud application journey with helm and kubernetes
Devoxx UK 2018 - A cloud application journey with helm and kubernetesDevoxx UK 2018 - A cloud application journey with helm and kubernetes
Devoxx UK 2018 - A cloud application journey with helm and kubernetesAna-Maria Mihalceanu
 
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLON
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLONPaul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLON
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLONOutlyer
 
Kubernetes: The Next Research Platform
Kubernetes: The Next Research PlatformKubernetes: The Next Research Platform
Kubernetes: The Next Research PlatformBob Killen
 
CERN OpenStack Cloud Control Plane - From VMs to K8s
CERN OpenStack Cloud Control Plane - From VMs to K8sCERN OpenStack Cloud Control Plane - From VMs to K8s
CERN OpenStack Cloud Control Plane - From VMs to K8sBelmiro Moreira
 
Kubered -Recipes for C2 Operations on Kubernetes
Kubered -Recipes for C2 Operations on KubernetesKubered -Recipes for C2 Operations on Kubernetes
Kubered -Recipes for C2 Operations on KubernetesJeffrey Holden
 
Scaling docker with kubernetes
Scaling docker with kubernetesScaling docker with kubernetes
Scaling docker with kubernetesLiran Cohen
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slidesDocker, Inc.
 
OpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanOpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanAlex Ellis
 
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleCloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleBenjamin Zores
 
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTO
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTOClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTO
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTOAltinity Ltd
 
Kubernetes laravel and kubernetes
Kubernetes   laravel and kubernetesKubernetes   laravel and kubernetes
Kubernetes laravel and kubernetesWilliam Stewart
 
CI/CD Across Multiple Environments
CI/CD Across Multiple EnvironmentsCI/CD Across Multiple Environments
CI/CD Across Multiple EnvironmentsKarl Isenberg
 
Kubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battleKubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battleAmir Moghimi
 

Similaire à Helm intro (20)

How Zalando runs Kubernetes clusters at scale on AWS - AWS re:Invent
How Zalando runs Kubernetes clusters at scale on AWS - AWS re:InventHow Zalando runs Kubernetes clusters at scale on AWS - AWS re:Invent
How Zalando runs Kubernetes clusters at scale on AWS - AWS re:Invent
 
Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple
 
[k8s] Kubernetes terminology (1).pdf
[k8s] Kubernetes terminology (1).pdf[k8s] Kubernetes terminology (1).pdf
[k8s] Kubernetes terminology (1).pdf
 
The Big Cloud native FaaS Lebowski
The Big Cloud native FaaS Lebowski The Big Cloud native FaaS Lebowski
The Big Cloud native FaaS Lebowski
 
TIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container worldTIAD 2016 : Application delivery in a container world
TIAD 2016 : Application delivery in a container world
 
Devoxx UK 2018 - A cloud application journey with helm and kubernetes
Devoxx UK 2018 - A cloud application journey with helm and kubernetesDevoxx UK 2018 - A cloud application journey with helm and kubernetes
Devoxx UK 2018 - A cloud application journey with helm and kubernetes
 
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLON
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLONPaul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLON
Paul Angus (ShapeBlue) - Push infrastructure with Ansible #DOXLON
 
Kubernetes: The Next Research Platform
Kubernetes: The Next Research PlatformKubernetes: The Next Research Platform
Kubernetes: The Next Research Platform
 
CERN OpenStack Cloud Control Plane - From VMs to K8s
CERN OpenStack Cloud Control Plane - From VMs to K8sCERN OpenStack Cloud Control Plane - From VMs to K8s
CERN OpenStack Cloud Control Plane - From VMs to K8s
 
Kubered -Recipes for C2 Operations on Kubernetes
Kubered -Recipes for C2 Operations on KubernetesKubered -Recipes for C2 Operations on Kubernetes
Kubered -Recipes for C2 Operations on Kubernetes
 
Scaling docker with kubernetes
Scaling docker with kubernetesScaling docker with kubernetes
Scaling docker with kubernetes
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
 
Automation day red hat ansible
   Automation day red hat ansible    Automation day red hat ansible
Automation day red hat ansible
 
OpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanOpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - Milan
 
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets AnsibleCloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
CloudOpen 2014 - Extending Cloud Automation, When OpenStack Meets Ansible
 
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTO
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTOClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTO
ClickHouse on Kubernetes, by Alexander Zaitsev, Altinity CTO
 
Kubernetes laravel and kubernetes
Kubernetes   laravel and kubernetesKubernetes   laravel and kubernetes
Kubernetes laravel and kubernetes
 
Whats all the FaaS About
Whats all the FaaS AboutWhats all the FaaS About
Whats all the FaaS About
 
CI/CD Across Multiple Environments
CI/CD Across Multiple EnvironmentsCI/CD Across Multiple Environments
CI/CD Across Multiple Environments
 
Kubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battleKubernetes: training micro-dragons for a serious battle
Kubernetes: training micro-dragons for a serious battle
 

Plus de Haggai Philip Zagury

DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...Haggai Philip Zagury
 
Kube Security Shifting left | Scanners & OPA
Kube Security Shifting left | Scanners & OPAKube Security Shifting left | Scanners & OPA
Kube Security Shifting left | Scanners & OPAHaggai Philip Zagury
 
TechRadarCon 2022 | Have you built your platform yet ?
TechRadarCon 2022 | Have you built your platform yet ?TechRadarCon 2022 | Have you built your platform yet ?
TechRadarCon 2022 | Have you built your platform yet ?Haggai Philip Zagury
 
DevEx | there’s no place like k3s
DevEx | there’s no place like k3sDevEx | there’s no place like k3s
DevEx | there’s no place like k3sHaggai Philip Zagury
 
Git ops & Continuous Infrastructure with terra*
Git ops  & Continuous Infrastructure with terra*Git ops  & Continuous Infrastructure with terra*
Git ops & Continuous Infrastructure with terra*Haggai Philip Zagury
 
The 2nd half. Scaling to the next^2
The 2nd half. Scaling to the next^2The 2nd half. Scaling to the next^2
The 2nd half. Scaling to the next^2Haggai Philip Zagury
 
Deep Learning - Continuous Operations
Deep Learning - Continuous Operations Deep Learning - Continuous Operations
Deep Learning - Continuous Operations Haggai Philip Zagury
 
Machine Learning - Continuous operations
Machine Learning - Continuous operationsMachine Learning - Continuous operations
Machine Learning - Continuous operationsHaggai Philip Zagury
 
Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Haggai Philip Zagury
 

Plus de Haggai Philip Zagury (20)

DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
 
Kube Security Shifting left | Scanners & OPA
Kube Security Shifting left | Scanners & OPAKube Security Shifting left | Scanners & OPA
Kube Security Shifting left | Scanners & OPA
 
TechRadarCon 2022 | Have you built your platform yet ?
TechRadarCon 2022 | Have you built your platform yet ?TechRadarCon 2022 | Have you built your platform yet ?
TechRadarCon 2022 | Have you built your platform yet ?
 
Gitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCDGitlab, GitOps & ArgoCD
Gitlab, GitOps & ArgoCD
 
DevEx | there’s no place like k3s
DevEx | there’s no place like k3sDevEx | there’s no place like k3s
DevEx | there’s no place like k3s
 
Git ops & Continuous Infrastructure with terra*
Git ops  & Continuous Infrastructure with terra*Git ops  & Continuous Infrastructure with terra*
Git ops & Continuous Infrastructure with terra*
 
Auth experience - vol 1.0
Auth experience  - vol 1.0Auth experience  - vol 1.0
Auth experience - vol 1.0
 
Linux intro
Linux introLinux intro
Linux intro
 
Auth experience
Auth experienceAuth experience
Auth experience
 
Kubexperience intro session
Kubexperience intro sessionKubexperience intro session
Kubexperience intro session
 
Scaling i/o bound Microservices
Scaling i/o bound MicroservicesScaling i/o bound Microservices
Scaling i/o bound Microservices
 
The 2nd half. Scaling to the next^2
The 2nd half. Scaling to the next^2The 2nd half. Scaling to the next^2
The 2nd half. Scaling to the next^2
 
Terraform 101
Terraform 101Terraform 101
Terraform 101
 
Chaos is a ladder !
Chaos is a ladder !Chaos is a ladder !
Chaos is a ladder !
 
Natively clouded Journey
Natively clouded JourneyNatively clouded Journey
Natively clouded Journey
 
Deep Learning - Continuous Operations
Deep Learning - Continuous Operations Deep Learning - Continuous Operations
Deep Learning - Continuous Operations
 
Terraform 101
Terraform 101Terraform 101
Terraform 101
 
Machine Learning - Continuous operations
Machine Learning - Continuous operationsMachine Learning - Continuous operations
Machine Learning - Continuous operations
 
Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]Modern Monitoring [ with Prometheus ]
Modern Monitoring [ with Prometheus ]
 
Git internals
Git internalsGit internals
Git internals
 

Dernier

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 

Dernier (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 

Helm intro

  • 1. FullStack Developers Israel Haggai Philip Zagury | DevOps Architect & Group Lead Tikal Knowledge LTD A HELM INTRODUCTION OR WHY EVERYONE SHOULD BE USING HELM What the HELM !?
  • 2. FullStack Developers Israel SELF INTRODUCTION ▸ My open thinking and open techniques ideology is driven by Open Source technologies and the collaborative manner defining my M.O. ▸ My solution driven approach is strongly based on hands-on and deep understanding of Operating Systems, Applications stacks and Software languages, Networking, Cloud in general and today more an more Cloud Native solutions. HAGGAI PHILIP ZAGURY - DEVOPS ARCHITECT AND GROUP TECH LEAD
  • 4. FullStack Developers Israel HELM INTRODUCTION AGENDA ‣ Introduction to what helm is ‣ Life before HELM ‣ Intro - sample app ‣ demo ‣ Life with HELM ‣ HELM Architecture ‣ Real life examples
  • 5. FullStack Developers Israel HELM INTRODUCTION kube-systemdefaultkube-public dns Tillerdashboardmsa-api ASSUMPTIONS | PERQUISITES ‣ You know what kubernetes is: ‣ Namespaces [link] ‣ Labels & Selectors [link] ‣ Deployments [link] ‣ Pods [link] ‣ Services [link] Resource Definitions
  • 8. FullStack Developers Israel INTRODUCTION TO HELM OUR “COMPLICATED” MICRO SERVICE APPLICATION / -> GET "pings" /ping -> SET "pings" + 1 /isAlive -> return “It's aaaalive!” { pings: Int }
  • 9. FullStack Developers Israel INTRODUCTION TO HELM OUR “COMPLICATED” MICRO SERVICE APPLICATION Status Poller / -> GET "pings" /ping -> SET "pings" + 1 /isAlive -> return “It's aaaalive!” { pings: Int } curl -s -X POST “${API_URL}/ping” curl -s "${API_URL}/" read every 1 sec Increment by 1 every 1 sec Pinger
  • 10. FullStack Developers Israel INTRODUCTION TO HELM OUR “COMPLICATED” MICRO SERVICE APPLICATION Status Poller / -> GET "pings" /ping -> SET "pings" + 1 /isAlive -> return “It's aaaalive!” { pings: Int } curl -s -X POST “${API_URL}/ping” curl -s "${API_URL}/" read every 1 sec Increment by 1 every 1 sec Pinger
  • 11. FullStack Developers Israel INTRODUCTION TO HELM OUR “COMPLICATED” MICRO SERVICE APPLICATION - DOCKERIZED Status Poller / -> GET "pings" /ping -> SET "pings" + 1 /isAlive -> return “It's aaaalive!” { pings: Int } curl -s -X POST “${API_URL}/ping” curl -s "${API_URL}/" read every 1 sec Increment by 1 every 1 sec Pinger
  • 12. FullStack Developers Israel INTRODUCTION TO HELM GET THE DEMO CODE ▸ https://github.com/shelleg/msa-demo-app
  • 13. FullStack Developers Israel INTRODUCTION TO HELM PLANNING OUR DEPLOYMENT ▸ Each micro service has a build process which pushes the container to a docker registry. ▸ Docker registry is available to the k8s cluster during deployment (with or without authentication depending on the deployment)
  • 14. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE
  • 15. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ redis deployment + service for redis
  • 16. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ redis deployment + service for redis
  • 17. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ msa-pinger deployment ‣ redis deployment + service for redis
  • 18. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ msa-pinger deployment ‣ redis deployment + service for redis ‣ msa-poller deployment
  • 19. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ msa-pinger deployment ‣ redis deployment + service for redis ‣ msa-poller deployment ‣ msa-demo namespace
  • 20. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ msa-pinger deployment ‣ redis deployment + service for redis ‣ persistent volume for redis data ‣ msa-poller deployment ‣ msa-demo namespace
  • 21. FullStack Developers Israel INTRODUCTION TO HELM DEPLOYMENT SEQUENCE ‣ msa-api deployment + service for the msa-api ‣ msa-pinger deployment ‣ redis deployment + service for redis ‣ persistent volume for redis data ‣ configmaps / secrets for all components ‣ msa-poller deployment ‣ msa-demo namespace
  • 22. FullStack Developers Israel INTRODUCTION TO HELM KUBERNETES “NATIVE” WAY ▸ Create a namespace:
 kubectl create namespace msa-demo --dry-run -o yaml > msa-demo-ns.yml ▸ Create a deployment + service for redis:
 kubectl run redis --image=redis --port=6379 --expose --dry-run -o yaml > redis.yml ▸ Create a deployment + service for msa-api:
 kubectl run msa-api --image=shelleg/msa-api:config --port=8080 —expose --image-pull- policy=Always --dry-run -o yaml > msa-api.yml

  • 23. FullStack Developers Israel INTRODUCTION TO HELM KUBERNETES “NATIVE” WAY ▸ Create a deployment for msa-pinger:
 kubectl run msa-pinger --image=shelleg/msa-pinger:latest --env="API_URL=msa-api: 8080" --env="DEBUG=true" --dry-run -o yaml > msa-pinger.yml ▸ Create a deployment for msa-poller:
 kubectl run msa-poller --image=shelleg/msa-poller:latest --env="API_URL=msa-api:8080" --dry-run -o yaml > msa-pinger.yml
  • 25. FullStack Developers Israel INTRODUCTION TO HELM WE NOW HAVE A BUNCH OF FILES DESCRIBING OUR APPLICATION . |-- msa-api.yml |-- msa-demo-ns.yml |-- msa-pinger.yml |-- msa-poller.yml `-- redis.yml 0 directories, 5 files apiVersion: v1 kind: Service metadata: creationTimestamp: null name: msa-api spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: run: msa-api status: loadBalancer: {} apiVersion: apps/v1beta1 kind: Deployment metadata: creationTimestamp: null labels: run: msa-api name: msa-api spec: replicas: 1 selector: matchLabels: run: msa-api strategy: {} template: metadata: creationTimestamp: null labels: run: msa-api spec: containers: - image: shelleg/msa-api:config imagePullPolicy: Always
  • 26. FullStack Developers Israel INTRODUCTION TO HELM SO WHY DO WE NEED HELM ?! ▸ We want to better control “what goes where” e.g ports ▸ Container image versions ?! (is the only change between releases) ▸ Manage Dependencies ▸ Update components individually updating things like image versions e.g msa-api:latest -> msa-api:config ▸ Write once run on any cluster ▸ Reproducible & Shareable resource definition specs - TEMPLATES apiVersion: v1 kind: Service metadata: creationTimestamp: null name: msa-api spec: ports: - port: {{ variable }} protocol: TCP targetPort: {{ variable }} selector: run: msa-api status: loadBalancer: {}
  • 27. FullStack Developers Israel INTRODUCTION TO HELM TEMPLATES ▸ Not a foreign concept … Jinja / erb / jsonnet {% for key, svc in services.items() %} upstream {{ key }} { least_conn; {% for server in svc.delegate %} server {{ server }}:{{ svc.ports[0].split(':')[0] }} weight=10 max_fails=3 fail_timeout=30s; {% endfor %} } {% endfor %} // A function that returns an object. local Person(name='Alice') = { name: name, welcome: 'Hello ' + name + '!', }; { person1: Person(), person2: Person('Bob'), } <% @sudoers_users.each do |user| -%> <%= user %> ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL <% end -%> # Members of the sysadmin group may gain root privileges %sysadmin ALL=(ALL) <%= "NOPASSWD:" if @passwordless %>ALL
  • 28. FullStack Developers Israel INTRODUCTION TO HELM SO WHY DO WE NEED HELM ?! ▸ Kubernetes native discovery mechanism is focused around the Service / deployment ▸ Helm Charts are Application focused
  • 30. FullStack Developers Israel HELM INTRODUCTION IN A NUT SHELL -> HELM MANAGES CHARTS, RELEASES & VERSIONS . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | `-- service.yaml `-- values.yaml 2 directories, 6 files ‣ Describe your deployment + service / any other kubernetes Resource Definition apiVersion: v1 description: My Cool Chart engine: gotpl name: myCoolChart version: 0.1.0
  • 31. FullStack Developers Israel HELM INTRODUCTION IN A NUT SHELL -> HELM MANAGES CHARTS . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | `-- service.yaml `-- values.yaml 2 directories, 6 files ‣ Use values.yaml ‣ A rich templating system
 for making charts generic
 yet highly customisable image: repository: shelleg/msa-api tag: config pullPolicy: IfNotPresent service: type: ClusterIP port: 8080 …
  • 33. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - A KUBERNETES CLUSTER
  • 34. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - A HELMSMAN WORKSTATION HELM CLI
  • 35. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - HELM INIT TillerHELM CLI helm init ~/.helm/… helm init —client-only
  • 36. FullStack Developers Israel HELM INTRODUCTION HELM CLIENT ▸ Local chart development ▸ Managing repositories ▸ Interacting with the Tiller server ▸ Sending charts to be installed ▸ Asking for information about releases ▸ Requesting upgrading or uninstalling of existing releases ▸ It can be used to serve your local charts via http … ▸
  • 37. FullStack Developers Israel HELM INTRODUCTION TILLER - “HELM SERVER” ▸ Listening for incoming requests from the Helm client ▸ Combining a chart and configuration to build a release ▸ Installing charts into Kubernetes, and then tracking the subsequent release ▸ Upgrading and uninstalling charts by interacting with Kubernetes
  • 38. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - HELM INIT TillerHELM CLI helm init ~/.helm/… helm init —client-only MANAGE CHARTS MANAGE RELEASES
  • 39. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - INSTALL AN EXISTING CHART TillerHELM CLI CHAOSKUBE
  • 41. FullStack Developers Israel HELM INTRODUCTION CHAOSKUBE ▸ chaoskube is a “chaos-monkey lite” it basically takes down pod based on a schedule to test you resilience (and there are some tweaks via configuration) https://github.com/linki/chaoskube
  • 42. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - WORK WITH REPOS TillerHELM CLI CHAOSKUBE HELM REPO helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com local http://127.0.0.1:8879/charts
  • 43. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE TillerHELM CLI STABLE/ CHAOSKUBE HELM REPO helm install stable/chaoskube
  • 44. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE TillerHELM CLI STABLE/ CHAOSKUBE HELM REPO CHAOSKUBE RELEASE 1.0
  • 45. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml 2 directories, 7 files apiVersion: v1 appVersion: 0.10.0 description: Chaoskube periodically kills random pods in your cluster. engine: gotpl home: https://github.com/linki/chaoskube maintainers: - email: linki+kubernetes.io@posteo.de name: linki name: chaoskube sources: - https://github.com/linki/chaoskube version: 0.10.0 Chart and image version {not always identical …} Chart.yaml
  • 46. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE |-- Chart.yaml |-- OWNERS |-- README.md |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- clusterrole.yaml | |-- clusterrolebinding.yaml | |-- deployment.yaml | |-- role.yaml | |-- rolebinding.yaml | `-- serviceaccount.yaml `-- values.yaml 1 directory, 12 files ▸ /templates for your resource definitions such as: ▸ Service ▸ Deployment ▸ configMap ▸ Secret ▸ Daemonset ▸ Pod ▸ Ingress ▸ Job ▸ persistentvolume ▸ persistentvolumeclaim ▸ Service account
  • 47. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE # container name name: chaoskube # docker image image: quay.io/linki/chaoskube # docker image tag imageTag: v0.10.0 # number of replicas to run replicas: 1 # interval between pod terminations interval: 10m # label selector to filter pods by, e.g. app=foo,stage!=prod labels: # annotation selector to filter pods by, e.g. chaos.alpha.kubernetes.io/enabled=true annotations: … values.yaml |-- Chart.yaml |-- OWNERS |-- README.md |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- clusterrole.yaml | |-- clusterrolebinding.yaml | |-- deployment.yaml | |-- role.yaml | |-- rolebinding.yaml | `-- serviceaccount.yaml `-- values.yaml 1 directory, 12 files
  • 48. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE # container name name: chaoskube serviceaccount.yaml values.yaml |-- Chart.yaml |-- OWNERS |-- README.md |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- clusterrole.yaml | |-- clusterrolebinding.yaml | |-- deployment.yaml | |-- role.yaml | |-- rolebinding.yaml | `-- serviceaccount.yaml `-- values.yaml 1 directory, 12 files {{- if .Values.rbac.create -}} apiVersion: v1 kind: ServiceAccount metadata: labels: {{ include "labels.standard" . | indent 4 }} name: {{ printf "%s-%s" .Release.Name .Values.name }} {{- end -}} Control Structures: { render based on boolean }
  • 49. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml 2 directories, 7 files {{/* Expand the name of the chart. */}} {{- define "chaoskube.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Create a default fully qualified app name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). If release name contains chart name it will be used as a full name. */}} {{- define "chaoskube.fullname" -}} {{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} … Custom functions + set default based on Environment _helpers.tpl
  • 50. FullStack Developers Israel HELM INTRODUCTION CAHRTS STRUCTURE chaoskube is running and will kill arbitrary pods every {{ .Values.interval }}. You can follow the logs to see what chaoskube does: POD=$(kubectl -n {{ .Release.Namespace }} get pods - l='release={{ template "chaoskube.fullname" . }}' -- output=jsonpath='{.items[0].metadata.name} ') kubectl -n {{ .Release.Namespace }} logs -f $POD {{ if .Values.dryRun }} You are running in dry-run mode. No pod is actually terminated. {{ end -}} NOTES.txt ▸ A HELM standard way of showing information the end user can use in order to access the application.
  • 51. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE TillerHELM CLI STABLE/ CHAOSKUBE HELM REPO CHAOSKUBE RELEASE 1.0 helm list NAME REVISION UPDATED STATUS CHART NAMESPACE anxious-hummingbird 1 Wed Aug 15 21:51:26 2018 DEPLOYED chaoskube-0.9.0 default laughing-orangutan 1 Wed Aug 15 22:14:40 2018 DEPLOYED chaoskube-0.9.0 default
  • 52. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE - MANY REPOSITORY OPTIONS TillerHELM CLI STABLE/ CHAOSKUBE HELM REPO CHAOSKUBE RELEASE 1.0 helm list NAME REVISION UPDATED STATUS CHART NAMESPACE anxious-hummingbird 1 Wed Aug 15 21:51:26 2018 DEPLOYED chaoskube-0.9.0 default laughing-orangutan 1 Wed Aug 15 22:14:40 2018 DEPLOYED chaoskube-0.9.0 default { …}
  • 53. FullStack Developers Israel HELM INTRODUCTION HELM ARCHITECTURE TillerHELM CLI HELM REPO CHART 1 RELEASE 14 CHART 2 RELEASE 6 CHART 2 RELEASE 6 CHART 1 RELEASE 14CHART 1 RELEASE 14 CHART 1 CHART 2 helm list NAME REVISION UPDATED STATUS CHART NAMESPACE youngling-quokka 1 Sun Sep 2 00:37:13 2018 DEPLOYED chaoskube-0.10.0 msa-demo kubectl get configmaps --namespace=kube-system | grep youngling-quokka youngling-quokka.v1 1 29s
  • 55. FullStack Developers Israel INTRODUCTION TO HELM OUR “COMPLICATED” MICRO SERVICE APPLICATION - DOCKERIZED Status Poller / -> GET "pings" /ping -> SET "pings" + 1 /isAlive -> return “It's aaaalive!” { pings: Int } curl -s -X POST “${API_URL}/ping” curl -s "${API_URL}/" read every 1 sec Increment by 1 every 1 sec Pinger
  • 56. FullStack Developers Israel INTRODUCTION TO HELM CHART PER COMPONENT |-- pinger | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml |-- poller | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml |-- redis | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml |-- api | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml
  • 57. FullStack Developers Israel INTRODUCTION TO HELM CHART PER COMPONENT |-- pinger | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml |-- poller | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml |-- redis | |-- api | |-- Chart.yaml | |-- charts | |-- templates | | |-- NOTES.txt | | |-- _helpers.tpl | | |-- deployment.yaml | | |-- ingress.yaml | | `-- service.yaml | `-- values.yaml | Use stable/redis
  • 58. FullStack Developers Israel INTRODUCTION TO HELM “MSA” CHART . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- api-deployment.yaml | |-- api-service.yaml | |-- deployment.yaml | |-- pinger-deployment.yaml | |-- poller-deployment.yaml | `-- service.yaml `-- values.yaml
  • 59. FullStack Developers Israel INTRODUCTION TO HELM VALUES api: name: api replicaCount: 1 image: repository: shelleg/msa-api tag: config pullPolicy: Always containerPort: 8080 service: enabled: true type: ClusterIP port: 8080 resources: {} nodeSelector: {} tolerations: [] affinity: {} pinger: name: pinger replicaCount: 1 image: repository: shelleg/msa-pinger tag: latest pullPolicy: Always service: enabled: false resources: {} nodeSelector: {} tolerations: [] affinity: {} poller: name: poller replicaCount: 1 image: repository: shelleg/msa-poller tag: latest pullPolicy: Always service: enabled: false resources: {} nodeSelector: {} tolerations: [] affinity: {} values.yaml | This works ;) but …
  • 60. FullStack Developers Israel INTRODUCTION TO HELM TEMPLATES api-deployment.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ .Values.api.name }} labels: app: {{ .Values.api.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.api.replicaCount }} selector: matchLabels: app: {{ .Values.api.name }} release: {{ .Release.Name }} template: metadata: labels: app: {{ .Values.api.name }} release: {{ .Release.Name }} api-service.yaml apiVersion: v1 kind: Service metadata: name: {{ .Values.api.name }} labels: app: {{ .Values.api.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: type: {{ .Values.api.service.type }} ports: - port: {{ .Values.api.service.port }} targetPort: http protocol: TCP name: http selector: app: {{ .Values.api.name }} release: {{ .Release.Name }}
  • 61. FullStack Developers Israel INTRODUCTION TO HELM Compose chart Package chart Store chart in shared/private repo | helm install myrepo/msa —set nameOverride: api —set service.enabled=true —name api | helm install myrepo/msa —set nameOverride: pinger —name pinger | helm install myrepo/msa —set nameOverride: poller —name poller
  • 62. FullStack Developers Israel INTRODUCTION TO HELM HELPERS & VALUES ▸ nameOverride: [ e.g. api | pinger | poller ]
  • 63. FullStack Developers Israel INTRODUCTION TO HELM HELPERS & VALUES ▸ nameOverride: [ api | pinger | poller ] {{- define “chart.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} _helpers.yaml
  • 64. FullStack Developers Israel INTRODUCTION TO HELM HELPERS & VALUES ▸ nameOverride: [ api | pinger | poller ] {{- define “chart.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} _helpers.yaml | Make the chart reusable
  • 65. FullStack Developers Israel INTRODUCTION TO HELM HELPERS & VALUES ▸ nameOverride: [ api | pinger | poller ] ▸ service.enabled: true {{- define “chart.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} _helpers.yaml {{- if .Values.service.enabled }} {{- end }} service.yaml | Make the chart reusable
  • 66. FullStack Developers Israel INTRODUCTION TO HELM HELPERS & VALUES ▸ nameOverride: [ api | pinger | poller ] ▸ service.enabled: true {{- define “chart.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} _helpers.yaml {{- if .Values.service.enabled -}} {{- end -}} service.yaml | Make the chart reusable | Make entire RD optional
  • 67. FullStack Developers Israel INTRODUCTION TO HELM TEMPLATES api-deployment.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ .Values.api.name }} labels: app: {{ .Values.api.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.api.replicaCount }} selector: matchLabels: app: {{ .Values.api.name }} release: {{ .Release.Name }} template: metadata: labels: app: {{ .Values.api.name }} release: {{ .Release.Name }} This works ;)
 but … deployment.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ .Values.name }} labels: app: {{ .Values.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ .Values.name }} release: {{ .Release.Name }} template: metadata: labels: app: {{ .Values.name }} release: {{ .Release.Name }} This is D.R.Y !
  • 68. FullStack Developers Israel INTRODUCTION TO HELM TEMPLATES api-service.yaml apiVersion: v1 kind: Service metadata: name: {{ .Values.api.name }} labels: app: {{ .Values.api.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: type: {{ .Values.api.service.type }} ports: - port: {{ .Values.api.service.port }} targetPort: http protocol: TCP name: http selector: app: {{ .Values.api.name }} release: {{ .Release.Name }} This works ;)
 but … service.yaml {{- if .Values.service.enabled -}} apiVersion: v1 kind: Service metadata: name: {{ .Values.api.name }} labels: app: {{ .Values.api.name }} chart: {{ template "msa.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: type: {{ .Values.api.service.type }} ports: - port: {{ .Values.api.service.port }} targetPort: http protocol: TCP name: http … {{- end -}} This is D.R.Y !
  • 69. FullStack Developers Israel INTRODUCTION TO HELM “MSA” CHART . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- service.yaml `-- values.yaml my-chart-repo/msa-0.1.0.gz apiVersion: v1 appVersion: "1.0" description: msg chart for Kubernetes name: api version: 0.1.0
  • 70. FullStack Developers Israel INTRODUCTION TO HELM Compose chart Package chart Store chart in shared/private repo | helm install myrepo/msa —set nameOverride: api —set service.enabled=true —name api | helm install myrepo/msa —set nameOverride: pinger —name pinger | helm install myrepo/msa —set nameOverride: poller —name poller | helm install stable/redis —name redis Public repo
  • 71. FullStack Developers Israel INTRODUCTION TO HELM MANAGING DEPENDENCIES - A.K.A UMBRELLA CHAT . |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- dependencies.yaml `-- values.yaml dependencies: - name: msa repository: file://../msa version: 0.1.0 - name: redis repository: stable/redis version: x.x.x
  • 73. FullStack Developers Israel Informational -> you don’t have / need to do it ;) Get your hands dirty -> follow the instructions HOW TO USE THIS LAB ?!
  • 75. FullStack Developers IL KUBERNETES 101 | GETTING STARTED MINIKUBE ▸ Minikube supports Kubernetes features such as: ▸ DNS ▸ NodePorts ▸ ConfigMaps and Secrets ▸ Dashboards ▸ Container Runtime: Docker, rkt and CRI-O ▸ Enabling CNI (Container Network Interface) ▸ Ingress
  • 76. FullStack Developers IL KUBERNETES 101 | GETTING STARTED WHY ▸ Good for POC, QuickStarts and Demo’s ▸ Gives a taste of Kubernetes and how to work with it, without going through a complex setup
  • 77. FullStack Developers IL KUBERNETES 101 | GETTING STARTED INSTALLING MINIKUBE ▸ Install kubectl link ▸ Install minikube link
  • 78. FullStack Developers IL KUBERNETES 101 | GETTING STARTED MINIKUBE START ▸ minikube start ▸ 20:31 $ minikube start Starting local Kubernetes v1.9.0 cluster... Starting VM... Getting VM IP address... Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. Loading cached images from config file.
  • 79. FullStack Developers IL INTRODUCTION TO HELM MACOSX VIA HOMEBREW brew update brew install kubernetes-cli kubernetes-helm brew cask install minikube
  • 80. FullStack Developers IL INTRODUCTION TO HELM UBUNTU/DEBIAN sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/ sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube- linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
  • 81. FullStack Developers IL INTRODUCTION TO HELM CENTOS/RHEL/FEDORA cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpghttps:// packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF yum install -y kubectl curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-linux- amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
  • 82. FullStack Developers IL INTRODUCTION TO HELM WINDOWS Use the Chocolaty package manager: choco install kubernetes-cli kubernetes-helm Download Minikube from: https://github.com/kubernetes/minikube/releases Download the minikube-windows-amd64.exe file, rename it to minikube.exe and add it to your path.
  • 84. FullStack Developers Israel INTRODUCTION TO HELM INSTALL HELM ON KUBERNETES helm init --service-account helm --dry-run --debug > helm-init.yml kubectl create -f helm-rbac-cluster-wide.yml kubectl create -f helm-init.yml apiVersion: v1 kind: ServiceAccount metadata: name: helm namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: helm roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: helm namespace: kube-system
  • 85. FullStack Developers Israel INTRODUCTION TO HELM CONFIGURE HELM REPOSITORIES helm repo add stable https://kubernetes-charts.storage.googleapis.com
  • 86. FullStack Developers Israel INTRODUCTION TO HELM INSTALL HELM-S3 PLUGIN helm plugin install https://github.com/hypnoglow/helm-s3.git -> If you are planning on pushing to your s3 based helm repo -> get your own repo and setup the required permissions. -> I our case you will be using it for read / download purposes which is already public / open source.
  • 87. FullStack Developers Israel INTRODUCTION TO HELM ADD THE MSA-CHARTS S3 HELM REPOSITORY helm repo add msa-charts s3://msa-charts/ s3 plugin updates the index.yaml on each version updload
  • 88. FullStack Developers Israel INTRODUCTION TO HELM DEPLOY YOUR UMBRELLA … kubectl create namespace msa-umbrella helm dep build ./helm/msa-umbrella helm install --name v1 --namespace msa-umbrella ./helm/msa-umbrella
  • 89. FullStack Developers Israel INTRODUCTION TO HELM DEPLOY YOUR UMBRELLA … kubectl create namespace msa-umbrella helm dep build ./helm/msa-umbrella helm install --name v1 --namespace msa-umbrella ./helm/msa-umbrella
  • 90. FullStack Developers Israel INTRODUCTION TO HELM CHECK YOUR UMBRELLA … helm list # view helm releases which are installed kubectl -n msa-umbrella get po,svc,deploy # view msa-umbrella pods, services & deployments
  • 91. FullStack Developers Israel INTRODUCTION TO HELM RECAP ▸ Helm is awesome -> ( completes Kubernetes ) ▸ Application centric solution ▸ Flexible templating language ▸ Well integrated into workflows such as GitKube, Scafold and others
  • 92. FullStack Developers Israel INTRODUCTION TO HELM USE [ DON’T OVER USE ] YOUR IMAGINATION ▸ Custom Resource Definitions { e.g istio } ▸ Common monitoring RD’s { e.g prometheus } ▸ Common logging RD’s { e.g fluentd } ▸ Ingresses (yes / no) ▸ Services (type: NodePort, ClusterIp, LoadBalancer) ▸ Provider specific configs { on-prem vs. cloud } ▸ | {{ if .Values.monitoring.enabled }} | {{ if .Values.logging.enabled }} | {{ if .Values.service.nodeIp }}
  • 93. FullStack Developers Israel So Whats Next ? …
  • 94. FullStack Developers Israel INTRODUCTION TO HELM kubectl create namespace for build … CONTINUES INTEGRATION PROCESS [ JENKINS || GITLAB || “FOOBAR” ]
  • 95. FullStack Developers Israel INTRODUCTION TO HELM JENKINS PIPELINE
  • 96. FullStack Developers Israel INTRODUCTION TO HELM PIPELINE LIBRARY - NOW SUPPORTS HELM LIFECYCLE
  • 97. FullStack Developers Israel HELM INTRODUCTION CREDITS ▸ Mark Kirshner & Anatoly Rabkin ▸ Helm documentation -> https://docs.helm.sh/ ▸ ChaosKube helm chart -> https://github.com/helm/charts/tree/master/stable/ chaoskube ▸ Icons -> https://github.com/octo-technology/kubernetes-icons ▸ Kubernetes docs -> https://kubernetes.io/docs/home/?path=users
  • 98. FullStack Developers Israel We Love Tech Thank you for tuning in