Deployment di un'applicazione Linux stateless


Questa pagina spiega come eseguire il deployment di un'applicazione Linux stateless utilizzando Google Kubernetes Engine (GKE). Puoi anche scoprire come eseguire il deployment di un'applicazione Windows stateless.

Panoramica

Le applicazioni stateless sono applicazioni che non archiviano i dati o lo stato delle applicazioni nel cluster o nell'archiviazione permanente. I dati e lo stato delle applicazioni rimangono invece nel client, il che rende più scalabili le applicazioni stateless. Ad esempio, un'applicazione frontend è stateless: esegui il deployment di più repliche per aumentarne la disponibilità e fare lo scale down quando la domanda è ridotta e le repliche non hanno bisogno di identità univoche.

Kubernetes utilizza il controller Deployment per eseguire il deployment di applicazioni stateless come pod uniformi e non univoci. I deployment gestiscono lo stato desiderato della tua applicazione: quanti pod devono eseguire l'applicazione, quale versione dell'immagine container devono essere eseguiti, quali pod devono essere etichettati e così via. Lo stato desiderato può essere modificato in modo dinamico tramite gli aggiornamenti alla specifica del pod del deployment.

Le applicazioni stateless sono in contrasto con le applicazioni stateful, che utilizzano l'archiviazione permanente per salvare i dati e che usano StatefulSets per eseguire il deployment di pod con identità univoche.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.
  • Assicurati che la tua applicazione containerizzata sia archiviata in un registro di immagini, ad esempio Artifact Registry.

  • Se non hai mai utilizzato GKE, devi completare la quickstart, in cui abilita l'API GKE e scoprirai il funzionamento del prodotto.

Struttura di un deployment

Di seguito è riportato un esempio di un semplice file manifest Deployment. Questo deployment crea tre pod replicati, etichettati app=my-app, che eseguono l'immagine hello-app archiviata in Artifact Registry:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

In questo esempio:

  • .spec.replicas: è il numero di pod replicati gestiti dal deployment.
  • .spec.template.metadata.labels: è l'etichetta assegnata a ciascun pod, utilizzata dal deployment per gestire i pod.
  • .spec.template.spec: è la specifica del pod, che definisce la modalità di esecuzione di ogni pod. spec.containers include il nome del container da eseguire in ogni pod e l'immagine container da eseguire.

Per ulteriori informazioni sulla specifica del deployment, consulta il riferimento per l'API Deployment.

Creazione di un deployment

Puoi creare un deployment utilizzando uno dei seguenti metodi:

  • Puoi utilizzare la funzionalità Deployment nel menu Carichi di lavoro della console Google Cloud per creare un deployment semplice da un'immagine container che hai archiviato in Artifact Registry
  • Puoi scrivere un manifest di deployment ed eseguire kubectl apply per creare la risorsa

kubectl apply

Puoi creare e aggiornare i deployment in modo dichiarativo da file manifest utilizzando kubectl apply. Questo metodo conserva anche gli aggiornamenti apportati alle risorse attive senza unire le modifiche nei file manifest.

Per creare un deployment dal relativo file manifest, esegui questo comando:

kubectl apply -f DEPLOYMENT_FILE

Sostituisci DEPLOYMENT_FILE con il file manifest, ad esempio config.yaml.

Puoi anche utilizzare kubectl apply -f DIRECTORY/ per creare tutti gli oggetti (tranne quelli esistenti) definiti nei file manifest archiviati in una directory.

Console

Per creare un deployment, segui questi passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Fai clic su Esegui il deployment.

  3. In Specifica il contenitore, seleziona una delle seguenti opzioni:

    • Immagine container esistente per scegliere un'immagine container disponibile da Artifact Registry o DockerHub. In Percorso immagine, inserisci il percorso dell'immagine container e la versione.

    • Nuova immagine container per utilizzare un'immagine creata con Cloud Source Repositories e Cloud Build.

  4. Facoltativamente, configura il deployment con:

    • Variabili di ambiente da trasmettere al container.
    • Comandi iniziali per personalizzare il punto di ingresso del container in fase di runtime.
  5. Fai clic su Fine, poi su Continua.

  6. Nella sezione Configurazione, assegna un nome applicazione al deployment e specifica lo spazio dei nomi Kubernetes in cui eseguirne il deployment.

  7. Facoltativamente, in Etichette, puoi aggiungere Etichette Kubernetes al deployment.

  8. Per salvare il file YAML che crea questo deployment per aggiornarlo in un secondo momento, fai clic su Visualizza YAML. Copia e incolla il codice YAML in un file, quindi salvalo e fai clic su Chiudi nella finestra di dialogo Output YAML.

  9. Dal menu a discesa Cluster Kubernetes, scegli il cluster che ti interessa.

  10. Fai clic su Esegui il deployment.

Ispezione del deployment

Dopo aver creato un deployment, puoi utilizzare uno dei seguenti metodi per ispezionarlo:

kubectl

Per ottenere informazioni dettagliate sul deployment, esegui questo comando:

kubectl describe deployment DEPLOYMENT_NAME

Sostituisci DEPLOYMENT_NAME con il nome del deployment.

Per elencare i pod creati dal deployment, esegui questo comando:

kubectl get pods -l KEY=VALUE

In questo comando, il flag -l indica a kubectl di recuperare tutti i pod con un'etichetta chiave-valore. Ad esempio, se hai etichettato il deployment app: my-app, eseguirai kubectl get pods -l app=my-app per visualizzare i pod con quell'etichetta.

Per ottenere informazioni su un pod specifico:

kubectl describe pod POD_NAME

Per visualizzare il manifest di un deployment, esegui questo comando:

kubectl get deployments DEPLOYMENT_NAME -o yaml

Questo comando visualizza la configurazione attiva del deployment in formato YAML.

Console

Per esaminare un deployment, segui questi passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment da ispezionare.

  3. Nella pagina Dettagli deployment, esegui una delle seguenti operazioni:

    • Fai clic sulla scheda Cronologia delle revisioni per visualizzare la cronologia delle revisioni del deployment.
    • Fai clic sulla scheda Eventi per visualizzare tutti gli eventi correlati al deployment.
    • Fai clic sulla scheda Log per visualizzare i log delle attività dei container nel deployment.
    • Fai clic sulla scheda YAML per visualizzare, copiare e scaricare il manifest YAML per il deployment.

Aggiornamento del deployment

Puoi implementare gli aggiornamenti alla specifica del pod di un deployment, ad esempio l'immagine, l'utilizzo/le richieste di risorse o la configurazione.

Puoi aggiornare un deployment utilizzando i seguenti metodi:

  • Puoi utilizzare il menu Aggiornamento in sequenza e l'editor YAML dal menu Carichi di lavoro della console Google Cloud.
  • Puoi apportare modifiche a un file manifest e applicarle con kubectl apply.
  • Puoi aggiornare i campi image, resources o selector della specifica del pod utilizzando kubectl set.
  • Puoi aggiornare un deployment direttamente dalla shell o in un editor che preferisci utilizzando kubectl edit.

kubectl apply

Puoi aggiornare il deployment applicando un file manifest nuovo o aggiornato. Ciò è utile per apportare varie modifiche al deployment, ad esempio per la scalabilità o per specificare una nuova versione dell'applicazione.

Per aggiornare un deployment, esegui questo comando:

kubectl apply -f DEPLOYMENT_FILE

Sostituisci DEPLOYMENT_FILE con il file manifest aggiornato.

Il comando kubectl apply applica un file manifest a una risorsa. Se la risorsa specificata non esiste, viene creata dal comando.

kubectl set

Puoi utilizzare kubectl set per modificare i campi dell'immagine, delle risorse (richieste o limiti) o del selettore di un deployment.

Per modificare l'immagine di un deployment, esegui questo comando:

kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG

Ad esempio, per aggiornare un deployment dalla versione 1.7.9 alla 1.9.1 di nginx, esegui questo comando:

kubectl set image deployment nginx nginx=nginx:1.9.1

Console

Per accedere al menu Aggiornamento in sequenza del deployment:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment da modificare.

  3. Fai clic su Azioni > Aggiornamento in sequenza.

  4. Configura i seguenti parametri facoltativi per la strategia di aggiornamento:

    • Numero minimo di secondi pronti: specifica il numero minimo di secondi per cui i pod appena creati devono essere pronti per essere considerati disponibili.
    • Picco massimo: specifica il numero massimo di pod che possono essere creati rispetto al numero desiderato di pod. Il valore può essere un numero assoluto o una percentuale.
    • Numero massimo non disponibili: specifica il numero massimo di pod che possono non essere disponibili durante il processo di aggiornamento. Il valore può essere un numero assoluto o una percentuale.
  5. In Immagini container, inserisci il percorso e la versione dell'immagine container aggiornata.

  6. Fai clic su Aggiorna.

Rollback di un aggiornamento

Puoi eseguire il rollback di un aggiornamento utilizzando kubectl rollout undo.

Puoi eseguire il rollback di un aggiornamento in corso o completato alla revisione precedente:

kubectl rollout undo deployment my-deployment

Puoi anche eseguire il rollback a una revisione specifica:

kubectl rollout undo deployment my-deployment --to-revision=3

Scalabilità di un deployment

Puoi scalare manualmente un deployment utilizzando la console Google Cloud o kubectl scale.

Scopri di più sulla scalabilità automatica dei deployment.

kubectl

kubectl scale può essere utilizzato in qualsiasi momento per scalare il deployment.

Per scalare manualmente un deployment, esegui questo comando:

kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS

Sostituisci NUMBER_OF_REPLICAS con il numero desiderato di pod replicati.

Console

Per scalare un deployment, segui questi passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment da modificare.

  3. Fai clic su Azioni > Scala > Modifica repliche

  4. Inserisci il nuovo numero di repliche per il deployment.

  5. Fai clic su Scala.

Eliminazione di un deployment

Puoi eliminare un deployment utilizzando la console Google Cloud o kubectl delete.

kubectl

Per eliminare un deployment, esegui questo comando:

kubectl delete deployment DEPLOYMENT_NAME

Console

Per eliminare un deployment, segui questi passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, seleziona uno o più deployment da eliminare.

  3. Fai clic su Elimina.

  4. Quando ti viene richiesto di confermare, fai clic su Elimina.

Passaggi successivi