La munca am tot auzit de Helm si Helm Charts. Termeni care inseamna ceva gen „instaleaza x si y cu Helm” sau „upgrade cu Helm Charts”. Deci, ce naiba sunt Helm si Charts?
Pe scurt, Helm este un manager de pachete pentru Kubernetes, iar Helm Charts sunt ca niste retete. Aceste retete sunt folosite pentru a instala si gestiona aplicatii in Kubernetes. Imagineaza-ti ca ai nevoie de o aplicatie care include mai multe componente (poduri, servicii, deployment-uri etc.). Un Helm Chart iti permite sa definesti toate aceste componente intr-un mod standardizat.
Helm este pentru Kubernetes ceea ce apt este pentru Debian: un tool care iti simplifica viata. Iar pe Artifact Hub (https://artifacthub.io/) gasesti peste 16.000 de „retete” pentru tot felul de aplicatii. Bineinteles, iti poti face si tu propriile Charts daca ai nevoie de ceva mai customizat.
Pentru ca am vazut Kubernetes Dashboard si pentru ca arata bine, si pare asa… ca daca ai K8S Dashboard sigur te pricepi am zis sa invat cum se instaleaza. Prima optiune – cu Helm!
Instalarea Kubernetes Dashboard cu Helm
Hai sa vedem cum putem folosi Helm pentru a instala Kubernetes Dashboard.
Pasul 1: Instalarea Helm pe controller-ul Kubernetes
Mai intai, instalezi Helm. Este simplu, doar urmezi aceste comenzi, care o sa downloadeze un script, dupa care il faci executabil si il … executi. Headshot!
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Pasul 2: Adaugarea repository-ului pentru Kubernetes Dashboard
Acum adaugam repository-ul unde este disponibil Kubernetes Dashboard:
$ helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
$ helm repo list

Pasul 3: Instalarea Kubernetes Dashboard
Instalam Dashboard-ul folosind comanda:
$ helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--create-namespace --namespace kubernetes-dashboard
Aceasta comanda:
- Instaleaza (sau face upgrade daca e deja instalat) Kubernetes Dashboard.
- Creeaza namespace-ul
kubernetes-dashboarddaca nu exista.

Pasul 4: Publicarea Dashboard-ului
Pentru a accesa Dashboard-ul, il publicam pe un port:
$ kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
$ kubectl -n kubernetes-dashboard get svc

Acum, acceseaza Kubernetes Dashboard la adresa: https://localhost:8443. Cumva e inutil, ca nimeni nu are un nodurile instalate cu KDE/Gnome si deschid de acolo un firefox ca sa acceseze servicii. Cel mult un curl, un wget… Dar… se poate publica pe ip-ul nodului… ceea ce e mai ok, il poti accesa din afara kubernetzilor.
$ kubectl get svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard -o yaml > kong-service.yaml
$ nano kong-service.yaml - editam sectiunea spec:
spec:
type: NodePort
ports:
- name: kong-proxy-tls
port: 443
protocol: TCP
targetPort: 8443
nodePort: 32444
$ kubectl apply -f kong-service.yaml


Acum kong-proxy este expus pe ip-urile nodurilor, pe portul selectat manual de noi, 32444. Nu e optim sa specifici tu porturi… dar avem acces la dashboard.
$ nano cont-dasboard.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
Acum aplicam yaml-ul (o sa faca userul si il pune unde ii este locul) – totul e specificat in yaml.
Avem user si acum ii facem un token. Copy paste in browser la https://ip_nod:8443, acolo unde ne cere.
$ kubectl create -f cont-dashboard.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
$ kubectl -n kube-system create token admin-user


Rezultate:
Avem kubernetes-dashboard, am facut un printscreen si l-am aratat prietenilor. O sa ramana aici pentru posteritate, ii gasesc o utilitate cand o sa am mai multe chestii pe k8s. Deocamdata e bun exercitiul ca am folosit helm sa-l deployes, am invatat sa il public pe noduri… si am facut si un user/token ca sa il putem accesa. Minunat!
Ce ar fi interesant, ceva sa expunem serviciul mai usor, metode sunt si chiar exista mai multe metode prin care serviciile dintr-un cluster Kubernetes pot fi expuse utilizatorilor finali:
Ingress Controller: Utilizeaza un controller pentru a gestiona cererile HTTP si HTTPS, oferind un mod flexibil si scalabil de a expune mai multe servicii printr-un singur punct de intrare. Exemple populare includ Nginx Ingress Controller si Traefik.
LoadBalancer: Creeaza un load balancer extern care distribuie traficul catre serviciul din cluster. Exemple includ solutii oferite de cloud providers, cum ar fi AWS Elastic Load Balancer (ELB), Google Cloud Load Balancer (GCLB) si Azure Load Balancer.
On prem poti folosi HA Proxy si Metal ILB
NodePort: Deschide un port specific pe fiecare nod al clusterului, permitand accesul extern. Pe acesta l-am utilizat si pot spune ca pe termen lung nu il vad ca winning sollution dar e foarte rapid sa vezi un serviciu din kube…
Asta cred ca ne indica deja ce o sa incerc next. Primele 2 coloane de mai sus sunt tema :))