问题标签 [canary-deployment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
145 浏览

node.js - 从无服务器 Canary 部署插件调用 Lambda 函数

我使用无服务器框架使用 AWS Lambda 和 Node.js 开发应用程序。我想使用serverless-plugin-canary-deployments来运行 Lambda 函数的流量前测试。

如何从流量前挂钩调用新的 Lambda 函数?

我不想简单地从 pre-traffic 挂钩中调用 Lambda 函数的处理程序;

我希望通过测试来证明 Lambda Function 函数的权限是足够的。因此,我想实际调用 Lambda 函数,而不是简单地从 pre-traffic 挂钩中调用其处理程序。

0 投票
1 回答
1092 浏览

kubernetes - 无法使用带有金丝雀注释和 100% 权重的 nginx 入口规则将流量路由到金丝雀版本

  • 我的应用程序在版本 X 的命名空间 A 中运行,我可以通过在同一命名空间 A 中运行的 nginx 入口控制器访问应用程序端点。
  • 我在命名空间 B 中使用版本 Y 启动相同的应用程序堆栈,并创建指向与在命名空间 A 中运行的控制器相同的 kubernetes.io/ingress.class 的入口规则。
  • 另外,我启用了权重为 50% 的金丝雀注释。当我尝试通过入口访问应用程序端点时,请求将根据指定的权重分布在命名空间 A 中运行的版本 X 和命名空间 B 中运行的版本 Y
  • 现在,我将金丝雀权重更改为 100,并看到所有流量都流向命名空间 B 中的版本 Y。
  • 以上都符合我的预期
  • 但是,现在我从命名空间 A 中删除了应用程序 pod,但保持不变

    • a) 在命名空间 A 中运行的服务(为其定义了入口规则)
    • b) 在命名空间 A 中运行的 Nginx 控制器中的入口规则
    • c) 命名空间 B 的所有 pod 都使用各自的服务和 100% 的入口规则运行
  • 当我现在尝试访问应用程序端点时,它只是失败了。我知道命名空间 A 中没有活动端点(因为 pod 已被删除)但 svc 在命名空间 A 中仍然可用,并且 B 中的入口规则启用了权重 100% 的金丝雀,我期望流量将被路由到命名空间中的 pod B ,但这并没有发生。

我比较了在命名空间 A 中删除 pod 前后 nginx 控制器的配置(100% 金丝雀入口规则完好无损),使用

kubectl exec <nginx-controller-pod-name> -n <namespace> -- curl localhost:10246/configuration/backends

kubectl exec <nginx-controller-pod-name> -n <namespace> -- cat nginx.conf

删除命名空间 A 中的 pod 前后的 o/p 没有区别

笔记:

  • Nginx入口镜像:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.2
  • Kubernetes 版本:1.12.7

这是预期的行为吗?我无法找到导致这种行为的原因。

0 投票
0 回答
63 浏览

kong - config.duration 未在 KONG 的 Canary 发布插件中应用

我正在尝试在 Kong 中配置 Canary 发布插件。

该插件在config.start参数中提供的纪元时间被激活。但是以秒为单位提供的config.duration不起作用,并且请求继续被路由到上游服务。

示例配置:: { "steps": null, "upstream_port": , "upstream_uri": "/test-uri", "upstream_fallback": false, "start": 1582109400, "groups": null, "percentage": null ,“持续时间”:60,“哈希”:“无”,“upstream_host”:“”}

我已经在服务上配置了这个插件。跑岗 V1.3

任何指针都会有所帮助。

0 投票
1 回答
1415 浏览

apache-kafka - 如何运行 Kafka Canary 消费者

我们有一个 Kafka 队列,有两个消费者,都从同一个分区读取(扇出场景)。其中一个消费者应该是金丝雀并处理 1% 的消息,而另一个处理剩下的 99% 的消息。

这个想法是基于消息的属性做出决定,例如消息 ID 或时间戳(例如 mod 100),并基于此接受或丢弃,只是针对金丝雀和非金丝雀的相反逻辑。

现在我们面临如何稳健地做到这一点的问题,例如在运行时重新配置百分比并避免丢失消息或处理它们两次。看起来这升级为分布式共识问题以保持决策逻辑同步,我们非常希望避免这种情况,即使我们可以只使用 ZooKeeper。

这是一个可行的策略,还是有更好的方法来做到这一点?可能是一种避免达成共识的方法?

更新:不幸的是,Kafka 集群不在我们的控制之下,我们无法进行任何更改。

更新 2消息延迟不是一个大问题,添加几百个 100 毫秒是可以的,不会被注意到。

0 投票
0 回答
55 浏览

google-cloud-platform - 除了 Prometheus,还有哪些 Metrics Providers 可以与 ArgoCD 一起使用?

我正在尝试使用 AnalysisTemplate 进行 Canary 推广,并且好奇我可以使用 Stackdriver、Istio 或 Anthos 作为指标提供者吗?

官方文档中只提到了 Prometheus。

0 投票
1 回答
143 浏览

spinnaker - 如何将 kayenta-canary 部署配置到多个 k8s 集群

环境细节:

  1. 几个k8s集群:通过二进制包部署,
  2. 云提供商:kubernetes 提供商 v2 ?
  3. kayenta pod:正在运行

错误详情:

  • 无法保存金丝雀配置:错误 400 发布http://gate/v2/canaryConfig
  • 只有 gce 和 aws 资源类型可用,但我没有它们的任何云提供商

在此处输入图像描述

这是我的金丝雀配置:

Canary 阶段失败详情:https ://github.com/spinnaker/spinnaker/issues/5639

0 投票
1 回答
798 浏览

azure-devops - 通过管道部署 Azure App Service Canary

我们使用 Azure Devops 流程对暂存槽进行部署,然后在暂存和生产之间进行直接交换。

我们注意到,通过门户界面,我们可以将一定比例的流量引导到暂存,有没有一种方法可以通过 Azure Devops/CD 流程来做到这一点,以便我们将一定比例的流量引导到特定的插槽,然后逐渐增加,本质上是一个使用 Azure Web App Slots 通过管道的金丝雀部署方法?

先感谢您。

0 投票
2 回答
248 浏览

nginx - 使用 Nginx 的 Canary 部署 - 流量未路由到 Canary 服务器

我们将服务部署在 4 个应用服务器中。我们有 2 个 Nginx 用于负载平衡。我们正在使用 1 个 Consul 服务器进行服务发现。我们将其中一个应用服务器用作 Canary 服务器,以使用该split_clients指令测试 Canary 部署。使用 Nginx 模板文件,我们控制到 Canary VS 非 Canary 服务器的流量。

我已经使用本地主机上的 curl 在所有 4 台服务器上单独测试了该服务。然后我在一台 Nginx 服务器上测试了 curl 命令。我收到了响应,但它仅从非金丝雀应用服务器返回。没有流量路由到 Canary 服务器。

nginx.conf 文件填充如下:

这里有什么问题?我错过了什么?

0 投票
1 回答
71 浏览

spinnaker - Spinnaker 自动 Canary 分析结果为 0 或 100,两者之间没有任何分数

我正在使用 Spinnaker/Kayenta 进行金丝雀分析。当金丝雀阶段运行时,它要么给出 0 分,要么给出 100 分,两者之间没有任何分数。

这是预期的行为吗?积分是怎么做的??

查看模式,似乎 Run Canary# 因真正原因而失败 ['前一个区间的 Canary 分数(无论你是否有区间)低于边际分数。']。聚合 Canary 结果阶段永远不会运行。下面的示例快照。它只会产生0分。

在此处输入图像描述

在此处输入图像描述

重现步骤:

  • 在 Spinnaker 中设置金丝雀管道。

  • 在金丝雀分析期间将其设置为失败。

额外细节:

当 Run Canary# 阶段成功时。它执行聚合 Canary 结果阶段并产生 100 分。

在此处输入图像描述

0 投票
2 回答
1220 浏览

kubernetes - 如何在虚拟服务的目标中添加重写 uri

我正在尝试在 kubernetes 集群中设置两个服务的路由,并且我想做一个具有特定权重的 2 个不同服务的金丝雀版本。例如:如果到达 /endpoint1,那么它将 50% 的流量路由到 service1,另外 50% 我想重写,然后路由到 service2。如果我尝试这个虚拟服务

它将重写然后使用 path1modified 路由。所以我需要这样的东西

如果这是可能的,我很好奇。非常感谢。

更新 谢谢大家给出的答案,最终我找到了一种方法,基本上我有一个webapp(它使用了path1)并且我有一个服务(它在后端使用了modifiedPath1,但它需要在浏览器中使用path1,使用rewrite),我想要权衡这 2 之间的流量。我尝试使用虚拟服务,但我无法找到一种方法来包含两条路径。我的解决方案是添加一个流量管理器,它将加权流量发送到 webapp 和我的服务,然后对于 webapp,让端点保持原样,对于服务,如果匹配 uri 精确 /path1,然后重写为 modifiedPath1。