Kubernetes è potente, ma i suoi manifesti YAML possono essere noiosi come guardare la vernice che si asciuga. Entra in scena Helm, il gestore di pacchetti per Kubernetes che è qui per salvare la nostra sanità mentale. Pensalo come npm per Kubernetes, ma con meno crisi esistenziali.
Ecco perché Helm è il tuo nuovo migliore amico:
- Templating: Dì addio al copia-incolla dei file YAML!
- Versioning: Ripristina i deployment più velocemente di quanto tu possa dire "oops"
- Riutilizzabilità: Condividi i tuoi chart e diventa l'eroe che il tuo team merita
- Semplicità: Gestisci applicazioni complesse con un solo comando
Preparare la tua app Quarkus per la grandezza di Helm
Prima di immergerci nei Chart di Helm, assicuriamoci che la nostra app Quarkus sia pronta per il suo debutto su Kubernetes. Se non l'hai già fatto, aggiungi l'estensione Kubernetes al tuo progetto Quarkus:
./mvnw quarkus:add-extension -Dextensions="kubernetes"
Questa estensione genera manifesti Kubernetes per noi, che useremo come punto di partenza per il nostro Chart di Helm. Ora, creiamo un Dockerfile di base per la nostra app Quarkus:
FROM registry.access.redhat.com/ubi8/openjdk-17:1.14
ENV LANGUAGE='en_US:en'
COPY target/quarkus-app/lib/ /deployments/lib/
COPY target/quarkus-app/*.jar /deployments/
COPY target/quarkus-app/app/ /deployments/app/
COPY target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
Creare il tuo primo Chart di Helm: Un viaggio di scoperta
Ora che la nostra app Quarkus è containerizzata e pronta, creiamo un Chart di Helm per distribuirla. Prima di tutto, installa Helm se non l'hai già fatto:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
Successivamente, creiamo un nuovo Chart di Helm:
helm create quarkus-app
Questo comando crea una struttura di directory per il tuo Chart di Helm. I file principali con cui lavoreremo sono:
Chart.yaml
: Metadati sul tuo chartvalues.yaml
: Valori di configurazione predefinititemplates/
: Directory contenente i template dei manifesti Kubernetes
Personalizzare il Chart: Dove avviene la magia
Modifichiamo il file values.yaml
per adattarlo alla nostra app Quarkus:
replicaCount: 1
image:
repository: your-registry/quarkus-app
pullPolicy: IfNotPresent
tag: "latest"
service:
type: ClusterIP
port: 8080
ingress:
enabled: true
className: "nginx"
hosts:
- host: quarkus-app.local
paths:
- path: /
pathType: Prefix
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
Ora, aggiorniamo il file templates/deployment.yaml
per utilizzare questi valori:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "quarkus-app.fullname" . }}
labels:
{{- include "quarkus-app.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "quarkus-app.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "quarkus-app.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
{{- toYaml .Values.resources | nindent 12 }}
Distribuire la tua app Quarkus: Il momento della verità
Con il nostro Chart di Helm pronto, è il momento di distribuire la nostra app Quarkus su Kubernetes. Prima, assicurati di essere connesso al tuo cluster Kubernetes, quindi esegui:
helm install my-quarkus-app ./quarkus-app
Boom! La tua app Quarkus è ora distribuita e in esecuzione su Kubernetes. Per controllare lo stato del tuo deployment, usa:
kubectl get pods
Aggiornare e ripristinare: Perché gli errori accadono
Una delle bellezze di Helm è quanto sia facile fare aggiornamenti e ripristini. Supponiamo che tu abbia apportato alcune modifiche alla tua app Quarkus e voglia distribuire una nuova versione. Basta aggiornare il tag dell'immagine Docker in values.yaml
ed eseguire:
helm upgrade my-quarkus-app ./quarkus-app
Se qualcosa va storto (ci siamo passati tutti), ripristinare è semplice come:
helm rollback my-quarkus-app
Tecniche avanzate: Migliorare il tuo gioco con Helm
Usare i hook di Helm per le migrazioni del database
Se la tua app Quarkus deve eseguire migrazioni del database prima di avviarsi, puoi usare i hook di Helm per assicurarti che ciò avvenga al momento giusto. Aggiungi un nuovo file di template chiamato templates/db-migrate-job.yaml
:
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "quarkus-app.fullname" . }}-db-migrate
annotations:
"helm.sh/hook": pre-install,pre-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
containers:
- name: db-migrate
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
command: ["./migrate-database.sh"]
restartPolicy: Never
backoffLimit: 5
Questo Job verrà eseguito prima che la tua applicazione principale si avvii, assicurando che il tuo database sia aggiornato.
Implementare i deployment canary
I Chart di Helm possono anche aiutarti a implementare strategie di deployment più avanzate, come i rilasci canary. Ecco un esempio rapido di come potresti impostare un deployment canary:
{{- if .Values.canary.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "quarkus-app.fullname" . }}-canary
spec:
replicas: {{ .Values.canary.replicaCount }}
selector:
matchLabels:
{{- include "quarkus-app.selectorLabels" . | nindent 6 }}
version: canary
template:
metadata:
labels:
{{- include "quarkus-app.selectorLabels" . | nindent 8 }}
version: canary
spec:
containers:
- name: {{ .Chart.Name }}-canary
image: "{{ .Values.image.repository }}:{{ .Values.canary.tag }}"
# ... resto della specifica del container
{{- end }}
Questo template crea un deployment canary separato quando abilitato, permettendoti di indirizzare una percentuale di traffico alla nuova versione.
Conclusione: Navigare verso la padronanza di Kubernetes con Helm
Ecco fatto! Abbiamo attraversato il mondo dei Chart di Helm e siamo usciti dall'altra parte con un modo elegante e gestibile per distribuire le nostre applicazioni Quarkus su Kubernetes. Niente più incubi YAML, niente più mal di testa da deployment – solo navigazione tranquilla sui mari di Kubernetes.
Ricorda, Helm è solo uno strumento nel tuo kit di strumenti Kubernetes. Mentre continui il tuo viaggio, potresti voler esplorare altre tecnologie come Kustomize o i Framework Operator. Ma per ora, datti una pacca sulla spalla – hai fatto un grande passo verso il domare la bestia Kubernetes!
"Con grande potere derivano grandi responsabilità" – Zio Ben, probabilmente parlando dei Chart di Helm
Ulteriori letture e risorse
Ora vai avanti e distribuisci con fiducia! E ricorda, se qualcuno te lo chiede, non sei solo uno sviluppatore – sei un domatore di Kubernetes, un artista dei Chart di Helm e un quarterback di Quarkus tutto in uno. Buona programmazione!