Neste laboratório, você vai configurar um aplicativo no Google Kubernetes Engine (GKE) e usar um HorizontalPodAutoscaler para escalonar automaticamente o aplicativo da Web. Depois, você trabalhará com vários pools de nós de diferentes tipos e aplicará taints e tolerâncias para controlar a programação de pods em relação ao pool de nós subjacente.
Objetivos
Neste laboratório, você aprenderá a fazer o seguinte:
Configurar o escalonamento automático e o HorizontalPodAutoscaler
Adicionar um pool de nós e configurar taints nos nós para antiafinidade de pods
Configurar uma exceção para o taint do nó adicionando uma tolerância ao manifesto do pod
Configuração do laboratório
Acessar o Qwiklabs
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.
Faça login no Qwiklabs em uma janela anônima.
Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.
Aceite os termos e pule a página de recursos de recuperação.
Depois que você concluir as etapas iniciais de login, o painel do projeto será exibido.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:
A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
Para listar o nome da conta ativa, use este comando:
Implante um aplicativo da Web de amostra no cluster do GKE
Implante um aplicativo de amostra no cluster usando o arquivo de implantação web.yaml criado para você:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
run: web
template:
metadata:
labels:
run: web
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: web
ports:
- containerPort: 8080
protocol: TCP
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
O manifesto cria uma implantação usando a imagem do contêiner do aplicativo da Web de exemplo que detecta em um servidor HTTP na porta 8080.
No Cloud Shell, digite o comando a seguir para clonar o repositório no Cloud Shell do laboratório:
Mude para o diretório que contém os arquivos de exemplo deste laboratório:
cd ~/ak8s/Autoscaling/
Para criar uma implantação com base nesse arquivo, execute o seguinte comando:
kubectl create -f web.yaml --save-config
Crie um recurso de serviço do tipo NodePort na porta 8080 para a implantação Web:
kubectl expose deployment web --target-port=8080 --type=NodePort
Verifique se o serviço foi criado e se uma porta do nó foi alocada:
kubectl get service web
O endereço IP e o número da porta podem ser diferentes do exemplo de saída.
Saída:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.11.246.185 8080:32056/TCP 12s
Clique em Verificar meu progresso para conferir o objetivo.
Implante um aplicativo da Web de amostra no cluster do GKE
Tarefa 2: configure o escalonamento automático no cluster
Nesta tarefa, você vai configurar o cluster para escalonar automaticamente o aplicativo de amostra implantado antes.
Configure o escalonamento automático
Consulte na lista de implantações se o aplicativo da Web de amostra ainda está em execução:
kubectl get deployment
A saída será semelhante ao exemplo.
Saída:
NAME READY UP-TO-DATE AVAILABLE AGE
web 1/1 1 5m48s
Se a implantação Web do aplicativo não for exibida, retorne para a Tarefa 1 e implante-o novamente no cluster.
Configure o aplicativo de amostra para escalonamento automático e defina o número máximo de réplicas como quatro e o mínimo como um, com uma meta de utilização da CPU de 1%. Para isso, execute o seguinte comando:
kubectl autoscale deployment web --max 4 --min 1 --cpu-percent 1
Ao usar kubectl autoscale, especifique o máximo e o mínimo de réplicas para o aplicativo, e a meta de utilização da CPU.
Consulte na lista de implantações se ainda há só uma implantação do aplicativo da Web:
kubectl get deployment
Saída:
NAME READY UP-TO-DATE AVAILABLE AGE
web 1/1 1 1 8m21s
Inspecione o objeto HorizontalPodAutoscaler
O comando kubectl escalonamento automático usado na tarefa anterior cria um objeto HorizontalPodAutoscaler que tem como alvo um recurso especificado chamado meta de escalonamento e o dimensiona conforme necessário.
O autoescalador ajusta periodicamente o número de réplicas da meta de escalonamento para corresponder à utilização média da CPU que você especifica ao criá-lo.
Para ver a lista de recursos de HorizontalPodAutoscaler, execute o seguinte comando:
kubectl get hpa
A saída será semelhante ao exemplo.
Saída:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web Deployment/web 0%/1% 1 4 1 1m
Para inspecionar a configuração de HorizontalPodAutoscaler na forma de tabela, execute o seguinte comando:
kubectl describe horizontalpodautoscaler web
A saída será semelhante ao exemplo.
Saída:
Name: web
Namespace: default
Labels:
Annotations:
CreationTimestamp: Tue, 08 Sep 2020...
Reference: Deployment/web
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 0% (0) / 1%
Min replicas: 1
Max replicas: 4
Deployment pods: 1 current / 1 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ScaleDownStabilized recent recommendations [...]
ScalingActive True ValidMetricFound the HPA was able to [...]
ScalingLimited False DesiredWithinRange the desired count [...]
Events:
Para conferir a configuração de HorizontalPodAutoscaler no formulário YAML, execute o seguinte comando:
É necessário criar uma carga grande no aplicativo da Web para forçá-lo a fazer o escalonamento horizontal. Crie um arquivo de configuração que defina uma implantação de quatro contêineres que executem um loop infinito de consultas HTTP no servidor do aplicativo da Web de amostra.
Crie a carga no aplicativo da Web implantando o aplicativo loadgen com o arquivo loadgen.yaml que você recebeu.
Para implantar o contêiner, execute o seguinte comando:
kubectl apply -f loadgen.yaml
Após a implantação do manifesto, o pod Web começará a ser escalonado.
Clique em Verificar meu progresso para conferir o objetivo.
Como implantar o aplicativo loadgen
Consulte na lista de implantações se o gerador de carga está em execução:
kubectl get deployment
A saída será semelhante ao exemplo.
Saída:
NAME READY UP-TO-DATE AVAILABLE AGE
loadgen 4/4 4 4 26s
web 1/1 1 1 14m
Inspecione HorizontalPodAutoscaler:
kubectl get hpa
Quando o pod loadgen começar a gerar tráfego, o uso de CPU da implantação Web começará a aumentar. No exemplo de saída, as metas estão agora com 35% de utilização da CPU em comparação com o limite de 1% da CPU.
Saída:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web Deployment/web 35%/1% 1 4 1 8m
Após alguns minutos, inspecione HorizontalPodAutoscaler novamente:
kubectl get hpa
O escalonador automático aumentou a implantação Web para quatro réplicas.
Saída:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
web Deployment/web 88%/1% 1 4 4 9m
Para interromper a carga no aplicativo da Web, escalone a implantação do loadgen para zero réplicas:
kubectl scale deployment loadgen --replicas 0
Consulte na lista de implantações se o loadgen foi reduzido:
kubectl get deployment
A implantação do loadgen precisa ter zero réplicas.
Saída:
NAME READY UP-TO-DATE AVAILABLE AGE
loadgen 0/0 0 0 3m40s
web 2/4 4 2 18m
Observação: aguarde de dois a três minutos para listar as implantações novamente.
Consulte na lista de implantações se o aplicativo da Web foi reduzido para a configuração de valor mínimo de uma réplica que você criou quando implantou o escalonador automático:
kubectl get deployment
Agora você terá uma implantação do aplicativo da Web.
Saída:
NAME READY UP-TO-DATE AVAILABLE AGE
loadgen 0/0 0 0 12m
web 1/1 1 1 14m
Tarefa 3: gerencie os pools de nós
Nesta tarefa, você criará um novo pool de nós usando instâncias preemptivas. Em seguida, restringirá a implantação Web para executar somente nos nós preemptivos.
Adicione um pool de nós
Para implantar um novo pool de nós com três instâncias de VM preemptiva, execute o seguinte comando:
Caso receba uma mensagem de erro informando que não há instâncias preemptivas disponíveis, remova a opção -preemptible para continuar com o laboratório.
Consulte na lista se os novos nós estão prontos:
kubectl get nodes
Agora você terá 4 nós.
Os nomes serão diferentes do exemplo de saída.
Saída:
NAME STATUS ROLES AGE VERSION
gke-standard-cluster-1-default-pool...xc Ready 33m v1.19.10-gke.1600
gke-standard-cluster-1-default-pool...q8 Ready 33m v1.19.10-gke.1600
gke-standard-cluster-1-temp-pool-1-...vj Ready 32s v1.19.10-gke.1600
gke-standard-cluster-1-temp-pool-1-...xj Ready 37s v1.19.10-gke.1600
Todos os nós adicionados têm o rótulo temp=true porque você o definiu ao criar o pool de nós. Com o rótulo, é mais fácil localizar e configurar os nós.
Para listar somente os nós com o rótulo temp=true, execute o seguinte comando:
kubectl get nodes -l temp=true
Você verá somente os dois nós adicionados.
Os nomes serão diferentes do exemplo de saída.
Saída:
NAME STATUS ROLES AGE VERSION
gke-standard-cluster-1-temp-pool-1-...vj Ready 3m26s v1.19.10-gke.1600
gke-standard-cluster-1-temp-pool-1-...xj Ready 3m31s v1.19.10-gke.1600
Controle a programação com taints e tolerâncias
Para impedir o programador de executar um pod nos nós temporários, adicione um taint a cada um dos nós no pool temporário. Os taints são implementados como um par de chave-valor com um efeito, como NoExecute, que determina se é possível executar os pods em um nó específico. Somente os nós configurados para tolerar a chave-valor do taint são programados para serem executados nesses nós.
Para adicionar um taint a cada um dos nós recém-criados, execute o seguinte comando.
Use o rótulo temp=true para aplicar essa alteração a todos os novos nós simultaneamente:
...
spec:
tolerations:
- key: "nodetype"
operator: Equal
value: "preemptible"
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: web
ports:
- containerPort: 8080
protocol: TCP
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
Para forçar a implantação Web a usar o novo pool de nós, adicione uma chave nodeSelector à seção spec do modelo. Ela é paralela à chave de tolerância que você adicionou:
nodeSelector:
temp: "true"
Observação: o GKE adiciona um rótulo personalizado a cada nó chamado cloud.google.com/gke-nodepool que inclui o nome do pool a que o nó pertence. A chave também pode ser usada como parte de um nodeSelector para garantir que os pods sejam implantados somente nos nós adequados.
A implantação completa de web.yaml é semelhante ao seguinte:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
run: web
template:
metadata:
labels:
run: web
spec:
tolerations:
- key: "nodetype"
operator: Equal
value: "preemptible"
nodeSelector:
temp: "true"
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: web
ports:
- containerPort: 8080
protocol: TCP
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
Pressione CTRL+X e, depois, Y e Enter para salvar o arquivo e sair do editor nano.
Para aplicar a alteração, execute o seguinte comando:
kubectl apply -f web.yaml
Se houver problemas ao editar o arquivo, use o arquivo de amostra pré-preparado chamado web-tolerations.yaml.
Clique em Verificar meu progresso para conferir o objetivo.
Gerencie os pools de nós
Abra a lista de pods:
kubectl get pods
Talvez os nomes sejam diferentes do exemplo de saída.
Saída:
NAME READY STATUS RESTARTS AGE
web-7cb566bccd-pkfst 1/1 Running 0 1m
Para confirmar a mudança, inspecione o pod Web em execução usando o seguinte comando:
kubectl describe pods -l run=web
A seção Tolerância com nodetype=preemptible na lista aparecerá perto da parte de baixo da saída truncada.
Saída:
Node-Selectors: temp=true
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
nodetype=preemptible
Events:
A resposta confirma que os pods conseguem tolerar o valor do taint nos novos nós preemptivos. Assim, será possível programá-los para execução nesses nós.
Para forçar o aplicativo da Web a escalonar horizontalmente outra vez, escalone a implantação de loadgen para quatro réplicas:
kubectl scale deployment loadgen --replicas 4
Você tem a opção de escalonar só o aplicativo da Web diretamente; no entanto, ao usar o aplicativo loadgen, é possível ver como as diferentes configurações de taint, tolerância e nodeSelector que se aplicam aos aplicativos da Web e loadgen afetam os nós em que estão programadas.
Consulte a lista de pods que usam o formato de saída largo para mostrar os nós que executam os pods:
kubectl get pods -o wide
Esse comando mostra que o aplicativo loadgen é executado somente nos nós default-pool, enquanto o aplicativo da Web é executado somente nos nós preemptivos em temp-pool-1.
A configuração de taint impede a execução dos pods nos nós preemptivos. Assim, o aplicativo loadgen só será executado no pool padrão. A configuração de tolerância permite executar o aplicativo da Web nos nós preemptivos. O nodeSelector força os pods do aplicativo da Web a serem executados nesses nós.
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
1 estrela = muito insatisfeito
2 estrelas = insatisfeito
3 estrelas = neutro
4 estrelas = satisfeito
5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.
Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
No canto superior esquerdo da tela, clique em Começar o laboratório
Usar a navegação anônima
Copie o nome de usuário e a senha fornecidos para o laboratório
Clique em Abrir console no modo anônimo
Fazer login no console
Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
Aceite os termos e pule a página de recursos de recuperação
Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto
Este conteúdo não está disponível no momento
Você vai receber uma notificação por e-mail quando ele estiver disponível
Ótimo!
Vamos entrar em contato por e-mail se ele ficar disponível
Um laboratório por vez
Confirme para encerrar todos os laboratórios atuais e iniciar este
Use a navegação anônima para executar o laboratório
Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.
Architecting with Google Kubernetes Engine: como configurar o escalonamento automático de pods e pools de nós
Duração:
Configuração: 10 minutos
·
Tempo de acesso: 60 minutos
·
Tempo para conclusão: 60 minutos