Actualiza el menú de temporada

KubernetesBeginner
Practicar Ahora

Introducción

Juniper Café está listo para su menú de otoño. El sitio web funciona, pero todavía muestra la selección habitual. Publicarás el nuevo menú mediante Kubernetes, conservarás la configuración anterior y descargarás el menú real para el equipo del mostrador.

Debes conocer ya los Pods, Deployments, Services, las etiquetas y el formato YAML básico. El clúster, la imagen de la aplicación y el sitio web están preparados; no necesitas programar la aplicación ni tener una cuenta en la nube. Este laboratorio presenta la pequeña parte de Kustomize necesaria para dar a cada configuración un nombre basado en su contenido.

Usa Workspace para los comandos, Café Menu para Juniper y Reference Menu para la cafetería independiente de la sala de lectura. Todas las entradas comparten una VM de formación. Mantén sin cambios la cafetería de referencia, el código de la aplicación, el Service, el número de réplicas y el historial de versiones proporcionado. Los 40 minutos estimados por el autor incluyen la lectura y los errores habituales.

Prepara una versión independiente del menú

En este paso, relacionarás el sitio web actual con su configuración y prepararás un directorio de publicación sin cambiar el menú en servicio.

Abre Café Menu, selecciona Explore the menu y busca Maple Latte. Actualmente cuesta $4.20 y muestra Not available today. Cold Brew está disponible. Abre About this drink para Oat Latte y luego usa Back to the menu. Son páginas reales servidas por la aplicación preparada.

Cambia a Reference Menu y selecciona Our menu. Es Willow Reading Room, un servicio independiente que debe seguir funcionando. Cambia a Workspace. Su directorio inicial es /home/labex/project/cafe-menu; confírmalo con pwd, que muestra el directorio actual:

pwd

Resultado esperado:

/home/labex/project/cafe-menu

Un ConfigMap de Kubernetes almacena la configuración por separado de la imagen de una aplicación. Un Pod hace referencia a ese ConfigMap por su nombre. El proceso de esta cafetería lee el archivo de menú montado una sola vez al iniciarse. Editar la configuración no hace que ese proceso existente vuelva a cargar su menú automáticamente.

El directorio starter preparado contiene tres archivos pequeños. ls los enumera:

ls starter
deployment.json  kustomization.yaml  menu.json

JSON también es una entrada válida para los manifiestos de Kubernetes; deployment.json es la definición del Deployment preparada. Conservarás sus ajustes de aplicación y cambiarás los datos del menú, que están separados.

Crea tu propio directorio con cp -r: cp copia y -r incluye el contenido de un directorio. El destino release aún no existe:

cp -r starter release

Si lo ejecutas dos veces por accidente, cp puede crear un release/starter anidado. Los tres archivos necesarios deben seguir estando directamente en release; elimina solo esa copia anidada accidental con rm -r release/starter. No elimines release, versions ni approved.

Lee la configuración con cat, que muestra un archivo:

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 incluye el Deployment. configMapGenerator convierte menu.json en datos de un ConfigMap. Kustomize añade un sufijo derivado del contenido y actualiza la referencia del Deployment para usar ese nombre generado. Por tanto, cambiar los datos puede producir una nueva plantilla de Pod y un nuevo despliegue, mientras el ConfigMap anterior sigue disponible. El sufijo identifica el contenido; no indica si los precios son correctos.

Escribe el menú de otoño aprobado

En este paso, prepararás el menú de otoño completo antes de aplicar cambios a Kubernetes.

Permanece en Workspace. La aprobación del equipo del mostrador está guardada como approved/menu.csv. CSV significa valores separados por comas: la primera línea nombra las columnas y cada línea siguiente describe una bebida. price_cents es un número entero de céntimos, de modo que 450 significa $4.50. true y false indican si la bebida está disponible.

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

Mantén Espresso y Oat Latte sin cambios. Cold Brew deja de estar en la selección de hoy y Maple Latte pasa a estar disponible a $4.50. La etiqueta de temporada debe ser Autumn at Juniper; el nombre de la cafetería, la ubicación, el horario, las identidades de los artículos y las descripciones permanecen sin cambios.

Escribe el JSON completo que aparece a continuación. JSON usa nombres de propiedad entre comillas, comas entre entradas y valores booleanos en minúsculas sin comillas. La expresión de shell cat > release/menu.json <<'EOF' escribe el texto delimitado en ese archivo. > sustituye su contenido anterior; el EOF entre comillas conserva el texto literalmente. Pega hasta la línea final EOF, que debe ocupar una línea por sí sola:

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

Valida el JSON antes de usarlo. python3 -m json.tool lee JSON y muestra una versión con sangría; no cambia el archivo:

python3 -m json.tool release/menu.json

Una salida correcta contiene las cuatro bebidas. La herramienta puede mostrar \u00e9 en lugar de é; es el escape de JSON, no un cambio en el nombre de la cafetería. Si falta una coma o una comilla, se produce un error de análisis con una línea y una columna. Para recuperarte, vuelve a escribir el bloque completo anterior y repite esta validación. Una ruta incorrecta produce un error de archivo no encontrado; ejecuta pwd y vuelve con cd /home/labex/project/cafe-menu antes de reintentarlo.

El sitio web todavía muestra el menú habitual porque solo has cambiado la fuente de tu versión. Es lo esperado.

Publica una nueva versión de la configuración

En este paso, generarás los manifiestos de la versión, la aplicarás y esperarás a que ambas réplicas de la cafetería usen la nueva configuración.

Permanece en Workspace. kubectl kustomize genera los manifiestos de un directorio sin aplicarlos. Inspecciona el nombre del ConfigMap generado y la referencia coincidente del Deployment:

kubectl kustomize release

La salida incluye un nombre con la forma cafe-menu-... y el mismo nombre bajo la entrada volumes del Deployment llamada menu. El sufijo exacto depende de los datos. Es un objeto de configuración diferente del menú habitual.

Aplica el directorio con kubectl apply -k. La opción -k indica a kubectl que genere los manifiestos de un directorio de Kustomize, en lugar de leer un único manifiesto con -f:

kubectl apply -k release

La salida esperada incluye:

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

La creación de un ConfigMap por sí sola no demuestra que la aplicación en ejecución haya cambiado. rollout status espera a que el controlador del Deployment sustituya los Pods. -n cafe-menu selecciona el espacio de nombres de esta lección; --timeout=120s limita la espera:

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

Si se agota el tiempo de espera, conserva el entorno existente e inspecciónalo con los siguientes comandos. Un error de imagen o contenedor aparece en el estado y los eventos del Pod; no vuelvas a ejecutar la preparación ni elimines el espacio de nombres:

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

Tras un despliegue normal, inspecciona el Deployment actual y sus ReplicaSets. Un ReplicaSet mantiene una plantilla de Pod concreta; el Deployment conserva los ReplicaSets anteriores como historial de despliegues:

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

Inspecciona el propio Deployment por su nombre:

kubectl get deployment cafe -n cafe-menu

Debe mostrar 2/2 réplicas listas. Siguen existiendo varios objetos de configuración; aplicar una nueva versión no sobrescribió el menú anterior. Enuméralos:

kubectl get configmaps -n cafe-menu

No elimines esas configuraciones antiguas. Un ReplicaSet anterior necesita el nombre exacto de la configuración a la que hace referencia si se restaura esa versión más adelante.

Comprueba el sitio web y entrega su menú

En este paso, verificarás la experiencia real del cliente y guardarás el menú que usará el equipo del mostrador.

Cambia a Café Menu, selecciona Our menu y actualiza la página si ya está abierta. Maple Latte debe mostrar Available today a $4.50. Cold Brew debe mostrar Not available today. Abre la página de detalles de Maple Latte, vuelve con Back to the menu y usa Visit us para confirmar que la ubicación y el horario siguen funcionando.

El menú de otoño aprobado

Observa los indicadores de disponibilidad y los precios: Cold Brew no está disponible y Maple Latte está disponible a $4.50.

Usa Download menu para descargar el CSV completo real. Ábrelo y compara las cuatro bebidas con la tabla aprobada del paso 2. La descarga incluye las bebidas no disponibles con false, para que el personal pueda distinguirlas de los artículos que faltan por accidente.

Cambia a Reference Menu y confirma que el menú habitual de Willow Reading Room sigue funcionando. Después vuelve a Workspace.

También puedes guardar la descarga real de Juniper en tu espacio de trabajo. curl solicita la entrada local del navegador, que reenvía la solicitud al Service real de Kubernetes. --fail informa de errores HTTP; --silent oculta el indicador de progreso; --show-error mantiene visibles los mensajes de error; -o elige el nombre del archivo de salida:

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

Compara el archivo recibido con la aprobación mediante diff -u. La opción -u muestra las líneas cercanas si hay alguna diferencia:

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

Si no hay salida, los archivos coinciden. Una diferencia es una evidencia útil: vuelve a la fuente del menú y al despliegue en servicio, corrige la causa, repite la descarga y compara otra vez. No edites el CSV recibido para ocultar un sitio web incorrecto.

Ahora tienes un menú utilizable, su descarga real para el personal y un directorio de versión que reproduce la configuración en ejecución. Conserva versions y los ConfigMaps anteriores intactos como materiales de recuperación en este entorno. La siguiente lección prepara su propio entorno independiente.

Resumen

Preparaste una versión completa del menú, generaste un ConfigMap con un nombre basado en el contenido y seguiste el despliegue del Deployment hasta sus dos réplicas de la aplicación. Comprobaste las páginas y descargas reales, conservaste la cafetería de referencia y las configuraciones anteriores, y entregaste el CSV real para el personal.

El siguiente laboratorio comienza en un entorno independiente. Reutiliza estas ideas para restaurar un menú cuya aplicación funciona correctamente, pero cuyos precios son incorrectos.