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:
Aceda à página Workloads na Google Cloud consola.
Clique em add_box Implementar.
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.
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.
Clique em Concluído e, de seguida, em Continuar.
Na secção Configuração, atribua um Nome da aplicação à implementação e especifique o Namespace do Kubernetes no qual a implementar.
Opcionalmente, em Etiquetas, pode adicionar etiquetas do Kubernetes à implementação.
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.
No menu pendente Kubernetes Cluster, escolha o cluster pretendido.
Clique em Implementar.
A inspecionar a implementação…
Depois de criar uma implementação, pode usar um dos seguintes métodos para inspecioná-la:
- Pode usar o menu Cargas de trabalho
Pode usar
kubectl describe
ekubectl get
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:
Aceda à página Workloads na Google Cloud consola.
Na lista de cargas de trabalho, clique no nome da implementação que quer inspecionar.
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
ouselector
da especificação do pod usandokubectl 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:
Aceda à página Workloads na Google Cloud consola.
Na lista de cargas de trabalho, clique no nome da implementação que quer modificar.
Clique em list Ações > Atualização contínua.
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.
Em Imagens de contentores, introduza o caminho e a versão da imagem atualizada do contentor.
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:
Aceda à página Workloads na Google Cloud consola.
Na lista de cargas de trabalho, clique no nome da implementação que quer modificar.
Clique em list Ações > Dimensionar > Editar réplicas
Introduza o novo número de Réplicas para a implementação.
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:
Aceda à página Workloads na Google Cloud consola.
Na lista de cargas de trabalho, selecione uma ou mais implementações para eliminar.
Clique em delete Eliminar.
Quando lhe for pedido que confirme, clique em Eliminar.