Difference between revisions of "Helm"
(Created page with " =Telepítés= Helm letöltése: https://helm.sh/docs/using_helm/#installing-helm <pre> # sudo ln -s /home/adam/Programs/helm/helm2/helm /usr/bin/helm </pre> <pre> # helm i...") |
(→Telepítés saját névtérbe) |
||
(14 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | |||
+ | =Bevezető= | ||
+ | A Helm a Kubernetes-hez készült csomag kezelő, mint pl a RedHat világában a yum ill dnf parancsok. A Helm mögé olyan nagy cégek sorakoztak föl mint pl a Google vagy a Microsoft. | ||
+ | A Helm alapja az úgynevezett Helm chart, mely egy telepítési leírója egy adott szoftver csomagnak. Egy adott Helm chart telepítésével egy mozdulattal tudunk előre gyártott, összetett szoftver konfigurációt telepíteni egy Kubernetes klaszterbe. Pl a Prometheus Helm-chart tartalmazza magát a Prometheus szervert, az Alert manager-t, a node-exporter-t, meg még jó pár komponenst, amiket a chart varázsütésre feltelepít a Kubernetes klaszterbe, úgy hogy az összes komponens működésre készen konfigurálva van, úgy hogy a Helm az összes szükséges Kubernetes objektumot létrehozza, beleértve a RoleBinding-okat és Ingress komponenseket is. | ||
+ | |||
+ | A Helm rendszer (3 verzió előtt) négy fő komponensből áll. | ||
+ | * Helm repository: Ez a docker hub-hoz hasonlatos repository, ahol a Docker-hub-hoz hasonlóan tudunk Helm-chart-okat keresni, letölteni. Ez az elsődleges forrása a chart-ok beszerzésének. | ||
+ | * Helm parancssor: | ||
+ | * Helm chart: | ||
+ | * Tiller: | ||
+ | |||
+ | :[[File:ClipCapIt-190710-204945.PNG]] | ||
+ | |||
+ | |||
+ | A Helm templéteket használ a Kubernetes yaml objektum leíró fájlok elkészítésére. A Helm telepítés előtt rendereli a templéteket, ebből előállnak a Kubernetes objektum leírók, majd ezeket a Tiller-en keresztül telepíti a Kubernetes klaszterbe. | ||
+ | A chart-ok a '''<user-home>/charts/<chart-név>''' mappában vannak. Ezen belül a '''templates''' mappában vannak a yaml templétek. | ||
+ | <source lang="C++"> | ||
+ | # cat server-pvc.yaml | ||
+ | {{- if not .Values.server.statefulSet.enabled -}} | ||
+ | {{- if .Values.server.persistentVolume.enabled -}} | ||
+ | {{- if not .Values.server.persistentVolume.existingClaim -}} | ||
+ | apiVersion: v1 | ||
+ | kind: PersistentVolumeClaim | ||
+ | metadata: | ||
+ | {{- if .Values.server.persistentVolume.annotations }} | ||
+ | annotations: | ||
+ | ... | ||
+ | </source> | ||
+ | |||
+ | |||
+ | A placeholdereket a chart mappában található values.yaml fájl alapján tölti ki a Helm. Ez minden chart kötelező eleme: | ||
+ | <source lang="C++"> | ||
+ | serviceAccounts: | ||
+ | alertmanager: | ||
+ | create: true | ||
+ | name: | ||
+ | kubeStateMetrics: | ||
+ | create: true | ||
+ | name: | ||
+ | nodeExporter: | ||
+ | create: true | ||
+ | ... | ||
+ | </source> | ||
+ | A values.ymal fájl átírásával lehet testre szabni a chart-okat. | ||
+ | |||
+ | |||
+ | <br> | ||
=Telepítés= | =Telepítés= | ||
Helm letöltése: https://helm.sh/docs/using_helm/#installing-helm | Helm letöltése: https://helm.sh/docs/using_helm/#installing-helm | ||
+ | A helm binárisra létre kell hozni egy sim-linket a bin mappában: | ||
<pre> | <pre> | ||
− | # | + | # ln -s /home/adam/Programs/helm/helm2/helm /usr/bin/helm |
</pre> | </pre> | ||
+ | |||
+ | A Tiller-t a helm | ||
<pre> | <pre> | ||
Line 19: | Line 69: | ||
</pre> | </pre> | ||
+ | {{note|A Tiller}} | ||
Line 35: | Line 86: | ||
replicaset.apps/tiller-deploy-775c9dcf94 1 1 1 5m | replicaset.apps/tiller-deploy-775c9dcf94 1 1 1 5m | ||
</pre> | </pre> | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | |||
+ | ==Telepítés saját névtérbe== | ||
+ | Az a cél, hogy a Tiller-t a saját névterünkbe telepítsük föl és korlátozzuk a hozzáférését, hogy kizárólag ehhez a névtérhez legyen joga, semmi máshoz ne férjen hozzá: | ||
+ | <br> | ||
+ | |||
+ | Hozzunk létre egy service-account-ot a tiller-nek: | ||
+ | <pre> | ||
+ | # kubectl create serviceaccount tiller --namespace mynamespace | ||
+ | serviceaccount/tiller created | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | |||
+ | Készítünk egy role-t a saját névterünkhöz, amiben minden műveletet megengedünk a mynamespace névtérben: <br> | ||
+ | role-tiller.yaml | ||
+ | <source lang="C++"> | ||
+ | kind: Role | ||
+ | apiVersion: rbac.authorization.k8s.io/v1 | ||
+ | metadata: | ||
+ | name: tiller | ||
+ | namespace: mynamespace | ||
+ | rules: | ||
+ | - apiGroups: ["", "batch", "extensions", "apps"] | ||
+ | resources: ["*"] | ||
+ | verbs: ["*"] | ||
+ | </source> | ||
+ | |||
+ | # kubectl apply -f role-tiller.yaml | ||
+ | role.rbac.authorization.k8s.io/tiller created | ||
+ | <br> | ||
+ | |||
+ | Majd összekötjük a role-t a service-account-al: <br> | ||
+ | rb-tiller.yaml | ||
+ | <source lang="C++"> | ||
+ | kind: RoleBinding | ||
+ | apiVersion: rbac.authorization.k8s.io/v1 | ||
+ | metadata: | ||
+ | name: tiller-binding | ||
+ | namespace: mynamespace | ||
+ | subjects: | ||
+ | - kind: ServiceAccount | ||
+ | name: tiller | ||
+ | namespace: mynamespace | ||
+ | roleRef: | ||
+ | kind: Role | ||
+ | name: tiller | ||
+ | apiGroup: rbac.authorization.k8s.io | ||
+ | </source> | ||
+ | |||
+ | # kubectl apply -f rb-tiller.yaml | ||
+ | rolebinding.rbac.authorization.k8s.io/tiller-binding created | ||
+ | |||
+ | |||
+ | <br> | ||
+ | |||
+ | A tiller init -ben meg kell adni a service-account-ot és a névteret: | ||
+ | <pre> | ||
+ | # helm init --service-account tiller --tiller-namespace mynamespace | ||
+ | $HELM_HOME has been configured at /root/.helm. | ||
+ | |||
+ | Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | Ellenőrizzük hogy a jó névtérben fut e a tiller pod: | ||
+ | <pre> | ||
+ | # kubectl get pod -n mynamespace | ||
+ | NAME READY STATUS RESTARTS AGE | ||
+ | tiller-deploy-6cddf5788b-hcpr8 1/1 Running 0 1m | ||
+ | </pre> | ||
+ | <br> | ||
− | |||
+ | ===Klaszter role=== | ||
+ | Ha a névtéren kívül is létre akarunk hozatni elemeket akkor klaszter szintű jogokat kell adni a tiller sa-nak: | ||
+ | <source lang="C++"> | ||
+ | apiVersion: rbac.authorization.k8s.io/v1 | ||
+ | kind: ClusterRoleBinding | ||
+ | metadata: | ||
+ | name: tiller-clusterrole | ||
+ | roleRef: | ||
+ | apiGroup: rbac.authorization.k8s.io | ||
+ | kind: ClusterRole | ||
+ | name: cluster-admin | ||
+ | subjects: | ||
+ | - kind: ServiceAccount | ||
+ | name: tiller | ||
+ | namespace: mynamespace | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | <br> | ||
=Prometheus telepítése= | =Prometheus telepítése= | ||
Line 64: | Line 208: | ||
+ | <pre> | ||
PROM_ADDR=mon.$(minishfit ip).nip.io | PROM_ADDR=mon.$(minishfit ip).nip.io | ||
AM_ADDR=alertmanager.$(minishfit ip).nip.io | AM_ADDR=alertmanager.$(minishfit ip).nip.io | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | <pre> | ||
+ | # helm list --tiller-namespace mynamespace | ||
+ | NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE | ||
+ | prometheus 1 Tue Jul 16 00:06:52 2019 DEPLOYED prometheus-8.14.0 2.11.1 mynamespace | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | # helm delete prometheus --tiller-namespace mynamespace | ||
+ | release "prometheus" deleted | ||
+ | </pre> |
Latest revision as of 19:21, 23 September 2019
Contents
Bevezető
A Helm a Kubernetes-hez készült csomag kezelő, mint pl a RedHat világában a yum ill dnf parancsok. A Helm mögé olyan nagy cégek sorakoztak föl mint pl a Google vagy a Microsoft. A Helm alapja az úgynevezett Helm chart, mely egy telepítési leírója egy adott szoftver csomagnak. Egy adott Helm chart telepítésével egy mozdulattal tudunk előre gyártott, összetett szoftver konfigurációt telepíteni egy Kubernetes klaszterbe. Pl a Prometheus Helm-chart tartalmazza magát a Prometheus szervert, az Alert manager-t, a node-exporter-t, meg még jó pár komponenst, amiket a chart varázsütésre feltelepít a Kubernetes klaszterbe, úgy hogy az összes komponens működésre készen konfigurálva van, úgy hogy a Helm az összes szükséges Kubernetes objektumot létrehozza, beleértve a RoleBinding-okat és Ingress komponenseket is.
A Helm rendszer (3 verzió előtt) négy fő komponensből áll.
- Helm repository: Ez a docker hub-hoz hasonlatos repository, ahol a Docker-hub-hoz hasonlóan tudunk Helm-chart-okat keresni, letölteni. Ez az elsődleges forrása a chart-ok beszerzésének.
- Helm parancssor:
- Helm chart:
- Tiller:
A Helm templéteket használ a Kubernetes yaml objektum leíró fájlok elkészítésére. A Helm telepítés előtt rendereli a templéteket, ebből előállnak a Kubernetes objektum leírók, majd ezeket a Tiller-en keresztül telepíti a Kubernetes klaszterbe.
A chart-ok a <user-home>/charts/<chart-név> mappában vannak. Ezen belül a templates mappában vannak a yaml templétek.
# cat server-pvc.yaml
{{- if not .Values.server.statefulSet.enabled -}}
{{- if .Values.server.persistentVolume.enabled -}}
{{- if not .Values.server.persistentVolume.existingClaim -}}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
{{- if .Values.server.persistentVolume.annotations }}
annotations:
...
A placeholdereket a chart mappában található values.yaml fájl alapján tölti ki a Helm. Ez minden chart kötelező eleme:
serviceAccounts:
alertmanager:
create: true
name:
kubeStateMetrics:
create: true
name:
nodeExporter:
create: true
...
A values.ymal fájl átírásával lehet testre szabni a chart-okat.
Telepítés
Helm letöltése: https://helm.sh/docs/using_helm/#installing-helm
A helm binárisra létre kell hozni egy sim-linket a bin mappában:
# ln -s /home/adam/Programs/helm/helm2/helm /usr/bin/helm
A Tiller-t a helm
# helm init $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Note
A Tiller
# kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/tiller-deploy-775c9dcf94-x429k 1/1 Running 0 5m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/tiller-deploy ClusterIP 172.30.26.107 <none> 44134/TCP 5m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/tiller-deploy 1 1 1 1 5m NAME DESIRED CURRENT READY AGE replicaset.apps/tiller-deploy-775c9dcf94 1 1 1 5m
Telepítés saját névtérbe
Az a cél, hogy a Tiller-t a saját névterünkbe telepítsük föl és korlátozzuk a hozzáférését, hogy kizárólag ehhez a névtérhez legyen joga, semmi máshoz ne férjen hozzá:
Hozzunk létre egy service-account-ot a tiller-nek:
# kubectl create serviceaccount tiller --namespace mynamespace serviceaccount/tiller created
Készítünk egy role-t a saját névterünkhöz, amiben minden műveletet megengedünk a mynamespace névtérben:
role-tiller.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller
namespace: mynamespace
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
# kubectl apply -f role-tiller.yaml role.rbac.authorization.k8s.io/tiller created
Majd összekötjük a role-t a service-account-al:
rb-tiller.yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-binding
namespace: mynamespace
subjects:
- kind: ServiceAccount
name: tiller
namespace: mynamespace
roleRef:
kind: Role
name: tiller
apiGroup: rbac.authorization.k8s.io
# kubectl apply -f rb-tiller.yaml rolebinding.rbac.authorization.k8s.io/tiller-binding created
A tiller init -ben meg kell adni a service-account-ot és a névteret:
# helm init --service-account tiller --tiller-namespace mynamespace $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Ellenőrizzük hogy a jó névtérben fut e a tiller pod:
# kubectl get pod -n mynamespace NAME READY STATUS RESTARTS AGE tiller-deploy-6cddf5788b-hcpr8 1/1 Running 0 1m
Klaszter role
Ha a névtéren kívül is létre akarunk hozatni elemeket akkor klaszter szintű jogokat kell adni a tiller sa-nak:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller-clusterrole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: mynamespace
Prometheus telepítése
# helm search prometheus NAME CHART VERSION APP VERSION DESCRIPTION stable/prometheus 8.14.0 2.11.1 Prometheus is a monitoring system and time series database.
# helm inspect values stable/prometheus rbac: create: true imagePullSecrets: # - name: "image-pull-secret" ## Define serviceAccount names for components. Defaults to component's fully qualified name. ## serviceAccounts: alertmanager: create: true ....
PROM_ADDR=mon.$(minishfit ip).nip.io AM_ADDR=alertmanager.$(minishfit ip).nip.io
# helm list --tiller-namespace mynamespace NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE prometheus 1 Tue Jul 16 00:06:52 2019 DEPLOYED prometheus-8.14.0 2.11.1 mynamespace
# helm delete prometheus --tiller-namespace mynamespace release "prometheus" deleted