问题标签 [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.
node.js - 从无服务器 Canary 部署插件调用 Lambda 函数
我使用无服务器框架使用 AWS Lambda 和 Node.js 开发应用程序。我想使用serverless-plugin-canary-deployments来运行 Lambda 函数的流量前测试。
如何从流量前挂钩调用新的 Lambda 函数?
我不想简单地从 pre-traffic 挂钩中调用 Lambda 函数的处理程序;
我希望通过测试来证明 Lambda Function 函数的权限是足够的。因此,我想实际调用 Lambda 函数,而不是简单地从 pre-traffic 挂钩中调用其处理程序。
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
这是预期的行为吗?我无法找到导致这种行为的原因。
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
任何指针都会有所帮助。
apache-kafka - 如何运行 Kafka Canary 消费者
我们有一个 Kafka 队列,有两个消费者,都从同一个分区读取(扇出场景)。其中一个消费者应该是金丝雀并处理 1% 的消息,而另一个处理剩下的 99% 的消息。
这个想法是基于消息的属性做出决定,例如消息 ID 或时间戳(例如 mod 100),并基于此接受或丢弃,只是针对金丝雀和非金丝雀的相反逻辑。
现在我们面临如何稳健地做到这一点的问题,例如在运行时重新配置百分比并避免丢失消息或处理它们两次。看起来这升级为分布式共识问题以保持决策逻辑同步,我们非常希望避免这种情况,即使我们可以只使用 ZooKeeper。
这是一个可行的策略,还是有更好的方法来做到这一点?可能是一种避免达成共识的方法?
更新:不幸的是,Kafka 集群不在我们的控制之下,我们无法进行任何更改。
更新 2消息延迟不是一个大问题,添加几百个 100 毫秒是可以的,不会被注意到。
google-cloud-platform - 除了 Prometheus,还有哪些 Metrics Providers 可以与 ArgoCD 一起使用?
我正在尝试使用 AnalysisTemplate 进行 Canary 推广,并且好奇我可以使用 Stackdriver、Istio 或 Anthos 作为指标提供者吗?
官方文档中只提到了 Prometheus。
spinnaker - 如何将 kayenta-canary 部署配置到多个 k8s 集群
环境细节:
- 几个k8s集群:通过二进制包部署,
- 云提供商:kubernetes 提供商 v2 ?
- kayenta pod:正在运行
错误详情:
- 无法保存金丝雀配置:错误 400 发布http://gate/v2/canaryConfig
- 只有 gce 和 aws 资源类型可用,但我没有它们的任何云提供商
这是我的金丝雀配置:
Canary 阶段失败详情:https ://github.com/spinnaker/spinnaker/issues/5639
azure-devops - 通过管道部署 Azure App Service Canary
我们使用 Azure Devops 流程对暂存槽进行部署,然后在暂存和生产之间进行直接交换。
我们注意到,通过门户界面,我们可以将一定比例的流量引导到暂存,有没有一种方法可以通过 Azure Devops/CD 流程来做到这一点,以便我们将一定比例的流量引导到特定的插槽,然后逐渐增加,本质上是一个使用 Azure Web App Slots 通过管道的金丝雀部署方法?
先感谢您。
nginx - 使用 Nginx 的 Canary 部署 - 流量未路由到 Canary 服务器
我们将服务部署在 4 个应用服务器中。我们有 2 个 Nginx 用于负载平衡。我们正在使用 1 个 Consul 服务器进行服务发现。我们将其中一个应用服务器用作 Canary 服务器,以使用该split_clients
指令测试 Canary 部署。使用 Nginx 模板文件,我们控制到 Canary VS 非 Canary 服务器的流量。
我已经使用本地主机上的 curl 在所有 4 台服务器上单独测试了该服务。然后我在一台 Nginx 服务器上测试了 curl 命令。我收到了响应,但它仅从非金丝雀应用服务器返回。没有流量路由到 Canary 服务器。
nginx.conf 文件填充如下:
这里有什么问题?我错过了什么?
kubernetes - 如何在虚拟服务的目标中添加重写 uri
我正在尝试在 kubernetes 集群中设置两个服务的路由,并且我想做一个具有特定权重的 2 个不同服务的金丝雀版本。例如:如果到达 /endpoint1,那么它将 50% 的流量路由到 service1,另外 50% 我想重写,然后路由到 service2。如果我尝试这个虚拟服务
它将重写然后使用 path1modified 路由。所以我需要这样的东西
如果这是可能的,我很好奇。非常感谢。
更新 谢谢大家给出的答案,最终我找到了一种方法,基本上我有一个webapp(它使用了path1)并且我有一个服务(它在后端使用了modifiedPath1,但它需要在浏览器中使用path1,使用rewrite),我想要权衡这 2 之间的流量。我尝试使用虚拟服务,但我无法找到一种方法来包含两条路径。我的解决方案是添加一个流量管理器,它将加权流量发送到 webapp 和我的服务,然后对于 webapp,让端点保持原样,对于服务,如果匹配 uri 精确 /path1,然后重写为 modifiedPath1。