62
Helm

Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Helm

Page 2: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Besmart.Thinkopensource.

Page 3: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes
Page 4: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

WhatisHelm?HelmisatoolformanagingKubernetescharts.

Chartsarepackagesofpre-configuredresources.

Thinkofitlikeapt/yum/homebrewforKubernetes.

Page 5: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

WhyHelm?

De-factostandardfortemplatingk8sconfigsOfficialKubernetesprojectmaintainedbyCNCFRepeatableapplicationinstallationsPainlessupdatesShipswithreadytousechartsmadebythecommunitybestpracticesarebakedintoofficalcharts

Page 6: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

What'swrongwithkubectl?

ResourcesneedtobemutatedafteradeployYoucan kubectledit<resource>

But,needtoimplementyourownupdatingandrollbackordependonvendorspecifictoolingforlifecyclemanagement

Helmhelpswithlifecyclemanagmentwhileallowingyoutodefineyourinfrastructureascode

Page 7: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

HelmBasics

Page 8: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Architecture

helmclienttillerserver-sidecomponent

Page 9: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Demo:Quickstart#deploytillertokube-systemnamespacehelminit#usethe`-c`flagifyourclusteradminhasalreadydeployed#andconfiguredtillerforyou,thisprepares~/.helmhelminit-c#Deployapostgresqlinstancehelminstallstable/postgresql

Page 10: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Inspectinghelmmanagedresources#Showdeployshelmlist#Getinformationonareleasehelmstatusmy-release

Page 11: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

HelmreleasesDifferentiatemultipledeploysofachartwithreleases.

Possiblevaluescouldbe.

production , stage , integration

<customer>-production

<app>-postgresql

Thisdependsonyourorganizationsstructureandwhatyouusetheclusterfor.

Page 12: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Whatdidwejustdeploy?

Deploymentbasedon postgres imageNetworkPolicyallowingaccess.PersistentVolumeClaimforstoringdataSecretcontainingautogeneratedpostgres-password

Servicetoexposedatabaseincluster

Page 13: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Addingmetricshelmupgrademy-releasestable/postgresql\--set'metrics.enabled=true'

Wejustdeployedapostgres_exportersidecarcontainerexposingmetricsforPrometheus!

Page 14: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Rollback#simulaterollbackhelmrollback--dry-runmy-releaseold-version#actualrollbackhelmrollbackmy-releaseold-version

Page 15: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Writinghelmcharts

Page 16: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

IntializeemptyCharthelmcreatemy-app

my-app/├──charts├──Chart.yaml├──templates│├──deployment.yaml│├──_helpers.tpl│├──ingress.yaml│├──NOTES.txt│└──service.yaml└──values.yaml

Page 17: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

TemplatingTheHelmtemplatelanguageisimplementedinthestronglytypedGolanguage.

EachHelmchartcontainsatemplatesdirectorythatcontainsrelevanttemplates.

Page 18: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

NamingTemplates

Use .yaml or .tpl suffixforfilesDasherizefilenamesReflectresourcekindinnames

Page 19: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

NamingExamples

Good Badfoo-pod.yaml foo-pod.yml

my-example-podtemplates.yaml MyExamplePodTemplates.yaml

my-example-svc.yaml my-example.yaml

Page 20: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Built-inObjects

Everythingbelow Release

Chart variablewithinfosfrom Chart.yaml

Values withdatafrom values.yaml ,thecliandothersources

AcompletelistisintheHelmdocs

Page 21: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

ReleaseandChartVariables#Currentrelease{{.Release.Revision}}#Chartinfos{{.Chart.version}}

Page 22: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

ValuesThebuilt-inobjectValuesisemptybydefault.Chartsanduserscanaddtoitthrough values.yaml ,user-suppliedfilesandontheCLI.

Let'sseehowvaluesgetpopulatedwithasimpletemplate.

echo'{{.Values.hello.world}}'>templates/hello.tpl

Page 23: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Defaultvaluesareinthecharts values.yaml

#values.yamlhello:world:Hello!

helmtemplate.-xtemplates/hello.yaml

---#Source:my-chart/templates/hello.yamlHello!

Page 24: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

OverridingvaluesontheCLIhelmtemplate.--executetemplates/hello.yaml\--set'hello.world=Hallo!'

---#Source:my-chart/templates/hello.yamlHallo!

Page 25: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

LocallyoverridingvalueswithaspecificYAMLfile#local.yamlhello:world:Здравствуй!

helmtemplate.--executetemplates/hello.yaml\--valueslocal.yaml

---#Source:my-chart/templates/hello.yamlЗдравствуй!

Page 26: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

FunctionsandPipelinesHelmhasover60availablefunctions.SomeofthemarefromGotemplate,somefromSprigtemplatelibrary.

echo'var:{{quote.Values.myvar}}'>templates/quote.yaml

helmtemplate.--executetemplates/quote.yaml\--set'myvar=Thisisastring'

---#Source:my-chart/templates/quote.yamlvar:"Thisisaastring"

Page 27: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

FlowControl

if / else forcreatingconditionalblockswith tospecifyascoperange ,whichprovidesa"foreach"-styleloop

Page 28: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

if / else

{{-if.Values.ingress.enabled-}}apiVersion:extensions/v1beta1kind:Ingress#...{{-end-}}

Page 29: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

range

#...spec:rules:{{-range.Values.server.ingress.hosts}}-host:{{.}}{{-end-}}#...

Page 30: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

DebuggingTemplates#verifythatchartfollowsbestpracticeshelmlint#letserverrendertemplatesandreturnresultingmanifesthelminstall--dry-run--debug.#Seewhattemplatesareinstalledontheserverhelmgetmanifestmy-release

Page 31: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

NamedTemplates

define declaresanewnamedtemplateinsideofyourtemplateinclude usesanamedtemplateblock declaresaspecialkindoffillabletemplatearea

Templatesareusuallydefinedin templates/_helpers.tpl

Page 32: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

The name Template{{/*Expandthenameofthechart.*/}}{{-define"my-chart.name"-}}{{-default.Chart.Name.Values.nameOverride|trunc63|trimSuffix"-"-}}{{-end-}}

Page 33: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

The fullname Template{{/*Createadefaultfullyqualifiedappname.Wetruncateat63charsbecausesomeKubernetesnamefieldsarelimitedtothis(bytheDNSnamingspec).*/}}{{-define"my-chart.fullname"-}}{{-$name:=default.Chart.Name.Values.nameOverride-}}{{-printf"%s-%s".Release.Name$name|trunc63|trimSuffix"-"-}}{{-end-}}

The fullname templateisusuallyusedaspartofthein-clusterDNSname.

Page 34: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

UsingNamedTemplatesmetadata:name:{{include"my-chart.fullname".}}labels:app:{{include"my-chart.name".}}

metadata:name:my-release-my-chartlabels:app:mychart

Page 35: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

HelmHooks

Hookcanbeusedtohookintotheinstall,updateanddeletelifecycleHooksareregulartemplatesTheyarecreatedusingannotationsYoushouldopttoputthemintothe templates/hooks subdirAvailabilitydependsonhelmversion

Page 36: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Hookannotationsmetadata:annotations:"helm.sh/hook":"<hook-type>"

Page 37: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

InstallHooks

pre-installpost-install

Page 38: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

UpgradeHooks

pre-upgradepost-upgrade

Page 39: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

RollbackHooks

pre-rollbackpost-rollback

Page 40: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

DeleteHooks

pre-deletepost-delete

Page 41: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

CRDHooks

crd-install

UsedonCustomResourceDefinitionstoensurethattheyaredefinedbeforetheyareusedbyothermanifestsinthechart.

Page 42: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

TestHooks

test-success

Page 43: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

AdditionalAnnotationsmetadata:annotations:"helm.sh/hook-weight":"<num>""helm.sh/hook-delete-policy":"before-hook-creation,hook-succeeded"

Page 44: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Demo:Let'swritesomeinfra

Page 45: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Inthisexamplewewillcreateachartforglances.

Glancescanbescheduledonplaindockerasfollows:

dockerrun\--rm\--detach\--publish61208-61209:61208-61209\--envGLANCES_OPT="-w"\--volume/var/run/docker.sock:/var/run/docker.sock:ro\--pidhost\docker.io/nicolargo/glances

Let'slookatitonlocalhosttoseewhatisdoes.

Page 46: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

helmcreateglancescdglances

Forthisexamplewemakesomechangestothedefaultchartgeneratedbyhelm.

Page 47: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

values.yamlimage:#pathtodockerhubcontainerrepository:nicolargo/glancesservice:#matchporttoEXPOSEfromimageport:61208

Page 48: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

templates/deployment.yamlspec:template:spec:containers:-name:{{.Chart.Name}}#addenvironmenttocontainerenv:-name:GLANCES_OPTvalue:-w

Page 49: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

template/NOTES.tpl#changesourceportforport-forwardexampleecho"Visithttp://127.0.0.1:{{.Values.service.internalPort}}touseyourapplication"kubectlport-forward$POD_NAME{{.Values.service.internalPort}}:{{.Values.service.internalPort}}

Page 50: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

deploytok8shelminstall.--nameglances-test

Page 51: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

BestPractices

UseSemVer2torepresentversionnumber.Indentyamlwith2spaces(andnevertabs).SpecifyatillerVersionSemVercontraintinyouchart.

tillerVersion:">=2.4.0"

uselabelssok8scanidentifyressourcesandtoexposeoperatorsforthepurposeofquerying

Theofficalbestpracticesguidehasmorepointersyoushouldfollow

Page 52: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

AdvancedHelming

Page 53: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Composingsystemswithsubcharts

Chartscandependonothercharts.Dependenciesaredescribedin requirements.yaml .helmdepbuild creates requirements.lock .

Page 54: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

#downloaddependencieshelmdepbuildstable/redmine

#installredminewithpostgresqlhelminstallstable/redmine\--setdatabaseType.mariadb=false,databaseType.postgresql=true

Page 55: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

SubchartsandValues

subchartscannotdependontheirparentchartsvalues.parentchartscanoverridevaluesforsubcharts.globalvaluescanbeaccessedfromanychart.

Page 56: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

#overridepostgresqlvaluespostgresql:postgresPassword:muchsecretverysecure

#definesomeglobalvariablesglobal:myVariable:myValue

Pleaseplanaheadwhenusingglobalsordon'tusethematall.Officialchartsrarelyusethem.

Page 57: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

UsingyourownStarterYoucansupplyyouownstarterfor helmcreate .

mkdir-p~/.helm/starters/my-starter/templatescd~/.helm/starters/my-startervimtemplates/deployment.yamlcd~/git.repos/helmcreate-pmy-startermy-chart

Page 58: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

ManagingvendorspecificresourcesHelmcanbeusedtomanageanyresourcesthatareavailablethroughak8sstyleAPIendpoint.

apiVersion:apps.openshift.io/v1kind:DeploymentConfigmetadata:name:{{.Values.name|quote}}annotations:description:Defineshowtodeploytheapplicationservertemplate.alpha.openshift.io/wait-for-ready:'true'spec:#...

MoreinfosareontheOpenShiftblog.

Page 59: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

Thanks

Page 60: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes

SlidesTheseslidesmaybefoundonad-sy.ch/helm-training.

Page 62: Helm - Adfinis SyGroup...What is Helm? Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured resources. Think of it like apt/yum/homebrew for Kubernetes