金丝雀测试

获取 Loadbalancer URL:

export LB_NAME=$(kubectl get svc ingress-gw -n prodcatalog-ns -o jsonpath="{.status.loadBalancer.ingress[*].hostname}") 
echo $LB_NAME

现在,回到您的浏览器,您应该会看到下面的界面,显示正在使用 Catalog Detail proddetail-v1 版本。

frontend 现在点击 Canary Deployment 按钮几次,因为我们将路由权重设置为 10% 到 proddetail V2 和 90% 到 proddetail V1, 点击几下后,应该可以看到来自 proddetail-v2 V2 的信息, 在 proddetail V2 的详细信息中可以看到 XYZ.com 供应商。

image-20210714230443920 一旦我们对新服务版本 2 充满信心,并且没有发现错误或延迟问题,那么我们就可以决定将更多流量逐渐转移到版本 V2。 在下面的示例中,我们将 VirualRouter 中的两个 proddetail 服务版本的流量权重都设置为 50%:

canary

---
apiVersion: appmesh.k8s.aws/v1beta2
kind: VirtualRouter
metadata:
  name: proddetail-router
  namespace: prodcatalog-ns
spec:
.....
  routes:
    - name: proddetail-route
      httpRoute:
        match:
          prefix: /
        action:
          weightedTargets:
            - virtualNodeRef:
                name: proddetail-v1
              weight: 50
            - virtualNodeRef:
                name: proddetail-v2
              weight: 50
---

如果出现任何问题,您可以通过将 VirtualRouter 中的权重更改为 100% 来方便地回滚到已知良好的 v1 版本的服务。一旦您确认新版本一切正常,您就可以将所有流量转向新版本,并弃用 v1。

恭喜您成功发新版本!