Deployment

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina vengono descritti gli oggetti del deployment Kubernetes e il loro utilizzo in Google Kubernetes Engine (GKE).

Che cos'è un deployment?

I deployment rappresentano un insieme di più pod identici, senza identità identiche. Un deployment esegue più repliche della tua applicazione e sostituisce automaticamente le istanze che non vanno a buon fine o non rispondono. In questo modo, i deployment aiutano a garantire che una o più istanze della tua applicazione siano disponibili per gestire le richieste degli utenti. I deployment sono gestiti dal controller del deployment Kubernetes.

I deployment utilizzano un modello di pod, che contiene una specifica per i suoi pod. La specifica del pod determina l'aspetto di ogni pod: le applicazioni da eseguire all'interno dei suoi container, i volumi che devono essere montati dai pod, le relative etichette e altro ancora.

Quando un modello di pod di un deployment viene modificato, i nuovi pod vengono creati automaticamente uno alla volta.

Pattern di utilizzo

I deployment sono ideali per applicazioni stateless che utilizzano volumi ReadOnlyMany o ReadWriteMany montati su più repliche, ma non per i carichi di lavoro che utilizzano volumi ReadWriteOnce. Per le applicazioni stateful che utilizzano volumi ReadWriteOnce, utilizza gli StatefulSet. Gli StatefulSet sono progettati per eseguire il deployment di applicazioni stateful e cluster che salvano i dati nell'archiviazione permanente, come i dischi permanenti di Compute Engine. Gli StatefulSet sono adatti per il deployment di Kafka, MySQL, Redis, ZooKeeper e altre applicazioni che richiedono identità univoche e permanenti e nomi host stabili.

Crea i deployment

Puoi creare un deployment utilizzando i comandi kubectl apply o kubectl create.

Una volta creato, il deployment fa in modo che il numero desiderato di pod sia in esecuzione e disponibile in ogni momento. Il deployment sostituisce automaticamente i pod che non vengono eseguiti o vengono rimossi dai nodi.

Di seguito è riportato un esempio di file manifest di deployment in formato YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

In questo esempio:

  • Viene creato un deployment denominato nginx, indicato dal campo metadata: name.
  • Il deployment crea tre pod replicati, indicati nel campo replicas.
  • Il campo Modello di pod, o campo spec: template, indica che i suoi pod sono etichettati come app: nginx.
  • La specifica del modello di pod, o campo template: spec, indica che i pod eseguono un container, nginx, che esegue l'immagine nginx Docker Hub alla versione 1.7.9.
  • Il deployment apre la porta 80 per essere utilizzata dai pod.

Per ulteriori informazioni sulle specifiche del deployment, consulta la documentazione dell'API Kubernetes.

In breve, il modello del pod contiene le seguenti istruzioni per i pod creati da questo deployment:

  • Ogni pod ha l'etichetta app: nginx.
  • Crea un container e assegnagli il nome nginx.
  • Esegui l'immagine nginx alla versione 1.7.9.
  • Apri la porta 80 per inviare e ricevere traffico.

Per ulteriori informazioni sulla creazione dei deployment, consulta Creazione di un deployment.

Aggiornamento dei deployment

Puoi aggiornare un deployment modificando la specifica del modello di pod del deployment. Apportare modifiche al campo della specifica attiva automaticamente un'implementazione di aggiornamento. In Google Cloud Console puoi utilizzare kubectl, l'API Kubernetes o il menu Carichi di lavoro GKE.

Per impostazione predefinita, quando un deployment attiva un aggiornamento, il deployment interrompe i pod, quindi esegue uno scale down graduale del numero di pod a zero, quindi svuota e termina i pod. Quindi, il deployment utilizza il modello di pod aggiornato per visualizzare nuovi pod.

I pod vecchi non vengono rimossi finché non è in esecuzione un numero sufficiente di nuovi pod, mentre i pod nuovi non vengono creati finché non viene rimosso un numero sufficiente di pod precedenti. Per vedere in quale ordine vengono visualizzati i pod e come vengono rimossi, puoi eseguire kubectl describe deployments.

I deployment possono garantire che sia in esecuzione almeno un numero in meno rispetto al numero desiderato di repliche, con al massimo un pod non disponibile. Allo stesso modo, i deployment possono garantire che sia in esecuzione al massimo un numero superiore al numero di repliche desiderato, con un massimo di un pod in esecuzione rispetto a quello desiderato.

Puoi eseguire il rollback di un aggiornamento utilizzando il comando kubectl rollout undo. Puoi anche utilizzare kubectl rollout pause per arrestare temporaneamente un deployment.

Gestione dei deployment

Di seguito è riportato un elenco di attività di gestione comuni per i deployment:

Stato e ciclo di vita

I deployment possono trovarsi in uno di tre stati del ciclo di vita: in avanzamento, completato o non riuscito.

Lo stato In corso indica che il deployment è in corso l'esecuzione delle sue attività, come l'aumento o la scalabilità dei suoi pod.

Lo stato completato indica che il deployment ha completato le sue attività, che tutti i pod sono in esecuzione con la specifica più recente e sono disponibili e che nessun pod precedente è ancora in esecuzione.

Lo stato Non riuscita indica che il deployment ha rilevato uno o più problemi che ne impediscono il completamento. Alcune cause includono quote o autorizzazioni insufficienti, errori di pull delle immagini, intervalli di limiti o errori di runtime. Per identificare le cause degli errori di un deployment, puoi eseguire kubectl get deployment [DEPLOYMENT+NAME] -o yaml ed esaminare i messaggi nel campo status: conditions.

Puoi monitorare l'avanzamento di un deployment o controllarne lo stato utilizzando il comando kubectl rollout status.

Passaggi successivi