Implementar uma aplicação Linux sem estado


Esta página explica como implementar uma aplicação Linux sem estado através do Google Kubernetes Engine (GKE). Também pode saber como implementar uma aplicação Windows sem estado.

Vista geral

As aplicações sem estado são aplicações que não armazenam dados nem o estado da aplicação no cluster ou no armazenamento persistente. Em alternativa, os dados e o estado da aplicação permanecem com o cliente, o que torna as aplicações sem estado mais escaláveis. Por exemplo, uma aplicação de front-end não tem estado: implementa várias réplicas para aumentar a respetiva disponibilidade e reduz a escala quando a procura é baixa, e as réplicas não precisam de identidades únicas.

O Kubernetes usa o controlador Deployment para implementar aplicações sem estado como pods uniformes e não únicos. As implementações gerem o estado desejado da sua aplicação: quantos pods devem executar a sua aplicação, que versão da imagem do contentor deve ser executada, que etiquetas devem ser atribuídas aos pods, etc. O estado desejado pode ser alterado dinamicamente através de atualizações à especificação do pod da implementação.

As aplicações sem estado contrastam com as aplicações com estado, que usam o armazenamento persistente para guardar dados e que usam os StatefulSets para implementar pods com identidades únicas.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.
  • Certifique-se de que a aplicação em contentor está armazenada num registo de imagens, como o Artifact Registry.

  • Se for um novo utilizador do GKE, deve concluir o início rápido, no qual ativa a API GKE e aprende como o produto funciona.

Anatomia de uma implementação

Segue-se um exemplo de um ficheiro de manifesto de implementação simples. Esta implementação cria três pods replicados etiquetados 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 implementação gere.
  • .spec.template.metadata.labels: é a etiqueta atribuída a cada agrupamento, que a implementação usa para gerir os agrupamentos.
  • .spec.template.spec: é a especificação do agrupamento, que define como cada agrupamento deve ser executado. spec.containers inclui o nome do contentor a executar em cada pod e a imagem do contentor que deve ser executada.

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

Criar uma implementação

Cria uma implementação através de um dos seguintes métodos:

  • Pode usar a funcionalidade Implementar no menu Cargas de trabalho da Google Cloud consola para criar uma implementação simples a partir de uma imagem de contentor que armazenou no Artifact Registry
  • Pode escrever um manifesto de implementação e executar o comando kubectl apply para criar o recurso

kubectl apply

Pode criar e atualizar implementações declarativamente a partir de ficheiros de manifesto usando o kubectl apply. Este método também retém as atualizações feitas aos recursos ativos sem incorporar novamente as alterações nos ficheiros de manifesto.

Para criar uma implementação a partir do respetivo ficheiro de manifesto, execute o seguinte comando:

kubectl apply -f DEPLOYMENT_FILE

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

Também pode usar kubectl apply -f DIRECTORY/ para criar todos os objetos (exceto os existentes) definidos nos ficheiros de manifesto armazenados num diretório.

Consola

Para criar uma implementação, siga estes passos:

  1. Aceda à página Workloads na Google Cloud consola.

    Aceda a Cargas de trabalho

  2. Clique em Implementar.

  3. Em Especificar contentor, selecione uma das seguintes opções:

    • Imagem de contentor existente para escolher uma imagem de contentor disponível no Artifact Registry ou no DockerHub. Em Caminho da imagem, introduza o caminho para a imagem do contentor e a versão.

    • Nova imagem de contentor para usar uma imagem criada com os Cloud Source Repositories e o Cloud Build.

  4. Opcionalmente, configure a implementação com:

    • Variáveis de ambiente a transmitir para o contentor.
    • Comandos iniciais para personalizar o ponto de entrada do contentor no tempo de execução.
  5. Clique em Concluído e, de seguida, em Continuar.

  6. Na secção Configuração, atribua um Nome da aplicação à implementação e especifique o Namespace do Kubernetes no qual a implementar.

  7. Opcionalmente, em Etiquetas, pode adicionar etiquetas do Kubernetes à implementação.

  8. Para guardar o YAML que cria esta implementação e atualizá-lo mais tarde, clique em Ver YAML. Copie e cole o YAML num ficheiro, guarde-o e clique em Fechar na caixa de diálogo Saída YAML.

  9. No menu pendente Kubernetes Cluster, escolha o cluster pretendido.

  10. Clique em Implementar.

A inspecionar a implementação…

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

kubectl

Para obter informações detalhadas sobre a implementação, execute o seguinte comando:

kubectl describe deployment DEPLOYMENT_NAME

Substitua DEPLOYMENT_NAME pelo nome da implementação.

Para apresentar uma lista dos pods criados pela implementação, execute o seguinte comando:

kubectl get pods -l KEY=VALUE

Neste comando, a flag -l indica ao kubectl que obtenha todos os pods com uma etiqueta de valor-chave. Por exemplo, se etiquetou a implementação como run: my-app, executaria kubectl get pods -l run=my-app para ver os pods com essa etiqueta.

Para obter informações sobre um Pod específico:

kubectl describe pod POD_NAME

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

kubectl get deployments DEPLOYMENT_NAME -o yaml

Este comando apresenta a configuração em direto da implementação no formato YAML.

Consola

Para inspecionar uma implementação, siga estes passos:

  1. Aceda à página Workloads na Google Cloud consola.

    Aceda a Cargas de trabalho

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

  3. Na página Detalhes da implementação, faça qualquer uma das seguintes ações:

    • Clique no separador Histórico de revisões para ver o histórico de revisões da implementação.
    • Clique no separador Eventos para ver todos os eventos relacionados com a implementação.
    • Clique no separador Registos para ver os registos de atividade do contentor na implementação.
    • Clique no separador YAML para ver, copiar e transferir o manifesto YAML da implementação.

A atualizar a implementação

Pode implementar atualizações na especificação de pods de uma implementação, como a respetiva imagem, utilização/pedidos de recursos ou configuração.

Pode atualizar uma implementação através dos seguintes métodos:

  • Pode usar o menu Atualização contínua e o editor YAML no menuGoogle Cloud console Workloads.
  • Pode fazer alterações a um ficheiro de manifesto e aplicá-las com o comando kubectl apply.
  • Pode atualizar os campos image, resources ou selector da especificação do pod usando kubectl set.
  • Pode atualizar uma implementação diretamente a partir da shell ou num editor preferencial usando kubectl edit.

kubectl apply

Pode atualizar a implementação aplicando um ficheiro de manifesto novo ou atualizado. Isto é útil para fazer várias alterações à sua implementação, como dimensionar ou especificar uma nova versão da sua aplicação.

Para atualizar uma implementação, execute o seguinte comando:

kubectl apply -f DEPLOYMENT_FILE

Substitua DEPLOYMENT_FILE pelo ficheiro de manifesto atualizado.

O comando kubectl apply aplica um ficheiro de manifesto a um recurso. Se o recurso especificado não existir, é criado pelo comando.

kubectl set

Pode usar kubectl set para alterar a imagem, os recursos (pedidos ou limites) ou os campos do seletor de uma implementação.

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

kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG

Por exemplo, para atualizar uma implementação da versão 1.7.9 para a 1.9.1, execute o seguinte comando:nginx

kubectl set image deployment nginx nginx=nginx:1.9.1

Consola

Para aceder ao menu Atualização contínua da implementação:

  1. Aceda à página Workloads na Google Cloud consola.

    Aceda a Cargas de trabalho

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

  3. Clique em Ações > Atualização contínua.

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

    • Segundos mínimos prontos: especifica o número mínimo de segundos durante os quais os pods recém-criados devem estar prontos para serem considerados disponíveis.
    • Aumento máximo: especifica o número máximo de agrupamentos que podem ser criados acima do número desejado de agrupamentos. O valor pode ser um número absoluto ou uma percentagem.
    • Máximo indisponível: especifica o número máximo de agrupamentos que podem estar indisponíveis durante o processo de atualização. O valor pode ser um número absoluto ou uma percentagem.
  5. Em Imagens de contentores, introduza o caminho e a versão da imagem atualizada do contentor.

  6. Clique em Atualizar.

Reverter uma atualização

Pode reverter uma atualização através do comando kubectl rollout undo.

Pode reverter uma atualização em curso ou concluída para a revisão anterior:

kubectl rollout undo deployment my-deployment

Também pode reverter para uma revisão específica:

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

Dimensionar uma implementação

Pode dimensionar manualmente uma implementação através da Google Cloud consola ou do kubectl scale.

Pode saber mais sobre o dimensionamento automático de implementações.

kubectl

kubectl scale pode ser usado em qualquer altura para dimensionar a sua implementação.

Para dimensionar manualmente uma implementação, execute o seguinte comando:

kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS

Substitua NUMBER_OF_REPLICAS pelo número desejado de pods replicados.

Consola

Para dimensionar uma implementação, siga estes passos:

  1. Aceda à página Workloads na Google Cloud consola.

    Aceda a Cargas de trabalho

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

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

  4. Introduza o novo número de Réplicas para a implementação.

  5. Clique em Escala.

Eliminar uma implementação

Pode eliminar uma implementação através da Google Cloud consola ou kubectl delete.

kubectl

Para eliminar uma implementação, execute o seguinte comando:

kubectl delete deployment DEPLOYMENT_NAME

Consola

Para eliminar uma implementação, siga estes passos:

  1. Aceda à página Workloads na Google Cloud consola.

    Aceda a Cargas de trabalho

  2. Na lista de cargas de trabalho, selecione uma ou mais implementações para eliminar.

  3. Clique em Eliminar.

  4. Quando lhe for pedido que confirme, clique em Eliminar.

O que se segue?