Como implantar um aplicativo do Linux sem estado


Nesta página, explicamos como implantar um aplicativo Linux sem estado usando o Google Kubernetes Engine (GKE). Saiba também como implantar um aplicativo sem estado do Windows.

Visão geral

Aplicativos sem estado são aqueles que não armazenam dados ou o estado do aplicativo no cluster ou no armazenamento permanente. Em vez disso, os dados e o estado do aplicativo permanecem no cliente, o que torna os aplicativos sem estado mais escalonáveis. Por exemplo, um aplicativo de front-end é sem estado: você implanta várias réplicas para aumentar a disponibilidade dele e diminui quando a demanda é baixa, e as réplicas não precisam de identidades exclusivas.

O Kubernetes usa a Implantação para implantar aplicativos sem estado como pods uniformese não exclusivos. As implantações gerenciam o estado pretendido do aplicativo: quantos pods executarão seu aplicativo, qual versão da imagem do container será executada, como os pods serão rotulados e assim por diante. O estado pretendido pode ser alterado dinamicamente por meio de atualizações na especificação de pod da implantação.

Os aplicativos sem estado são diferentes dos com estado, que usam armazenamento permanente (em inglês) para salvar dados e StatefulSets para implantar pods com identidades exclusivas.

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.
  • Verifique se o aplicativo em contêiner está armazenado em um registro de imagens, como o Artifact Registry.

  • Se você é iniciante no GKE, precisará concluir o início rápido. Lá, você ativará a API GKE e saberá como o produto funciona.

Anatomia de uma implantação

Veja a seguir um exemplo de arquivo de manifesto de implantação simples. Essa implantação cria três pods replicados rotulados como run=my-app, que executam a imagem hello-app armazenada no 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

Neste exemplo:

  • .spec.replicas é o número de pods replicados que a implantação gerencia;
  • .spec.template.metadata.labels é o rótulo dado a cada pod que a implantação usa para gerenciá-los;
  • .spec.template.spec é a especificação do Pod, que define como cada pod deve ser executado. spec.containers inclui o nome do contêiner a ser executado em cada pod e a imagem do contêiner que deve ser executada.

Para mais informações sobre a especificação da implantação, consulte a referência da API Deployment.

Como criar uma implantação

Você cria uma implantação usando um dos seguintes métodos:

  • Use o recurso de implantação no menu Cargas de trabalho do console do Google Cloud para criar uma implantação simples a partir de uma imagem de contêiner armazenada no Artifact Registry.
  • Escreva um manifesto de Implantação e execute kubectl apply (em inglês) para criar o recurso.

kubectl apply

Use kubectl apply para criar e atualizar declarativamente (em inglês) as Implantações a partir de arquivos de manifesto. Esse método também mantém atualizações feitas em recursos ativos sem mesclar as alterações novamente nos arquivos de manifesto.

Para criar uma implantação a partir do seu arquivo de manifesto, execute o seguinte comando:

kubectl apply -f DEPLOYMENT_FILE

Substitua DEPLOYMENT_FILE pelo arquivo de manifesto, como config.yaml.

Também é possível usar kubectl apply -f DIRECTORY/ para criar todos os objetos (exceto os atuais) definidos nos arquivos de manifesto armazenados em um diretório.

Console

Para criar uma implantação, execute as etapas a seguir:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Clique em Implantar.

  3. Em Especificar contêiner, selecione uma das seguintes opções:

    • Imagem de contêiner atual para escolher uma imagem de contêiner disponível no Artifact Registry ou no DockerHub. Em Caminho da imagem, insira o caminho para a imagem do contêiner e a versão.

    • Nova imagem de contêiner para usar uma imagem criada com o Cloud Source Repositories e o Cloud Build.

  4. Se quiser, configure a implantação com:

    • as variáveis de ambiente a serem transmitidas para o contêiner;
    • os comandos iniciais para personalizar o entrypoint do contêiner no ambiente de execução.
  5. Clique em Concluído e em Continuar.

  6. Na seção Configuração, insira um Nome do aplicativo para a implantação e especifique o Namespace do Kubernetes para implantá-lo nela.

  7. Opcionalmente, em Rótulos, é possível adicionar rótulos do Kubernetes à implantação.

  8. Para salvar o YAML que cria essa implantação para atualizá-lo depois, clique em Ver YAML. Copie e cole o YAML em um arquivo, salve-o e clique em Fechar na caixa de diálogo Saída YAML.

  9. No menu suspenso Cluster do Kubernetes, escolha o cluster que quiser.

  10. Clique em Implantar.

Como inspecionar a implantação

Depois de criar uma implantação, você pode usar um dos seguintes métodos para inspecioná-la:

kubectl

Para ver informações detalhadas sobre a implantação, execute o seguinte comando:

kubectl describe deployment DEPLOYMENT_NAME

Substitua DEPLOYMENT_NAME pelo nome do Deployment.

Para listar os pods criados pela implantação, execute o comando a seguir:

kubectl get pods -l KEY=VALUE

Neste comando, a sinalização -l instrui kubectl a obter todos os pods com um rótulo de valor-chave. Por exemplo, se você identificou a implantação run: my-app, você executaria kubectl get pods -l run=my-app para ver os pods com essa etiqueta.

Para ver informações sobre um pod específico:

kubectl describe pod POD_NAME

Para ver o manifesto de uma implantação, execute o seguinte comando:

kubectl get deployments DEPLOYMENT_NAME -o yaml

Esse comando exibe a configuração ativa da implantação no formato YAML.

Console

Para inspecionar uma implantação, siga as etapas a seguir:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, clique no nome da implantação que você quer inspecionar.

  3. Na página Detalhes da implantação, siga um destes procedimentos:

    • Clique na guia Histórico de revisões para ver o histórico de revisões da implantação.
    • Clique na guia Eventos para ver todos os eventos relacionados à implantação.
    • Clique na guia Registros para ver os registros de atividade do contêiner na implantação.
    • Clique na guia YAML para ver, copiar e fazer o download do manifesto YAML para a implantação.

Como atualizar a implantação

É possível lançar atualizações na especificação de pod da implantação, como imagem, uso/solicitação de recursos ou configuração.

É possível atualizar uma implantação usando os métodos a seguir:

  • Use o menu Atualização gradual e o editor de YAML no menu Cargas de trabalho no Console do Google Cloud.
  • Faça alterações em um arquivo de manifesto e os aplique com kubectl apply (em inglês).
  • Atualize os campos image, resources ou selector da especificação do pod usando kubectl set.
  • Atualize uma Implantação diretamente do shell ou em um editor de preferência usando kubectl edit (em inglês).

kubectl apply

Para atualizar a implantação, você pode aplicar um arquivo de manifesto novo ou atualizado. Isso é útil para fazer várias alterações na Implantação. Por exemplo, ao fazer um escalonamento ou especificar uma nova versão do aplicativo.

Para atualizar uma implantação, execute o comando a seguir:

kubectl apply -f DEPLOYMENT_FILE

Substitua DEPLOYMENT_FILE pelo arquivo de manifesto atualizado.

O comando kubectl apply aplica um arquivo de manifesto a um recurso. Se o recurso especificado não existir, ele será criado pelo comando.

kubectl set

Use kubectl set para modificar a imagem, recursos (solicitações ou limites) ou campos de seleção de uma implantação.

Para alterar a imagem de uma implantação, execute o seguinte comando:

kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG

Por exemplo, para atualizar uma implantação do nginx versão 1.7.9 para 1.9.1, execute este comando:

kubectl set image deployment nginx nginx=nginx:1.9.1

Console

Para acessar o menu Atualização gradual da implantação:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, clique no nome da implantação que você quer modificar.

  3. Clique em Ações > Atualização gradual.

  4. Configure os seguintes parâmetros opcionais para a estratégia de atualização:

    • Mínimo de segundos para estar pronto: especifica o número mínimo de segundos em que os pods recém-criados precisam estar prontos para que sejam considerados disponíveis.
    • Sobrecarga máxima: especifica o número máximo de pods que podem ser criados além do número pretendido. O valor pode ser um número absoluto ou uma porcentagem.
    • Máximo indisponível: especifica o número máximo de pods que podem estar indisponíveis durante o processo de atualização. O valor pode ser um número absoluto ou uma porcentagem.
  5. Em Imagens de contêiner, digite o caminho e a versão da imagem do contêiner atualizada.

  6. Clique em Atualizar.

Reversão de uma atualização

Use kubectl rollout undo para reverter uma atualização.

É possível reverter uma atualização em andamento ou concluída para a revisão anterior:

kubectl rollout undo deployment my-deployment

Você também pode reverter para uma revisão específica:

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

Como escalonar uma implantação

Use o console do Google Cloud ou o kubectl scale para escalonar manualmente uma implantação.

Saiba mais sobre o escalonamento automático de Implantações.

kubectl

kubectl scale pode ser usado a qualquer momento para escalonar sua implantação.

Para escalonar uma implantação manualmente, execute o comando a seguir:

kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS

Substitua NUMBER_OF_REPLICAS pelo número pretendido de pods replicados.

Console

Para escalonar uma implantação, siga as etapas a seguir:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, clique no nome da implantação que você quer modificar.

  3. Clique em Ações > Escalonar > Editar réplicas

  4. Digite o novo número de Réplicas da implantação.

  5. Clique em Escalonar.

Como excluir uma implantação

É possível excluir uma implantação usando o console do Google Cloud ou o kubectl delete.

kubectl

Para excluir uma implantação, execute o comando a seguir:

kubectl delete deployment DEPLOYMENT_NAME

Console

Para excluir uma implantação, siga as etapas a seguir:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, selecione uma ou mais implantações a serem excluídas.

  3. Clique em Excluir.

  4. Quando solicitado a confirmar, clique em Excluir.

A seguir