OpenKruise这个和文档不一致,怎么操作呢?

OpenKruise参考 https://openkruise.io/rollouts/best-practices/traffic-routing-istio-api 基于自己的demo deploy测试金丝雀发布,发现创建出了canary svc,但没有canary deploy,这个和文档不一致,怎么操作呢?

展开
收起
嘟嘟嘟嘟嘟嘟 2024-01-04 07:58:12 66 分享 版权
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    如果创建出了canary svc但没有canary deploy,可以尝试以下操作:

    1. 确保你的Deployment中包含了相应的Canary标签,例如app: my-apprelease: canary。这些标签将用于标识哪些实例属于Canary发布。

    2. 检查你的Deployment的spec字段中是否包含了相应的Canary控制器的配置。例如:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      replicas: 3
      strategy:
        rollingUpdate:
          maxUnavailable: 0
        Type: RollingUpdate
      template:
        metadata:
          labels:
            app: my-app
            release: canary
        spec:
          containers:
            - name: my-app-container
              image: my-app-image:latest
              ports:
                - containerPort: 8080
    

    在这个例子中,我们使用了strategy字段来指定滚动更新的策略,并设置了TypeRollingUpdate。这样,当进行金丝雀发布时,OpenKruise会自动创建一个对应的Canary Deployment来处理金丝雀版本的实例。

    1. 如果以上步骤都正确配置了,但仍然没有创建出Canary Deployment,可以尝试手动创建一个Canary Deployment来触发金丝雀发布。例如:
    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app-canary
    spec:
      replicas: 1
      strategy:
        rollingUpdate:
          maxUnavailable: 0
        Type: RollingUpdate
      template:
        metadata:
          labels:
            app: my-app
            release: canary
        spec:
          containers:
            - name: my-app-container
              image: my-app-image:canary # 使用金丝雀版本的镜像进行部署
              ports:
                - containerPort: 8080
    EOF
    

    这个命令会创建一个名为my-app-canary的Deployment,其中包含了一个金丝雀版本的容器。通过手动创建Canary Deployment,可以触发金丝雀发布的流程,并确保后续的发布流程能够正常进行。

    2024-01-05 17:04:35
    赞同 展开评论
  • 不一定,一定要 canary deployment 本来也是两个方案。
    029250643fc03c9ae2515c39c9b045c4.png

    此回答整理自钉群“OpenKruise 社区交流群”

    2024-01-04 18:08:50
    赞同 展开评论
  • 根据提供的文档,在创建金丝雀发布时,需要先创建一个名为"workload-demo"的deployment和一个名为"service-demo"的服务。然后,再创建一个名为"rollouts-demo"的rollout,其中指定了"workloadRef"为"workload-demo"。

    在创建金丝雀发布后,需要更新"workload-demo"部署的"version"环境变量为"canary",以启动发布过程。

    在发布过程中,Kruise Rollout会创建一个新的带有"version: canary"环境的deployment,并创建一个名为"service-demo-canary"的新服务来路由流量到新版本pod。同时,还会更新VirtualService "vs-demo"以进行流量路由。

    因此,如果创建金丝雀发布时没有看到canary deploy,可能是因为没有正确地更新"workload-demo"部署的"version"环境变量。请确保已经执行了以下命令来更新环境变量:

    $ kubectl patch deployment workload-demo -p '{ "spec":{ "template":{ "spec":{ "containers":[{ "name":"nginx", "env":[{ "name":"version", "value":"canary" }]}]}}}}'
    

    如果已经执行了上述命令,但仍然没有看到canary deploy,可以尝试检查Kruise Rollout的状态,以确保发布过程正常进行。可以使用以下命令查看Rollout的状态:

    $ kubectl get rollout -n default
    

    如果Rollout的状态不是"Running",可能需要检查是否有任何错误导致发布过程失败。

    2024-01-04 09:16:52
    赞同 展开评论