En este instructivo, verás un caso de uso común del lanzamiento de una implementación de versiones canary con Cloud Service Mesh.
¿Qué es una implementación de versiones canary?
Una implementación de versiones canary enruta un pequeño porcentaje del tráfico a una nueva versión de un microservicio. Luego, te permite lanzar de forma gradual a toda la base de usuarios, a la vez que elimina y retira la versión anterior. Si algo sale mal durante este proceso, se puede volver a cambiar el tráfico a la versión anterior. Con Cloud Service Mesh, puedes enrutar el tráfico para asegurarte de que se ingresen los servicios nuevos de forma segura.
Implementa Online Boutique
- Configura el contexto actual de - kubectlen el clúster en el que implementaste Online Boutique:- gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
- Crea el espacio de nombres para la aplicación de muestra y la puerta de enlace de entrada: - kubectl create namespace onlineboutique
- Etiqueta el espacio de nombres - onlineboutiquepara insertar de forma automática los proxies de Envoy. Sigue los pasos sobre cómo habilitar la inserción automática de sidecar.
- Implementa la app de muestra. En este instructivo, implementarás Online Boutique, una app de demostración de microservicios. - kubectl apply \ -n onlineboutique \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/shared/online-boutique/kubernetes-manifests.yaml
- Para agregar una etiqueta - version=v1a la implementación- productcatalog, ejecuta el siguiente comando:- kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutique- Visualiza los servicios que implementaste: - kubectl get pods -n onlineboutique- Resultado esperado: - NAME READY STATUS RESTARTS AGE adservice-85598d856b-m84m6 2/2 Running 0 2m7s cartservice-c77f6b866-m67vd 2/2 Running 0 2m8s checkoutservice-654c47f4b6-hqtqr 2/2 Running 0 2m10s currencyservice-59bc889674-jhk8z 2/2 Running 0 2m8s emailservice-5b9fff7cb8-8nqwz 2/2 Running 0 2m10s frontend-77b88cc7cb-mr4rp 2/2 Running 0 2m9s loadgenerator-6958f5bc8b-55q7w 2/2 Running 0 2m8s paymentservice-68dd9755bb-2jmb7 2/2 Running 0 2m9s productcatalogservice-84f95c95ff-c5kl6 2/2 Running 0 114s recommendationservice-64dc9dfbc8-xfs2t 2/2 Running 0 2m9s redis-cart-5b569cd47-cc2qd 2/2 Running 0 2m7s shippingservice-5488d5b6cb-lfhtt 2/2 Running 0 2m7s- Todos los Pods de tu aplicación deben estar en funcionamiento, con un - 2/2en la columna- READY. Esto indica que los Pods tienen un proxy de sidecar de Envoy insertado de forma correcta.
- Implementa tu - VirtualServicey- DestinationRulepara la v1 de- productcatalog:- kubectl apply -f destination-vs-v1.yaml -n onlineboutique- Ten en cuenta que solo - v1está presente en los recursos.
- Visita la aplicación en tu navegador con la dirección IP externa de tu Ingress: - kubectl get services -n GATEWAY_NAMESPACE
En la siguiente sección, se explorará la IU de Cloud Service Mesh y se mostrará cómo puedes ver tus métricas.
Implementa y ve tus servicios en Google Cloud console
- En la Google Cloud consola, ve a la página Servicios de GKE Enterprise. 
- De forma predeterminada, los servicios se ven en la vista Tabla. - La descripción general de la tabla te permite observar todos tus servicios y las métricas importantes con facilidad.  
- En la esquina superior derecha, haz clic en Topología. Aquí puedes ver tus servicios y su interacción entre sí. - Puedes expandir los servicios y ver las solicitudes por segundo para cada uno de tus servicios si colocas el cursor sobre ellos con el cursor.  
- Regresa a la Vista de tabla. 
- En la Tabla de servicios, selecciona - productcatalogservice. Esto te llevará a una descripción general de tu servicio.
- En el lado izquierdo de la pantalla, haz clic en Tráfico. 
- Asegúrate de que el 100% del tráfico entrante a - productcatalogservicevaya al servicio de la carga de trabajo. 
En la siguiente sección, se creará una v2 del servicio productcatalog.
Implementa la v2 de un servicio
- En este instructivo, - productcatalogservice-v2agregará una latencia de 3 segundos a las solicitudes con el campo- EXTRA_LATENCY.- Aplica este recurso al espacio de nombres - onlineboutique.- kubectl apply -f productcatalog-v2.yaml -n onlineboutique
- Verifica los Pods de tu aplicación. - kubectl get pods -n onlineboutique- Resultado esperado: - NAME READY STATUS RESTARTS AGE adservice-85598d856b-8wqfd 2/2 Running 0 25h cartservice-c77f6b866-7jwcr 2/2 Running 0 25h checkoutservice-654c47f4b6-n8c6x 2/2 Running 0 25h currencyservice-59bc889674-l5xw2 2/2 Running 0 25h emailservice-5b9fff7cb8-jjr89 2/2 Running 0 25h frontend-77b88cc7cb-bwtk4 2/2 Running 0 25h loadgenerator-6958f5bc8b-lqmnw 2/2 Running 0 25h paymentservice-68dd9755bb-dckrj 2/2 Running 0 25h productcatalogservice-84f95c95ff-ddhjv 2/2 Running 0 25h productcatalogservice-v2-6df4cf5475-9lwjb 2/2 Running 0 8s recommendationservice-64dc9dfbc8-7s7cx 2/2 Running 0 25h redis-cart-5b569cd47-vw7lw 2/2 Running 0 25h shippingservice-5488d5b6cb-dj5gd 2/2 Running 0 25h- Ten en cuenta que ahora hay dos - productcatalogservicesenumerados.
- DestinationRulees la forma de especificar los subconjuntos de un servicio. En este caso, hay un subconjunto para la v1 y la v2 de- productcatalogservice.- Observa el campo - labels. Las versiones de- productcatalogservicese distinguen después de que- VirtualServiceenruta el tráfico.- Aplica - DestinationRule:- kubectl apply -f destination-v1-v2.yaml -n onlineboutique
Divide el tráfico entre v1 y v2
- Un - VirtualServicees la manera de ingresar un pequeño porcentaje del tráfico para dirigirlo a la v2 de- productcatalogservice.- El campo del subconjunto indica la versión, y el campo de peso indica la división porcentual del tráfico. El 75% del tráfico se dirigirá a v1 de productcatalog y el 25% a v2. - Aplica - VirtualService:- kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Si visitas la EXTERNAL_IP de la entrada del clúster, deberías notar que, periódicamente, el frontend es más lento para cargar.
En la siguiente sección, explorarás la división del tráfico en la consola de GKE Enterprise Google Cloud .
Observa la división del tráfico en la consola de Google Cloud
- Regresa a la Google Cloud consola y ve a la página de servicios de GKE Enterprise. Ir a Servicios de GKE Enterprise 
- En la esquina superior derecha, haz clic en Topología. - Expande la carga de trabajo - productcatalogservice. Verás las implementaciones- productcatalogservicey- productcatalogservice-v2. 
- Regresa a la Vista de tabla. Haz clic en - productcatalogserviceen la tabla de servicios. Regrese a Tráfico en la barra de navegación izquierda.
- Ten en cuenta que el tráfico entrante se divide entre v1 y v2 según el porcentaje especificado en el archivo - VirtualServicey que hay 2 cargas de trabajo del servicio productcatalog.- En el lado derecho de la pantalla, verás Solicitudes, Tasa de error y Métricas de latencia. Con Cloud Service Mesh, cada servicio tendrá estas métricas descritas para proporcionarte la observabilidad.  
Lanza o revierte a una versión
Después de observar las métricas durante una implementación de versiones canary, puedes lanzar al nuevo servicio o revertir al servicio anterior aprovechando el recurso VirtualService.
Lanzamiento
Una vez que estés satisfecho con el comportamiento de un servicio v2, aumenta de forma gradual el comportamiento del tráfico al servicio v2. Finalmente, el 100% del tráfico se puede dirigir al servicio nuevo.
Para dirigir todo el tráfico a la v2 de productcatalogservice, haz lo siguiente:
kubectl apply -f vs-v2.yaml -n onlineboutique
Revertir
Si necesitas revertir al servicio v1, solo aplica el destination-vs-v1.yaml anterior. Esto dirigirá el tráfico solo a la v1 de productcatalogservice.
Para dirigir todo el tráfico a la v1 de productcatalogservice, haz lo siguiente:
kubectl apply -f vs-v1.yaml -n onlineboutique