Helm Charts 101
‫ا‬‫ﻹ‬‫ﯾ‬‫ﺪ‬‫ا‬‫ع‬‫ا‬‫ﻟ‬‫ﺤ‬‫ﺜ‬‫ﯿ‬‫ﺚ‬‫ﻟ‬‫ﻠ‬‫ﺘ‬‫ﻄ‬‫ﺒ‬‫ﯿ‬‫ﻘ‬‫ﺎ‬‫ت‬‫ﻋ‬‫ﻠ‬‫ﻰ‬‫ﻛ‬‫ﻮ‬‫ﺑ‬‫ﺮ‬‫ﻧ‬‫ﯿ‬‫ﺘ‬‫ﺰ‬
By: @abdennour - SRE
At: 21/01/1442 – 09/09/2020
> whoami
- @abdennour
- Starting with k8s on AWS at 2017
- Teaching SRE topics ( Ansible Course, k8s, .. etc)
> helm -n agenda list
- Problematic - ‫ا‬‫ﻹ‬‫ﺷ‬‫ﻜ‬‫ﺎ‬‫ﻟ‬‫ﯿ‬‫ﺔ‬
- Engineering Behind Helm - ‫ا‬‫ﻷ‬‫ر‬‫ﺿ‬‫ﯿ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﮭ‬‫ﻨ‬‫ﺪ‬‫ﺳ‬‫ﯿ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
- Concepts: Helm vs Chart vs Release – ‫ﻣ‬‫ﻔ‬‫ﺎ‬‫ھ‬‫ﯿ‬‫ﻢ‬
- High Level Architecture – ‫ا‬‫ﻟ‬‫ﺘ‬‫ﺼ‬‫ﻤ‬‫ﯿ‬‫ﻢ‬‫ا‬‫ﻟ‬‫ﮭ‬‫ﯿ‬‫ﻜ‬‫ﻠ‬‫ﻲ‬
- Helm Basic commands – ‫أ‬‫و‬‫ا‬‫ﻣ‬‫ﺮ‬‫ﺗ‬‫ﻨ‬‫ﻔ‬‫ﯿ‬‫ﺬ‬‫ھ‬‫ﻠ‬‫ﻢ‬
- Deal with Community Charts - +1000 charts – ‫ا‬‫ﻟ‬‫ﺘ‬‫ﻌ‬‫ﺎ‬‫ﻣ‬‫ﻞ‬‫ﻣ‬‫ﻊ‬‫ھ‬‫ﻠ‬‫ﻢ‬‫ﺗ‬‫ﺸ‬‫ﺮ‬‫ا‬‫ت‬
- Implement your own Chart - ‫ا‬‫ﺑ‬‫ﻦ‬‫ا‬‫ﻟ‬‫ﺘ‬‫ﺸ‬‫ﺎ‬‫ر‬‫ت‬‫ا‬‫ﻟ‬‫ﺨ‬‫ﺎ‬‫ﺻ‬‫ﺔ‬‫ﺑ‬‫ﻚ‬
- Demo ( distributed ) - ‫ﺗ‬‫ﻄ‬‫ﺒ‬‫ﯿ‬‫ﻖ‬‫ﻋ‬‫ﻤ‬‫ﻠ‬‫ﻲ‬
‫ا‬‫ﻹ‬‫ﺷ‬‫ﻜ‬‫ﺎ‬‫ﻟ‬‫ﯿ‬‫ﺔ‬
Problematic
Problematic ‫ا‬‫ﻹ‬‫ﺷ‬‫ﻜ‬‫ﺎ‬‫ﻟ‬‫ﯿ‬‫ﺔ‬-
● Your App = Not Only image
● App = Image + YAML files
● A lot of YAML files
● ‫ﻓ‬‫ﻮ‬‫ﺿ‬‫ﻰ‬‫ا‬‫ﻟ‬‫ﯿ‬‫ﺎ‬‫ﻣ‬‫ﻞ‬
● Hard Coded Manifests
● Repeating Your Self
● ‫ﺻ‬‫ﻌ‬‫ﻮ‬‫ﺑ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﻨ‬‫ﺸ‬‫ﺮ‬‫و‬‫ا‬‫ﻟ‬‫ﺘ‬‫ﻮ‬‫ز‬‫ﯾ‬‫ﻊ‬
● Hard Distribution
● No versioning
App 1 App 2
nodeJs + Postgres Go + Postgres
Problematic
● Just Deploying YAML
● No Business Domain
● No Boundries
● <K get pods>
● <K get PVC>
● No <k get apps>
● What about namespaces
● No package Manager for
k8s apps
Pods
Services
App X
ConfigMap
‫ا‬‫ﻟ‬‫ﮭ‬‫ﻨ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
Engineering Behind Helm
Engineering Behind Helm - ‫ھ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
● Release Engineering – ‫ھ‬‫ﻨ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻹ‬‫ط‬‫ﻼ‬‫ق‬
● Software Engineering – ‫ھ‬‫ﻨ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺒ‬‫ﺮ‬‫ﻣ‬‫ﺠ‬‫ﯿ‬‫ﺎ‬‫ت‬
● Reliability Engineering – ‫ھ‬‫ﻨ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﻤ‬‫ﻮ‬‫ﺛ‬‫ﻮ‬‫ﻗ‬‫ﯿ‬‫ﺔ‬
‫ﺳ‬‫ﺆ‬‫ا‬‫ل‬-‫ﺟ‬‫ﻮ‬‫ا‬‫ب‬
‫ﻣ‬‫ﺎ‬‫ھ‬‫و‬‫ﻣ‬‫د‬‫ﯾ‬‫ر‬‫ا‬‫ﻟ‬‫ﺣ‬‫ز‬‫م‬‫ﻟ‬‫ﺗ‬‫ط‬‫ﺑ‬‫ﯾ‬‫ﻘ‬‫ﺎ‬‫ت‬‫ا‬‫ﻟ‬‫ﻧ‬‫و‬‫د‬‫؟‬
What’s the Package Manager for NodeJS Apps?
‫ﺳ‬‫ﺆ‬‫ا‬‫ل‬-‫ﺟ‬‫ﻮ‬‫ا‬‫ب‬
2.‫ﻣ‬‫ﺎ‬‫ھ‬‫ﻲ‬‫ﺻ‬‫ﯾ‬‫ﻐ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺣ‬‫ز‬‫م‬‫ﺗ‬‫ط‬‫ﺑ‬‫ﯾ‬‫ﻘ‬‫ﺎ‬‫ت‬‫ا‬‫ﻟ‬‫ﺟ‬‫ﺎ‬‫ﻓ‬‫ﺎ‬‫؟‬
What’s the package format of Java apps ?
● Release Engineering
● Software Engineering
● Reliability Engineering
Yaml Code
Package
Manager
Package a Software
Easily install Dependencies
Track of what software installed
Upgrade installed software
Manage versions
....
Engineering Behind Helm - ‫ا‬‫ﻟ‬‫ﮭ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
● Release Engineering
● Software Engineering
● Reliability Engineering Code
Deployment Env.
Artifact
Package
Build & Deploy
Build
&
push
Pull&
deploy
Engineering Behind Helm - ‫ا‬‫ﻟ‬‫ﮭ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
V1.3
V1.4
‫ﺳ‬‫ﺆ‬‫ا‬‫ل‬-‫ﺟ‬‫ﻮ‬‫ا‬‫ب‬
3.‫ﻣ‬‫ﺎ‬‫ھ‬‫ﻲ‬‫ﺻ‬‫ﯾ‬‫ﻐ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺣ‬‫ز‬‫م‬‫ﺗ‬‫ط‬‫ﺑ‬‫ﯾ‬‫ﻘ‬‫ﺎ‬‫ت‬‫ا‬‫ﻟ‬‫ﻛ‬‫و‬‫ﺑ‬‫ر‬‫ﻧ‬‫ﯾ‬‫ﺗ‬‫ز‬‫؟‬
What’s the package format of K8s apps ?
● Release Engineering
● Software Engineering
● Reliability Engineering
Event - RELENG 2014
Engineering Behind Helm - ‫ا‬‫ﻟ‬‫ﮭ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
● Release Engineering
● Software Engineering
● Reliability Engineering
- DRY – Don’t Repeat Yourself
- Reusability
- Modularity
- Clean Code
- Design Patterns
- ….
Engineering Behind Helm - ‫ا‬‫ﻟ‬‫ﮭ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
● Release Engineering
● Software Engineering
● Reliability Engineering
- Codify ALL and ALL Operations
- Why ? Code Don’t Lie == Reliability
- Code vs Adhoc Scripting
Engineering Behind Helm - ‫ھ‬‫ـ‬‫ﻨ‬‫ـ‬‫ﺪ‬‫ﺳ‬‫ﺔ‬‫ا‬‫ﻟ‬‫ﺪ‬‫ا‬‫ﻋ‬‫ﻤ‬‫ﺔ‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬
- Codify ALL and ALL Operations
- Why ? Code Don’t Lie == Reliability
- Code vs Adhoc Scripting:
● Code is controlled by version control system
● Code is elegant, readable, maintainable
● Code is tested & quality gates must be passed.
● Code means Code-Review is enabled thru pull-
requests, then, risks/bugs are mitigated
● Code means you can continuously integrate your
Changes thru CI/CD pipeline.
‫ﻣ‬‫ﺎ‬‫ھ‬‫ﻮ‬‫ھ‬‫ﻠ‬‫ﻢ‬‫؟‬
What’s Helm ?
What’s Helm ? ‫ﻣ‬‫ﺎ‬‫ھ‬‫ﻮ‬‫ھ‬‫ﻠ‬‫ﻢ‬‫؟‬-
- Package Manager for k8s Apps
- Manage the lifecycle of any
application deployed on k8s cluster
- Engine to calculate the final YAML Code
from YAML templates + Params (values)
What’s Helm Chart ? ‫ﻣ‬‫ﺎ‬‫ھ‬‫ﻮ‬‫ھ‬‫ﻠ‬‫ﻢ‬‫؟‬-
- The package Format is called “Chart”
or “Helm Chart”
- A chart is a collection of files that
describe a related set of k8s resources.
- Repository of Charts is called
“Chartmuseum”
What’s Helm Release ?
- Helm Chart is deployed with
customizing default Values.
- Each deployment of Helm Chart is called
Helm Release
‫ﻛ‬‫ﯿ‬‫ﻒ‬‫ﺗ‬‫ﺸ‬‫ﺘ‬‫ﻐ‬‫ﻞ‬‫؟‬
How Helm Chart Work ?
How Does Helm Work ? – ‫ﻛ‬‫ﯿ‬‫ﻒ‬‫ﺗ‬‫ﺸ‬‫ﺘ‬‫ﻐ‬‫ﻞ‬
- Chart Templates ( i.e : chart/templates/deployment.yaml )
- Chart Default Values
Final YAML Manifest
How Does Helm Work ? – ‫ﻛ‬‫ﯿ‬‫ﻒ‬‫ﺗ‬‫ﺸ‬‫ﺘ‬‫ﻐ‬‫ﻞ‬
- Chart Templates ( i.e : chart/templates/deployment.yaml )
- Chart Default Values - Release Values ( My values)
Final YAML Manifest
Final Values
‫ا‬‫ﺳ‬‫ﺘ‬‫ﺨ‬‫ﺪ‬‫م‬‫ﺣ‬‫ﺰ‬‫م‬‫ا‬‫ﻟ‬‫ﮭ‬‫ﻠ‬‫ﻢ‬‫ا‬‫ﻟ‬‫ﻌ‬‫ﺎ‬‫ﻣ‬‫ﺔ‬‫؟‬
Deal with Community Helm Charts
Prerequisites - Deal with Community Helm Charts
- Having a Kubernetes Cluster
- Download/install Helm CLI locally https://helm.sh/docs/intro/install/
Steps to install Chart on Kubernetes Cluster
Identify Repository
of Chart
(museum)
• Stable
• Incubator
• …
• hub.helm.sh
Inspect
Values/Docs of
Chart
• Values.yaml
• README.MD
Prepare Your
Values for the
Release
• Prod.values.y
aml
• Staging.values
.yaml
Install The Chart
with specific
version & values
• helm install my-
release repo/chart
–version v1.2 -f
my.values.yaml
Hands-on – Install Jenkins with Helm Chart
helm install jenkinsci/jenkins --version 2.6.2
Hands-on – Install Nexus Sonatype with Helm Chart
helm install sonatype/nexus-repository-manager --version 27.0.0
‫ﻣ‬‫ﻠ‬‫ﺨ‬‫ﺺ‬‫أ‬‫و‬‫ا‬‫ﻣ‬‫ﺮ‬‫ھ‬‫ﻠ‬‫ﻢ‬‫ا‬‫ﻟ‬‫ﺘ‬‫ﻨ‬‫ﻔ‬‫ﯿ‬‫ﺬ‬‫ﯾ‬‫ﺔ‬
Common Helm Commands
Helm Commands
helm install jenkins-staging jenkinsci/jenkins --version 2.6.2
Helm Install
helm install RELEASE REPO/CHART_NAME [--version … –f .. –n .. ]
helm upgrade jenkins-staging jenkinsci/jenkins --version 2.6.2
Helm Upgrade
helm upgrade RELEASE REPO/CHART_NAME [--version … –f .. –n .. ]
helm delete jenkins-staging
Helm Delete
helm delete RELEASE
helm template jenkinsci/jenkins --version 2.6.2
Helm Template
helm template RELEASE REPO/CHART_NAME [--version … –f .. –n .. ]
Helm Commands For Repo
helm repo add stable https://kubernetes-charts.storage.googleapis.com
Helm repo add
helm repo add REPO REPO_ENDPOINT
helm repo update
Helm repo
update
helm repo update
helm repo list
Helm repo list
Helm repo list
Helm search repo elasticsearch
Helm search
Helm search [repo|hub] CHART
Build Your Charts
Steps to Implement Own Helm Chart
Scaffold a Chart
Directory
• helm create
Put your Yaml
Manifests in
Templates
Directory
• cp *.yaml my-
chart/template
s/
Externalize Values
with a consistent
design
• My-
chart/values.y
aml
Use Your Chart
• helm install my-
release ./my-chart -f
other.values.yaml
‫ﺷ‬‫ﻜ‬‫ﺮ‬‫ا‬‫ﻋ‬‫ﻠ‬‫ﻰ‬‫ا‬‫ﻟ‬‫ﻤ‬‫ﺸ‬‫ﺎ‬‫ر‬‫ﻛ‬‫ﺔ‬‫و‬‫ا‬‫ﻟ‬‫ﻤ‬‫ﺘ‬‫ﺎ‬‫ﺑ‬‫ﻌ‬‫ﺔ‬
happy helming

Helm Charts 101 - Simply Kubernetes Apps deployment