Atualize o Cardápio Sazonal

KubernetesBeginner
Pratique Agora

Introdução

O Juniper Café está pronto para seu cardápio de outono. O site funciona, mas ainda mostra a seleção habitual. Você publicará o novo cardápio pelo Kubernetes, manterá a configuração anterior disponível e baixará o cardápio real para a equipe do balcão.

Você já deve reconhecer Pods, Deployments, Services, labels e YAML simples. O cluster, a imagem da aplicação e o site estão preparados; não é necessário programar a aplicação nem ter uma conta de nuvem. Este laboratório apresenta a pequena parte do Kustomize necessária para dar a cada configuração um nome baseado em seu conteúdo.

Use Workspace para os comandos, Café Menu para o Juniper e Reference Menu para o café separado da sala de leitura. Todas as entradas compartilham uma única VM de treinamento. Mantenha inalterados o café de referência, o código da aplicação, o Service, o número de réplicas e o histórico de versões fornecido. Os 40 minutos estimados pelo autor incluem a leitura e os erros comuns.

Prepare uma Versão Separada do Cardápio

Nesta etapa, relacione o site atual à sua configuração e prepare um diretório de versão sem alterar o cardápio em execução.

Abra Café Menu, selecione Explore the menu e encontre Maple Latte. Atualmente, ele custa $4.20 e está Not available today. Cold Brew está disponível. Abra About this drink para Oat Latte e depois use Back to the menu. Essas são páginas reais servidas pela aplicação preparada.

Mude para Reference Menu e selecione Our menu. Este é o Willow Reading Room, um serviço separado que deve continuar funcionando. Mude para Workspace. Seu diretório inicial é /home/labex/project/cafe-menu; confirme-o com pwd, que exibe o diretório atual:

pwd

Resultado esperado:

/home/labex/project/cafe-menu

Um ConfigMap do Kubernetes armazena a configuração separadamente da imagem de uma aplicação. Um Pod faz referência a esse ConfigMap pelo nome. O processo deste café lê o arquivo de cardápio montado uma única vez, ao iniciar. Editar a configuração não faz esse processo já existente recarregar o cardápio automaticamente.

O diretório starter preparado contém três arquivos pequenos. ls os lista:

ls starter
deployment.json  kustomization.yaml  menu.json

JSON também é uma entrada válida para manifestos do Kubernetes; deployment.json é a definição preparada do Deployment. Você manterá as configurações da aplicação e alterará os dados separados do cardápio.

Crie seu próprio diretório com cp -r: cp copia, e -r inclui o conteúdo de um diretório. O destino release ainda não existe:

cp -r starter release

Se executar isso duas vezes por engano, cp poderá criar um release/starter aninhado. Os três arquivos necessários ainda devem ficar diretamente em release; remova somente essa cópia aninhada acidental com rm -r release/starter. Não remova release, versions nem approved.

Leia a configuração com cat, que exibe um arquivo:

cat release/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: cafe-menu
resources:
  - deployment.json
configMapGenerator:
  - name: cafe-menu
    files:
      - menu.json

resources inclui o Deployment. configMapGenerator transforma menu.json em dados de ConfigMap. O Kustomize acrescenta um sufixo derivado do conteúdo e atualiza a referência do Deployment para esse nome gerado. Assim, dados alterados podem produzir um novo modelo de Pod e um novo rollout, enquanto o ConfigMap anterior continua disponível. O sufixo identifica o conteúdo; ele não informa se os preços estão corretos.

Escreva o Cardápio de Outono Aprovado

Nesta etapa, prepare o cardápio de outono completo antes de aplicar qualquer alteração ao Kubernetes.

Permaneça em Workspace. A aprovação da equipe do balcão está armazenada em approved/menu.csv. CSV significa valores separados por vírgulas: a primeira linha nomeia as colunas, e cada linha seguinte descreve uma bebida. price_cents é um número inteiro de centavos, portanto 450 significa $4.50. true e false indicam se a bebida está disponível.

cat approved/menu.csv
id,name,price_cents,available
espresso,Espresso,250,true
oat-latte,Oat Latte,350,true
cold-brew,Cold Brew,390,false
maple-latte,Maple Latte,450,true

Mantenha Espresso e Oat Latte inalterados. Cold Brew sai da seleção de hoje, e Maple Latte passa a estar disponível por $4.50. O rótulo da estação deve ser Autumn at Juniper; o nome do café, a localização, os horários, as identidades dos itens e as descrições permanecem inalterados.

Escreva o JSON completo abaixo. JSON usa nomes de propriedades entre aspas, vírgulas entre as entradas e valores booleanos em minúsculas, sem aspas. A expressão de shell cat > release/menu.json <<'EOF' grava o texto delimitado nesse arquivo. > substitui o conteúdo anterior; o EOF entre aspas mantém o texto literal. Cole até a linha final EOF, que deve ficar sozinha:

cat > release/menu.json <<'EOF'
{
  "name": "Juniper Café",
  "season": "Autumn at Juniper",
  "hours": "Mon–Sat · 08:00–17:00",
  "address": "14 Willow Lane",
  "items": [
    {"id": "espresso", "name": "Espresso", "price_cents": 250, "available": true, "description": "A small, rich cup with a golden crema."},
    {"id": "oat-latte", "name": "Oat Latte", "price_cents": 350, "available": true, "description": "Our espresso with smooth oat milk."},
    {"id": "cold-brew", "name": "Cold Brew", "price_cents": 390, "available": false, "description": "Slow-steeped coffee, served over ice."},
    {"id": "maple-latte", "name": "Maple Latte", "price_cents": 450, "available": true, "description": "Espresso, oat milk, and a little maple sweetness."}
  ]
}
EOF

Valide o JSON antes de usá-lo. python3 -m json.tool lê JSON e exibe uma versão indentada; ele não altera o arquivo:

python3 -m json.tool release/menu.json

Uma saída bem-sucedida contém as quatro bebidas. A ferramenta pode exibir \u00e9 no lugar de é; isso é uma sequência de escape JSON, não uma alteração no nome do café. Uma vírgula ou aspa ausente produz um erro de análise com linha e coluna. Para corrigir, escreva novamente o bloco completo acima e repita esta validação. Um caminho errado produz um erro de arquivo não encontrado; execute pwd e retorne com cd /home/labex/project/cafe-menu antes de tentar novamente.

O site ainda mostra o cardápio habitual porque você alterou apenas o código-fonte da sua versão. Isso é esperado.

Publique uma Nova Versão da Configuração

Nesta etapa, renderize a versão, aplique-a e espere que ambas as réplicas do café usem a nova configuração.

Permaneça em Workspace. kubectl kustomize renderiza um diretório sem aplicá-lo. Inspecione o nome do ConfigMap gerado e a referência correspondente do Deployment:

kubectl kustomize release

A saída inclui um nome no formato cafe-menu-... e o mesmo nome na entrada de volumes do Deployment chamada menu. O sufixo exato depende dos dados. Este é um objeto de configuração diferente daquele do cardápio habitual.

Aplique o diretório com kubectl apply -k. A opção -k pede ao kubectl que renderize um diretório Kustomize, em vez de ler um único manifesto com -f:

kubectl apply -k release

A saída esperada inclui:

configmap/cafe-menu-... created
deployment.apps/cafe configured

A criação de um ConfigMap, por si só, não comprova que a aplicação em execução mudou. rollout status espera que o controlador do Deployment substitua os Pods. -n cafe-menu seleciona o namespace desta lição; --timeout=120s limita a espera:

kubectl rollout status deployment/cafe -n cafe-menu --timeout=120s
deployment "cafe" successfully rolled out

Se o tempo de espera se esgotar, mantenha o cenário existente e inspecione-o com os comandos a seguir. Um erro de imagem ou contêiner aparece no estado e nos eventos dos Pods; não execute a preparação novamente nem exclua o namespace:

kubectl get pods -n cafe-menu
kubectl describe deployment cafe -n cafe-menu

Após um rollout normal, inspecione o Deployment atual e seus ReplicaSets. Um ReplicaSet mantém um modelo específico de Pod; o Deployment conserva ReplicaSets anteriores como histórico de rollout:

kubectl get replicasets -n cafe-menu -l app=cafe

Inspecione o próprio Deployment pelo nome:

kubectl get deployment cafe -n cafe-menu

Ele deve mostrar 2/2 réplicas prontas. Vários objetos de configuração continuam presentes; aplicar uma nova versão não sobrescreveu o cardápio anterior. Liste-os:

kubectl get configmaps -n cafe-menu

Não exclua essas configurações anteriores. Um ReplicaSet anterior precisa do nome exato da configuração à qual faz referência caso essa versão seja restaurada mais tarde.

Verifique o Site e Entregue seu Cardápio

Nesta etapa, verifique a experiência real do cliente e salve o cardápio que a equipe do balcão usará.

Mude para Café Menu, selecione Our menu e atualize a página se ela já estiver aberta. Maple Latte deve estar Available today por $4.50. Cold Brew deve estar Not available today. Abra a página de detalhes de Maple Latte, volte com Back to the menu e depois use Visit us para confirmar que a localização e os horários continuam funcionando.

O cardápio de outono aprovado

Observe os indicadores de disponibilidade e os preços: Cold Brew está indisponível, e Maple Latte está disponível por $4.50.

Use Download menu para baixar o CSV completo real. Abra-o e compare as quatro bebidas com a tabela aprovada da Etapa 2. O download inclui bebidas indisponíveis com false, para que a equipe possa distingui-las de itens ausentes por engano.

Mude para Reference Menu e confirme que o cardápio habitual do Willow Reading Room continua funcionando. Depois retorne a Workspace.

Você também pode salvar o download real do Juniper em seu espaço de trabalho. curl faz uma requisição à entrada local do navegador, que a encaminha ao Service real do Kubernetes. --fail informa erros HTTP; --silent oculta o medidor de progresso; --show-error mantém as mensagens de erro visíveis; -o escolhe o nome do arquivo de saída:

curl --fail --silent --show-error http://127.0.0.1:8081/menu.csv -o menu-handover.csv

Compare o arquivo recebido com a aprovação usando diff -u. A opção -u mostra as linhas próximas se houver alguma diferença:

diff -u approved/menu.csv menu-handover.csv

Nenhuma saída significa que os arquivos são iguais. Uma diferença é uma evidência útil: volte ao código-fonte do cardápio e ao rollout em execução, corrija a causa, repita o download e compare novamente. Não edite o CSV recebido para ocultar um site incorreto.

Agora você tem um cardápio utilizável, seu download real para a equipe e um diretório de versão que reproduz a configuração em execução. Mantenha versions e os ConfigMaps anteriores intactos como materiais de recuperação neste cenário. A próxima lição prepara seu próprio ambiente independente.

Resumo

Você preparou uma versão completa do cardápio, gerou um ConfigMap com nome baseado no conteúdo e acompanhou o rollout do Deployment até as duas réplicas da aplicação. Verificou páginas e downloads reais, preservou o café de referência e as configurações anteriores e entregou o CSV real para a equipe do balcão.

O próximo laboratório começa em um ambiente separado. Ele reutiliza essas ideias para restaurar um cardápio cuja aplicação está saudável, mas cujos preços estão errados.