前言
上篇文章中的栗子并没有接入外部流量,只在内部使用展示了金丝雀部署过程,下面我们接入外部流量进行测试。
Argo-Rollout主要集成了Ingress和ServiceMesh两种流量控制方法。目前Ingress支持ALB和NGINX ingress。我使用的是nginx ingress。
安装使用
1.部署rollout
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/rollout.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/services.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/nginx/ingress.yaml
我的版本1.22,需要修改ingress.yaml。
1.1文件说明
# cat rollout.yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollouts-demo
spec:
replicas: 1
strategy:
canary:
# 引用一个服务,控制器将更新该服务以指向金丝雀副本集
canaryService: rollouts-demo-canary
# 引用一个服务,控制器将更新该服务以指向稳定副本集
stableService: rollouts-demo-stable
trafficRouting:
nginx:
# 引用一个ingress,包含canary.stablervice的规则
stableIngress: rollouts-demo-stable
steps:
- setWeight: 5
- pause: {}
revisionHistoryLimit: 2
selector:
matchLabels:
app: rollouts-demo
template:
metadata:
labels:
app: rollouts-demo
spec:
containers:
- name: rollouts-demo
image: argoproj/rollouts-demo:blue
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
requests:
memory: 32Mi
cpu: 5m
---
# cat services.yaml
apiVersion: v1
kind: Service
metadata:
name: rollouts-demo-canary
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
app: rollouts-demo
---
apiVersion: v1
kind: Service
metadata:
name: rollouts-demo-stable
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
app: rollouts-demo
---
# cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rollouts-demo-stable
annotations:
kubernetes.io/ingress.class: nginx
spec:
ingressClassName: nginx
rules:
- host: rollouts-demo.local
http:
paths:
- path: /
backend:
# 引用服务名,和 rollout.spec.strategy.canary.stablervice 字段中一样
service:
name: rollouts-demo-stable
port:
number: 80
pathType: ImplementationSpecific
2.查看rollout
kubectl argo rollouts get rollout rollouts-demo
3.更新rollout
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow
kubectl argo rollouts get rollout rollouts-demo
可以看到5% 的流量指向 canary,尽管只运行两个 pod。
4.查看rollouts-demo-rollouts-demo-stable-canary ingress
k get ing rollouts-demo-rollouts-demo-stable-canary -o yaml
添加了2 个额外的annotations,生效金丝雀和指定权重。
Ingress规则中后端指向 canary 服务。
5.继续rollout
5.1查看ingress中的权重
权重已经为0了。