
kodacd/argo-rolloutsThis plugin is POC-quality and Argo Rollouts was recently released as alpha in 1.5. You have been warned!
This repo contains a POC implementation of an Argo Rollouts plugin to support the Gloo Platform API.
Patterns were based on the K8s gateway api plugin found here.
View the recorded demo here - this is roughly what is documented in the example section below.
TODO *** video link
Think of Argo Rollout CR like a replacement for the K8s Deployment CR.
!image
The Rollout contains 2 primary configs:
While you can reference a Deployment as a way to get the pod template details, Rollouts still will not manage the referenced deployment directly.
The workflow:
See the ./examples folder; ./examples/0-rollout-initial/ and ./examples/1-rollout-first-change/ demonstrate the initial Rollout created with a v1 image, followed by a 4-step canary update to v2.
Argo Rollouts uses Hashi's go-plugin pacakge; plugins are simply binaries you create in go that adhere to an rpc interface defined by Argo Rollouts and implemented with go-plugin.
Plugins may be bundled in an Argo Rollouts controller image, or may be downloaded to the vanilla image on container startup.
I found that the download approach fails, created a thread here:
trafficRouterPlugins: |- - name: "solo-io/glooplatformAPI" location: "[***]"
Until the download approach is fixed, I'm building a dervied image with the plugin embedded:
kodacd/argo-rollouts:latest (just updaing latest tag for POC)trafficRouterPlugins: "- name: \"solo-io/glooplatformAPI\"\n location: \"file://./plugin\" "
This example demonstrates a progressive canary rollout of a demo api. The demo api returns the container's image name and tag. We will deploy different versions with weighted routing to demonstrate the rollout.
Requirements
Steps
kubectl create ns argo-rollouts kubectl apply -f ./examples/_install_rollouts/argo-rollouts.yaml -n argo-rollouts
kubectl apply -f ./examples/demo-api-initial-state
kubectl apply -f ./examples/0-rollout-initial
kubectl argo rollouts dashboard & open http://localhost:3100/rollouts/gloo-rollout-demo
{"image":"kodacd/argo-rollouts-demo-api","tag":"v1"}:
kubectl port-forward $(kubectl get pods -l istio=ingressgateway -n gloo-mesh-gateways -oname) -n gloo-mesh-gateways 8080:8080 curl localhost:8080/demo
v1 to v2:
kubectl apply -f ./examples/1-rollout-first-change
v1 and v2For the recorded demo I generated some load with a curl loop and verified the canary split with promql sum by (destination_workload_id) (rate(istio_requests_total[5m]))
Regardless of which APIs Gloo does/will support, there will always be a Gloo plugin for Argo Rollouts because Gloo will always provide enhanced capability beyond what those APIs provide, and therefore will need additional logic.
yamltrafficRouting: plugins: solo-io/glooplatformAPI: # required; must provide label selector or explicit RouteTable name routeTableSelector: # all labels specified must be exact match on the RT # ; ignored if name is provided labels: app: demo # defaults to the namespace of the rollout if not provided namespace: gloo-mesh # if name is provided, label selector is ignored # name: my-rt-name # optional; select specific routes in matched RouteTable; useful # if multiple routes have the same backend but you don't want to canary # all of them routeSelector: # select routes by their labels; ignored if route name is provided labels: route: demo-preview # if name is provided, label selector is ignored # name: route-name




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务