Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Cargas de trabalho/ Configuração de um contêiner/ Configuração da política de atualização da carga de trabalho
Atualizado em 2024-11-28 GMT+08:00

Configuração da política de atualização da carga de trabalho

Em aplicações reais, a atualização é uma operação comum. Uma Implementação, o StatefulSet ou o DaemonSet podem suportar facilmente a atualização de aplicações.

Você pode definir diferentes políticas de atualização:

  • Atualização contínua: novos pods são criados gradualmente e, em seguida, os pods anteriores são excluídos. Esta é a política padrão.
  • Atualização de substituição: os pods atuais são excluídos e, em seguida, novos pods são criados.

Parâmetros de atualização

Parâmetro

Descrição

Restrição

Max. Surge (maxSurge)

Especifica o número máximo de pods que podem existir em comparação com spec.replicas. O valor padrão é 25%.

Por exemplo, se spec.replicas for definido como 4, um máximo de cinco pods podem existir durante a atualização. Ou seja, a atualização é realizada em uma etapa de 1. Durante a atualização real, o valor é convertido em um número e arredondado para cima. O valor também pode ser definido como um número absoluto.

Esse parâmetro é suportado apenas por Implementações e DaemonSets.

Max. Unavailable Pods (maxUnavailable)

Especifica o número máximo de pods que podem estar indisponíveis em comparação com spec.replicas. O valor padrão é 25%

Por exemplo, se spec.replicas estiver definido como 4, pelo menos três pods existirão durante a atualização. Ou seja, a exclusão é realizada em uma etapa de 1. O valor também pode ser definido como um número absoluto.

Esse parâmetro é suportado apenas por Implementações e DaemonSets.

Min. Ready Seconds (minReadySeconds)

Um pod é considerado disponível apenas quando o tempo mínimo de prontidão é excedido sem que nenhum de seus contêineres falhe. O valor padrão é 0 (o pod é considerado disponível imediatamente após estar pronto).

Nenhuma

Revision History Limit (revisionHistoryLimit)

Especifica o número de ReplicaSets antigos a serem retidos para permitir a reversão. Esses ReplicaSets antigos consomem recursos em etcd e lotam a saída de kubectl get rs. A configuração de cada revisão de Implementação é armazenada em seus ReplicaSets. Portanto, depois que o ReplicaSet anterior for excluído, você perderá a capacidade de reverter para essa revisão de Implementação. Por padrão, 10 ReplicaSets anteriores serão mantidos, mas o valor ideal depende da frequência e estabilidade das novas Implementações.

Nenhuma

Max. Upgrade Duration (progressDeadlineSeconds)

Especifica o número de segundos que o sistema aguarda que uma Implementação progrida antes de comunicar uma falha de progresso da Implementação. Ele é exibido como uma condição com Type=Progressing, Status=False e Reason=ProgressDeadlineExceeded no status do recurso. O controlador de Implementação continuará tentando novamente a Implementação. No futuro, quando a reversão automática for implementada, o controlador de Implementação reverterá uma Implementação assim que observar tal condição.

Se este parâmetro for especificado, o valor deste parâmetro deve ser maior que .spec.minReadySeconds.

Nenhuma

Scale-In Time Window (terminationGracePeriodSeconds)

Tempo de exclusão gracioso. O valor padrão é 30 segundos. Quando um pod é excluído, um sinal SIGTERM é enviado e o sistema aguarda que as aplicações no contêiner terminem. Se a aplicação não for encerrada dentro do tempo especificado por terminationGracePeriodSeconds, um sinal SIGKILL é enviado para terminar forçosamente o pod.

Nenhuma

Exemplo de atualização

A Implementação pode ser atualizada em um modo declarativo. Ou seja, você só precisa modificar a definição YAML da Implementação. Por exemplo, você pode executar o comando kubectl edit para alterar a imagem de Implementação para nginx:alpine. Após a modificação, consulte o ReplicaSet e o pod. O resultado da consulta mostra que um novo ReplicaSet é criado e o pod é recriado.

$ kubectl edit deploy nginx

$ kubectl get rs
NAME               DESIRED   CURRENT   READY     AGE
nginx-6f9f58dffd   2         2         2         1m
nginx-7f98958cdf   0         0         0         48m

$ kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-6f9f58dffd-tdmqk   1/1       Running   0          1m
nginx-6f9f58dffd-tesqr   1/1       Running   0          1m

A Implementação pode usar os parâmetros maxSurge e maxUnavailable para controlar a proporção de pods a serem recriados durante a atualização, o que é útil em muitos cenários. A configuração é a seguinte:

spec:
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate

No exemplo anterior, o valor de spec.replicas é 2. Se ambos maxSurge e maxUnavailable forem o valor padrão 25%, maxSurge permite que existam no máximo três pods (2 x 1,25 = 2,5, arredondado para 3), e maxUnavailable não permite que um máximo de dois pods estejam indisponíveis (2 x 0,75 = 1,5, arredondado para 2). Ou seja, durante o processo de atualização, sempre haverá dois pods em execução. Cada vez que um novo pod é criado, um pod antigo é excluído, até que todos os pods sejam novos.

Reversão

Reversão é reverter uma aplicação para a versão anterior quando ocorre uma falha durante a atualização. Uma Implementação pode ser facilmente revertida para a versão anterior.

Por exemplo, se a imagem atualizada estiver com defeito, você poderá executar o comando kubectl rollout undo desfazer para reverter a Implementação.

$ kubectl rollout undo deployment nginx
deployment.apps/nginx rolled back

Uma Implementação pode ser facilmente revertida porque usa um ReplicaSet para controlar um pod. Após a atualização, o ReplicaSet anterior ainda existe. A Implementação é revertida usando o ReplicaSet anterior para recriar o pod. O número de ReplicaSets armazenados em uma Implementação pode ser restrito pelo parâmetro revisionHistoryLimit. O valor padrão é 10.