Utilizzare ArgoCD per i tuoi deploy GitOps
Obiettivi
Questo tutorial spiega come utilizzare ArgoCD, lo strumento di deployment continuo GitOps integrato nel tuo cluster Managed Kubernetes. Alla fine di questa guida, saprai:
- Cos'è l'approccio GitOps.
- Come accedere all'interfaccia di ArgoCD.
- Come distribuire un'applicazione utilizzando ArgoCD per sincronizzare un repository Git.
Il principio del GitOps con ArgoCD
Il GitOps è una pratica che consiste nell'utilizzare un repository Git come unica fonte di verità per dichiarare lo stato desiderato della tua infrastruttura e delle tue applicazioni.
ArgoCD è lo strumento che implementa questo principio. Monitora costantemente un repository Git e confronta lo stato definito al suo interno (tramite manifest Kubernetes) con lo stato effettivo del tuo cluster. Se rileva una differenza, applica automaticamente le modifiche affinché il cluster corrisponda a quanto dichiarato in Git.
I vantaggi sono numerosi:
- Distribuzioni affidabili e riproducibili.
- Tracciabilità completa di tutte le modifiche tramite la cronologia Git.
- Recupero rapido in caso di incidente, tornando a un commit precedente.
- Sicurezza migliorata limitando gli accessi diretti al cluster.
Accedere all'interfaccia ArgoCD
L'interfaccia web di ArgoCD è esposta su un URL interno del cluster. Per accedervi, è necessario essere connessi alla rete interna del cluster (ad esempio, tramite un bastion o un VPN).
L'URL da utilizzare è la seguente, sostituendo <votre-identifiant-de-cluster> :
http://argocd.internal.<votre-identifiant-de-cluster>.mk.ms-cloud-temple.com
È possibile ottenere l'indirizzo IP interno dell'Ingress ArgoCD con il comando seguente :
kubectl get ingress argocd-server -n argocd
La password per l'account admin viene fornita dai team Cloud Temple durante la configurazione del cluster.
Distribuire un'applicazione con ArgoCD
Ora distribuiremo un'applicazione di test utilizzando l'approccio GitOps.
1. Il repository Git
ArgoCD richiede un repository Git contenente i manifest Kubernetes dell'applicazione da distribuire. Per questo tutorial, utilizzeremo il repository di esempio di ArgoCD: https://github.com/argoproj/argocd-example-apps. Distribuiremo l'applicazione guestbook che si trova in questo repository.
2. Preparare il Namespace di destinazione
Per consentire la distribuzione dell'applicazione in un namespace gestito da Capsule, dobbiamo prima creare questo namespace e applicargli la label del tenant appropriata.
Eseguire i seguenti comandi :
# Crea il namespace
kubectl create namespace guestbook
# Applica la label per associarlo al tenant "default" di Capsule (se necessario, poiché il namespace è probabilmente già stato associato al tuo tenant durante la creazione)
kubectl label namespace guestbook capsule.clastix.io/tenant=default
3. Creare l'applicazione in ArgoCD
Una volta pronto il namespace, possiamo dichiarare l'applicazione ad ArgoCD.
-
Crea un file denominato
app-guestbook.yamlcon il contenuto seguente :apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:name: guestbooknamespace: argocdspec:project: defaultsource:repoURL: https://github.com/argoproj/argocd-example-apps.gittargetRevision: HEADpath: guestbookdestination:server: https://kubernetes.default.svcnamespace: guestbooksyncPolicy:automated:prune: trueselfHeal: trueQuesto manifesto richiede ad ArgoCD di :
- Creare un'applicazione denominata
guestbook. - Monitorare il repository
argocd-example-apps. - Concentrarsi sulla cartella
guestbookdi questo repository. - Distribuire i manifesti trovati nel namespace
guestbookdel cluster locale. - Mantenere la sincronizzazione automaticamente (
automated).
- Creare un'applicazione denominata
-
Hai due opzioni per creare l'applicazione in ArgoCD :
Opzione A : tramite
kubectl(Approccio GitOps)Applica questo manifesto direttamente al tuo cluster. È il metodo consigliato poiché segue il principio GitOps di gestione dichiarativa.
kubectl apply -f app-guestbook.yamlOpzione B : tramite l'interfaccia web di ArgoCD
Puoi anche creare l'applicazione direttamente dall'interfaccia grafica :
- Nell'UI di ArgoCD, fai clic su "+ NEW APP".
- In alto a destra nella schermata di creazione, fai clic su "EDIT AS YAML".
- Incolla il contenuto del tuo file
app-guestbook.yamlnell'editor. - Fai clic su "CREATE".
4. Verificare la sincronizzazione
Non appena applichi il manifesto, ArgoCD rileva questa nuova risorsa Application e inizia il suo lavoro.
- Tramite l'interfaccia web :
- Accedi all'interfaccia di ArgoCD.
- Dovresti vedere una nuova scheda per l'applicazione
guestbook. - Dopo qualche istante, il suo stato dovrebbe passare a
HealthyeSynced. - Facendo clic sulla scheda, puoi visualizzare tutte le risorse Kubernetes (Deployment, Service, ecc.) che sono state create.
- Tramite la riga di comando :
-
Verifica che il namespace
guestbooksia stato creato :kubectl get ns guestbook -
Verifica che le risorse dell'applicazione siano effettivamente distribuite in questo namespace :
kubectl get all -n guestbookNAME READY STATUS RESTARTS AGEpod/guestbook-ui-85db984648-br6r2 1/1 Running 0 19mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/guestbook-ui ClusterIP 10.111.160.90 <none> 80/TCP 19mNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/guestbook-ui 1/1 1 1 19mNAME DESIRED CURRENT READY AGEreplicaset.apps/guestbook-ui-85db984648 1 1 1 19m
-
5. Il ciclo GitOps
Ora, se si modifica un manifesto nel repository Git, ArgoCD rileverà la modifica e aggiornerà automaticamente l'applicazione nel cluster. È la magia del GitOps!
Pulizia
Per eliminare l'applicazione e tutte le risorse associate, è sufficiente eliminare la risorsa Application di ArgoCD.
- Tramite l'interfaccia web :
- Nell'UI di ArgoCD, trova l'applicazione
guestbook. - Clicca sui tre punti (...) per aprire il menu e seleziona "Elimina".
- Seleziona l'opzione "Foreground" per assicurarti che tutte le risorse gestite (pod, servizi, ecc.) vengano eliminate in cascata.
- Nell'UI di ArgoCD, trova l'applicazione
- Tramite
kubectl:-
Elimina il file
app-guestbook.yamlche hai creato :kubectl delete -f app-guestbook.yaml
-
ArgoCD ora eliminerà tutti i componenti dell'applicazione guestbook. Una volta completata la sincronizzazione di eliminazione, il namespace guestbook sarà vuoto. A questo punto puoi eliminarlo con il comando seguente :
kubectl delete namespace guestbook
:::info[Per approfondire: la gestione dei segreti ] Questo tutorial utilizza un repository pubblico senza dati sensibili. Per le tue applicazioni in produzione, è fondamentale non memorizzare mai segreti (password, chiavi API) in chiaro nel tuo repository Git. Soluzioni come Sealed Secrets o HashiCorp Vault si integrano con ArgoCD per gestire i tuoi segreti in modo sicuro. Un futuro tutorial approfondirà questo approccio. :::
Conclusione
Hai distribuito la tua prima applicazione con ArgoCD seguendo i principi GitOps. Questo approccio potente ti consente di gestire le tue distribuzioni in modo dichiarativo, affidabile e sicuro. Ti incoraggiamo ad adottarlo per tutte le tue applicazioni su Managed Kubernetes.