Questo insieme di tutorial è rivolto a operatori e amministratori IT che vogliono distribuire, eseguire e gestire ambienti di applicazioni moderne che vengono eseguiti su Google Kubernetes Engine. Man mano che avanzi in questo insieme di tutorial, imparerai a configurare il monitoraggio e gli avvisi, a scalare i carichi di lavoro e a simulare errori, il tutto utilizzando l'applicazione di esempio di microservizi Cymbal Bank:
- Crea un cluster ed esegui il deployment di un'applicazione di esempio
- Monitoraggio con Google Cloud Managed Service per Prometheus
- Scalare i workload
- Simulare un errore
- Centralizzare la gestione dei cambiamenti (questo tutorial)
Panoramica e obiettivi
Quando crei nuovi servizi e applicazioni, potresti voler testare le modifiche in ambienti diversi. Man mano che la tua organizzazione cresce, potresti aver bisogno di configurazioni del cluster diverse per team diversi. Gestire più cluster con configurazioni diverse può essere difficile. Puoi utilizzare strumenti GitOps come Config Sync per gestire queste sfide.
Nel tutorial Crea un cluster, hai creato un cluster e hai eseguito il deployment dell'applicazione Cymbal Bank in quel cluster.
In questo tutorial imparerai ad archiviare i manifest Kubernetes per la tua applicazione in un repository Git centralizzato e a utilizzare strumenti come Config Sync per eseguire il deployment di un'applicazione in più cluster in una flotta. Imparerai a completare le seguenti attività:
Crea un repository Git e connettilo a Cloud Build
Crea un cluster, registralo in un parco risorse e installa Config Sync nel parco risorse di cluster
Utilizza un pacchetto del parco risorse per eseguire il deployment di Cymbal Bank e di altre risorse su un cluster o in un parco risorse
Creazione di cluster
Nel primo tutorial di questa serie, hai creato un cluster e hai eseguito il deployment dell'applicazione Cymbal Bank in questo cluster. In uno scenario reale, è improbabile che tu abbia un solo cluster da gestire. GKE ti consente di raggruppare i cluster in un parco risorse, un gruppo logico di cluster che possono essere gestiti insieme. All'interno di un parco risorse, puoi raggruppare ulteriormente i cluster in modo che alcuni rappresentino ambienti diversi o appartengano a team diversi. Ad esempio, potresti avere un cluster di sviluppo, un cluster di gestione temporanea e un cluster di produzione. In un'organizzazione di grandi dimensioni, i singoli team potrebbero avere i propri cluster per ambienti diversi. In qualità di amministratori IT o operatori, potrebbe significare che devi gestire decine di cluster.
Quando si tratta di eseguire il deployment di applicazioni o di singole risorse come policy personalizzate in tutti questi cluster, le funzionalità di GKE come Config Sync possono aiutarti a gestire questi deployment su larga scala.
Per dimostrare come eseguire il deployment delle risorse in ambienti diversi o in un parco risorse di cluster, crea un nuovo cluster ed esegui il deployment dell'applicazione Cymbal Bank:
Crea un cluster GKE che simuli un ambiente di sviluppo:
gcloud container clusters create-auto scalable-apps-dev \ --project=PROJECT_ID \ --region=REGION \ --fleet-project=PROJECT_ID \ --release-channel=rapid
Sostituisci quanto segue:
PROJECT_ID
con l'ID generato automaticamente del progetto che hai creato nella sezione precedente. L'ID progetto è spesso diverso dal nome del progetto. Ad esempio, il tuo progetto potrebbe essere scalable-apps, ma il suo ID potrebbe essere scalable-apps-567123.REGION
con la regione in cui vuoi creare il cluster, ad esempious-central1
.
Le etichette sono coppie chiave/valore che puoi aggiungere alle risorse GKE per organizzarle. Per i pacchetti del parco risorse, puoi utilizzare le etichette di appartenenza al parco risorse per personalizzare i cluster a cui è destinato il pacchetto del parco risorse. Altri tipi di etichette non sono supportati.
Aggiungi un'etichetta all'appartenenza al parco risorse:
gcloud container fleet memberships update scalable-apps-dev \ --update-labels=env=dev
Quando crei il pacchetto del parco risorse più avanti in questo tutorial, questa etichetta garantisce che le risorse vengano implementate solo nel cluster
scalable-apps-dev
e non nel clusterscalable-apps
del primo tutorial di questa serie.
Installazione di Config Sync
Installa Config Sync su entrambi i cluster:
- Nella console Google Cloud , vai alla pagina Config nella sezione Funzionalità.
- Fai clic su add Installa Config Sync.
- Mantieni selezionata l'opzione Upgrade manuali.
- Il menu della versione dovrebbe essere impostato per impostazione predefinita sull'ultima versione di Config Sync. Se necessario, seleziona la versione più recente.
- Nella sezione Opzioni di installazione, seleziona Installa Config Sync su tutta la flotta (opzione consigliata).
- Fai clic su Installa Config Sync.
- Nella scheda Impostazioni di Config Sync, esamina il campo Stato dell'elenco dei cluster. Dopo qualche minuto, lo stato viene visualizzato come "In attesa" finché il cluster non è configurato correttamente per Config Sync. Potrebbero essere necessari fino a 10 minuti prima che lo stato diventi Attivato.
Esegui il deployment di Cymbal Bank
Nel primo tutorial di questa serie, hai utilizzato i comandi kubectl
per applicare le configurazioni dell'applicazione al cluster. In questo tutorial, utilizzi la funzionalità dei pacchetti del parco risorse di Config Sync per eseguire il deployment delle stesse configurazioni in un nuovo cluster. In una sezione successiva, vedrai un esempio di come aggiungere una nuova risorsa al repository Git ed eseguire il deployment di queste risorse in un parco risorse di cluster.
Configura un account di servizio per Cloud Build
Un account di servizio è un tipo speciale di account utilizzato in genere da un'applicazione, anziché da una persona. Come best practice per la creazione di service account, devi creare service account per un singolo servizio o attività specifico e assegnare ruoli granulari al account di servizio. In questo tutorial, crei unaccount di serviziot per concedere a Cloud Build le autorizzazioni per recuperare le risorse Kubernetes dal tuo repository Git e eseguirne il deployment nei tuoi cluster.
Per creare il account di servizio e concedere le autorizzazioni richieste, completa i seguenti passaggi:
Crea l'account di servizio:
gcloud iam service-accounts create "cymbal-bank-service-account"
Concedi al account di servizio l'autorizzazione per recuperare le risorse dal repository Git aggiungendo un binding della policy IAM per il ruolo Publisher di bundle di risorse:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/configdelivery.resourceBundlePublisher'
Se richiesto, seleziona
None
come condizione per la policy.Concedi al account di servizio l'autorizzazione a scrivere log aggiungendo un binding della policy IAM per il ruolo Logs Writer:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/logging.logWriter'
Se richiesto, seleziona
None
come condizione per la policy.
Crea una release per l'applicazione Cymbal Bank
Un pacchetto di flotta richiede un tag di versione semantica per sapere da quale versione del repository eseguire il deployment. È consigliabile creare nuove release quando apporti modifiche al repository, in quanto ciò facilita il controllo della versione e semplifica il rollback a una versione stabile, se necessario.
In una finestra del browser web del fork di GitHub di Cymbal Bank, nella sezione Releases (Release) della barra laterale, fai clic su Create a new release (Crea una nuova release).
Seleziona il menu Scegli un tag e digita
v1.0.0
come tag. Fai clic su Crea nuovo tag.Fai clic su Pubblica release.
Configura l'autenticazione
Come nel primo tutorial di questa serie, devi creare un JWT per gestire l'autenticazione utente e un secret di Kubernetes per archiviare il JWT per il nuovo cluster che hai creato. È consigliabile che ogni cluster abbia un JWT univoco per l'autenticazione.
In Cloud Shell, crea il JWT:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
Crea il secret Kubernetes:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
Esegui il deployment dell'applicazione Cymbal Bank con un pacchetto del parco risorse
Una risorsa FleetPackage
è un'API dichiarativa per eseguire il deployment di più manifest Kubernetes in un parco di cluster.
Per creare un pacchetto della flotta, definisci una specifica FleetPackage
che punta al repository con le risorse Kubernetes che hai connesso a Cloud Build. Poi applichi la risorsa FleetPackage
, che recupera le risorse da Git e le distribuisce nell'intera flotta.
In Cloud Shell, imposta la posizione predefinita per i comandi Google Cloud CLI
configdelivery
. Come per la connessione del repository a Cloud Build, devi utilizzareus-central1
mentre la funzionalità dei pacchetti del parco risorse è in anteprima:gcloud config set config_delivery/location us-central1
Crea un file denominato
fleetpackage-spec.yaml
con i seguenti contenuti:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME tag: v1.0.0 serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com path: kubernetes-manifests target: fleet: project: projects/PROJECT_ID selector: matchLabels: env: dev rolloutStrategy: rolling: maxConcurrent: 1
Sostituisci
REPOSITORY_NAME
con il nome del tuo repository, come viene visualizzato nella connessione Cloud Build.I campi del selettore corrispondono all'etichetta di appartenenza al parco risorse che hai creato in precedenza. In questo modo, l'applicazione Cymbal Bank viene implementata solo nel cluster
scalable-apps-dev
. Il clusterscalable-apps
del primo tutorial non è interessato. Nella sezione successiva vedrai un esempio di pacchetto del parco risorse che ha come target tutti i cluster di un parco risorse.Il campo Strategia di implementazione controlla la modalità di deployment delle risorse nei cluster. In questo esempio, il deployment viene eseguito solo su un cluster, quindi questo campo non modifica la modalità di avanzamento del rollout. Tuttavia, se avevi molti cluster, questa impostazione garantisce che i file di risorse vengano applicati a un cluster prima di passare al successivo. In questo modo puoi monitorare l'avanzamento dell'implementazione.
Crea il pacchetto del parco risorse:
gcloud alpha container fleet packages create cymbal-bank-fleet-package \ --source=fleetpackage-spec.yaml \ --project=PROJECT_ID
Verifica che il pacchetto del parco risorse sia stato creato:
gcloud alpha container fleet packages list
L'output elenca lo stato del trigger di build. Dopo alcuni secondi, il campo
MESSAGE
viene aggiornato con un output simile al seguente:MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:
Puoi fare clic sul link fornito per visualizzare i log di streaming per il job Cloud Build. L'elaborazione del trigger di build da parte di Cloud Build può richiedere alcuni minuti.
Al termine dell'attivazione della build, l'output di
gcloud alpha container fleet packages list
è simile al seguente:NAME: cymbal-bank-fleet-package STATE: ACTIVE CREATE_TIME: 2024-07-09T15:15:56 ACTIVE_ROLLOUT: rollout-20240709-153621 LAST_COMPLETED_ROLLOUT: MESSAGES:
Il pacchetto del parco risorse inizia a implementare le risorse Kubernetes nel parco risorse.
Nella pagina Google Kubernetes Engine della console Google Cloud , seleziona il cluster
scalable-apps-dev
, poi vai alla pagina Carichi di lavoro per visualizzare una visualizzazione aggregata dei carichi di lavoro che vengono implementati in tutti i tuoi cluster GKE:Apri la pagina Carichi di lavoro
Potresti visualizzare alcuni errori mentre Autopilot adegua i pod per soddisfare le richieste di risorse. Dopo qualche minuto, dovresti vedere l'avvio dei pod con lo stato OK.
Per visualizzare l'interfaccia web di Cymbal Bank, completa i seguenti passaggi:
Nella pagina Google Kubernetes Engine della console Google Cloud , vai alla pagina Gateway, servizi e Ingress.
Per trovare l'ingresso di Cymbal Bank, fai clic sulla scheda "Servizi" e individua il servizio con il nome
frontend
.Fai clic sul link Endpoint per l'ingresso
frontend
, ad esempio198.51.100.143:80
, per aprire l'interfaccia web di Cymbal Bank.
Esegui il deployment delle risorse in un parco risorse
Successivamente, immagina uno scenario in cui vuoi estendere l'applicazione Cymbal Bank con un nuovo microservizio. Vuoi eseguire il deployment di questo microservizio in tutti i tuoi cluster attuali e in tutti i cluster futuri aggiunti al parco risorse. Utilizzando un pacchetto del parco risorse, puoi eseguire il deployment su più cluster e ottenere il deployment automatico sui nuovi cluster.
Aggiungere nuove risorse al repository Git
Per dimostrare l'aggiunta di un nuovo servizio all'applicazione, crea un deployment nginx di base e aggiungilo ai cluster:
In una finestra del browser web della tua fork di GitHub di Cymbal Bank, fai clic su Aggiungi file e poi su Crea nuovo file.
Assegna al file il nome
new-resource/nginx.yaml
e incolla i seguenti contenuti al suo interno:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:1.14.2 name: nginx ports: - containerPort: 80
Fai clic su Commit changes… (Esegui commit delle modifiche…).
Nella finestra di dialogo di conferma, mantieni selezionata l'opzione Esegui il commit direttamente nel ramo
main
e poi fai clic su Esegui il commit delle modifiche.Nella pagina principale del repository Cymbal Bank di cui hai creato un fork, seleziona Releases dalla barra laterale.
Nella parte superiore della pagina, scegli Crea una nuova release.
Seleziona il menu Scegli un tag e digita
v1.1.0
come tag. Fai clic su Crea nuovo tag.Fai clic su Pubblica release.
Esegui il deployment di una risorsa nei cluster con un pacchetto del parco risorse
Per eseguire il deployment della nuova risorsa, crea un nuovo pacchetto della flotta:
Questo pacchetto del parco risorse ha come target tutti i cluster del parco risorse, poiché non contiene un campo selettore. Ciò significa anche che a tutti i cluster futuri aggiunti al parco risorse verrà aggiunto automaticamente il deployment di nginx.
In Cloud Shell, crea un file denominato
new-deployment-fleet-package.yaml
con il seguente contenuto:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME tag: v1.1.0 serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com path: kubernetes-manifests/new-resource target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: 1
Crea il pacchetto del parco risorse per iniziare l'implementazione:
gcloud alpha container fleet packages create new-deployment-fleet-package \ --source=new-deployment-fleet-package.yaml \ --project=PROJECT_ID
Verifica che il pacchetto del parco risorse sia stato creato:
gcloud alpha container fleet packages list
Puoi fare clic sul link fornito per visualizzare i log di streaming per il job Cloud Build.
Il pacchetto del parco risorse inizia a implementare le risorse Kubernetes nel tuo parco risorse. L'inizio e il completamento dell'implementazione potrebbero richiedere alcuni minuti.
Nella pagina Google Kubernetes Engine della console Google Cloud , vai alla pagina Carichi di lavoro per visualizzare una visualizzazione aggregata dei carichi di lavoro di cui viene eseguito il deployment in tutti i tuoi cluster GKE:
Puoi continuare a esplorare diverse strategie di deployment con i pacchetti del parco risorse. Ad esempio, puoi provare ad aggiungere diversi tipi di risorse al repository di cui hai creato una copia e utilizzare diverse configurazioni di pacchetti della flotta per eseguirne il deployment. Puoi anche utilizzare un pacchetto del parco risorse per eliminare le risorse che hai deployment nei cluster. Per ulteriori informazioni sui pacchetti del parco risorse, consulta la sezione Deploy fleet packages nella documentazione di Config Sync.
Eliminare risorse in un parco risorse
Proprio come puoi eseguire il deployment delle risorse in un parco risorse, puoi eliminarle in un parco risorse con un pacchetto del parco risorse.
Per rimuovere le singole risorse, i passaggi di alto livello sono i seguenti:
- Elimina la risorsa dal repository Git.
- Crea una nuova release Git e un nuovo tag.
- Aggiorna il campo
tag
del pacchetto del parco risorse. - Esegui il comando di aggiornamento del pacchetto del parco risorse.
In alternativa, puoi eliminare il pacchetto del parco risorse stesso, il che comporta anche l'eliminazione di tutte le risorse gestite dal pacchetto del parco risorse.
Ad esempio, se vuoi rimuovere il deployment nginx dalla sezione precedente, esegui questo comando:
gcloud alpha container fleet packages delete new-deployment-fleet-package --force