Skip to content

webmakaka/Packaging-Applications-with-Helm-for-Kubernetes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[Philippe Collignon] Packaging Applications with Helm for Kubernetes [ENG, 30 Jul 2019]

Original src:
https://github.com/phcollignon/helm


Application


Application


Application


How to run apps

I am working in ubuntu 20.04.1 LTS

Docker, Minikube, Kubectl, Skaffold should be installed.


Docker

$ docker -v
Docker version 20.10.0, build 7287ab3

Minikube installation

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/


$ minikube version
minikube version: v1.16.0

Kubectl installation

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

$ kubectl version --client --short
Client Version: v1.20.1


Skaffold installation

$ curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64

$ chmod +x skaffold
$ sudo mv skaffold /usr/local/bin

$ skaffold version
v1.19.0

Run minikube

$ {
    minikube --profile pack-apps config set memory 8192
    minikube --profile pack-apps config set cpus 4

    // minikube --profile pack-apps config set vm-driver virtualbox
    minikube --profile pack-apps config set vm-driver docker

    minikube --profile pack-apps config set kubernetes-version v1.20.2
    minikube start --profile pack-apps
}

// Enable ingress
$ minikube addons --profile pack-apps enable ingress

$ minikube --profile pack-apps ip
172.17.0.2

$ sudo vi /etc/hosts
#---------------------------------------------------------------------
# Minikube
#---------------------------------------------------------------------
192.168.49.2 frontend.minikube.local
192.168.49.2 backend.minikube.local

Helm installation

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

$ kubectl config view

$ helm version --short
v3.5.0+g32c2223

Kustomize installation

$ curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash && chmod +x kustomize && sudo mv kustomize /usr/local/bin/

Run app


$ cd skaffold

$ docker login

Need to update my docker image name webmakaka/*** to your in scripts from skaffold and apps/v1.1/chart folders.

$ skaffold dev -f ./skaffold-helm.yaml

or

$ skaffold dev -f ./skaffold-kustomize.yaml

$ kubectl get pods

browser -> http://frontend.minikube.local


05 - Building Helm Charts


First try

$ cd apps/v1/chart/
$ helm install myguestbook guestbook

$ helm list --short
myguestbook

$ helm status myguestbook
NAME: myguestbook
LAST DEPLOYED: Sat Jan 16 01:12:05 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

http://frontend.minikube.local/


Application


templates/frontend.yaml

image: phico/frontend:1.1

$ helm upgrade myguestbook guestbook

$ helm list

$ helm history myguestbook

$ helm delete myguestbook

06 - Customizing Charts with Helm Templates


Application


Application


Application


$ cd v2/chart

// check
$ helm template guestbook | less

// check
$ helm install guestbook --dry-run --debug

$ helm install myguestbook guestbook
// $ helm upgrade myguestbook guestbook

$ kubectl get pods

// delete stupid pod
$ kubectl delete pod myguestbook-backend-7ddb696b68-zbhdj

http://frontend.minikube.local/
OK

$ helm delete myguestbook

Installing Dev and Test Releases


$ sudo vi /etc/hosts
#---------------------------------------------------------------------
# Minikube cluster
#---------------------------------------------------------------------

172.17.0.2 frontend.minikube.local
172.17.0.2 backend.minikube.local
172.17.0.2 dev.frontend.minikube.local
172.17.0.2 dev.backend.minikube.local
172.17.0.2 test.frontend.minikube.local
172.17.0.2 test.backend.minikube.local

$ cd v3/chart
$ helm install dev guestbook --set frontend.config.guestbook_name=DEV
$ helm install test guestbook --set frontend.config.guestbook_name=TEST

http://test.frontend.minikube.local/
OK!

$ cd v3/chart
$ helm delete dev guestbook
$ helm delete test guestbook

07 - Managing Dependencies


Application


// ChartMuseum Instalation
$ curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum && chmod +x chartmuseum && sudo mv chartmuseum /usr/local/bin/

$ helm plugin install https://github.com/chartmuseum/helm-push.git

35 - Demo - Packaging and Publishing Charts


$ cd v4/chart
$ mv guestbook/charts dist
$ cd dist

$ helm package frontend backend database
$ helm repo index .
$ vi index.yaml

$ chartmuseum --debug --port=8080 \
    --storage="local" \
    --storage-local-rootdir="./chartstorage"

$ helm repo add local http://localhost:8080

$ helm push backend-1.2.2.tgz local
$ helm push database-1.2.2.tgz local
$ helm push frontend-1.2.0.tgz local

$ helm repo update
$ helm search repo local/

$ helm search repo local/
NAME          	CHART VERSION	APP VERSION	DESCRIPTION
local/backend 	1.2.2        	1.0        	A Helm chart for Guestbook Backend 1.0
local/database	1.2.2        	3.6        	A Helm chart for Guestbook Database Mongodb 3.6
local/frontend	1.2.0        	2.0        	A Helm chart for Guestbook Frontend 2.0

$ curl -v http://localhost:8080/index.yaml

$ helm repo list
NAME       	URL
local	http://localhost:8080

$ helm repo update

38 - Demo - Managing Dependencies


$ vi guestbook/requirements.yaml

dependencies:
  - name: backend
    version: ~1.2.2
    repository: http://127.0.0.1:8080/
  - name: frontend
    version: ^1.2.0
    repository: http://127.0.0.1:8080/
  - name: database
    version: ~1.2.2
    repository: http://127.0.0.1:8080/

$ helm dependency update guestbook

$ ls guestbook/charts
backend-1.2.2.tgz  database-1.2.2.tgz  frontend-1.2.0.tgz

$ helm dependency list guestbook
NAME    	VERSION	REPOSITORY            	STATUS
backend 	~1.2.2 	http://127.0.0.1:8080/	ok
frontend	^1.2.0 	http://127.0.0.1:8080/	ok
database	~1.2.2 	http://127.0.0.1:8080/	ok

$ helm install myguestbook guestbook

$ helm list
NAME       	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART          	APP VERSION
myguestbook	default  	1       	2021-01-16 04:22:24.867593634 +0300 MSK	deployed	guestbook-1.2.2	2.0

$ helm status myguestbook

http://frontend.minikube.local/
OK!

$ helm delete myguestbook

$ ls guestbook/requirements.lock

$ cd dist/

$ vi frontend/Chart.yaml

upd version to version: 1.2.1

$ helm package frontend
$ helm push frontend-1.2.1.tgz local

$ curl -v http://localhost:8080/index.yaml

$ cd ..
$ helm dependency build guestbook

$ ls guestbook/charts
$ helm dependency update guestbook
$ ls guestbook/charts
$ ls guestbook/charts
backend-1.2.2.tgz  database-1.2.2.tgz  frontend-1.2.1.tgz

$ helm dependency list guestbook
NAME    	VERSION	REPOSITORY            	STATUS
backend 	~1.2.2 	http://127.0.0.1:8080/	ok
frontend	^1.2.0 	http://127.0.0.1:8080/	ok
database	~1.2.2 	http://127.0.0.1:8080/	ok

???
I do not know is it rigt or not
???
$ cd guestbook
$ helm package .
$ helm push guestbook-1.2.2.tgz local
$ helm repo update
$ helm search repo guestbook

39 - Demo - Controlling Dependencies with Conditions and Tags

$ cd v5

$ helm install guestbook --set backend.enabled=false --set database.enabled=false
$ helm install guestbook --set tags.api=false

08 - Using Existing Helm Charts


Using a Stable MongoDB Chart

$ cd apps/v6/chart

$ ls guestbook/charts
$ rm guestbook/charts/database-1.2.2.tgz

$ helm repo list
$ helm search repo mongodb
$ helm inspect stable/mongodb | less

$ vi guestbook/requirements.yaml
$ heml dependency update guestbook
$ ls guestbook/charts

$ vi guestbook/values.yaml
$ heml install dev guestbook

Installing Wordpress in Kubernetes in 1 Minute

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/

// To remove
// $ helm repo remove stable

$ helm search wordpress
$ helm install stable/wordpress

$ helm list --short

// get password
$ (kubectl get secret --namespace default zeroed-greyhound-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)

$ kubectl get service

http://172.17.0.2:32277/


Remove everything

$ helm delete guestbook
$ helm repo remove local



Marley

Any questions in english: Telegram Chat
Любые вопросы на русском: Телеграм чат