Argo Rollouts配合NGINX Ingress使用

前言

上篇文章中的栗子并没有接入外部流量,只在内部使用展示了金丝雀部署过程,下面我们接入外部流量进行测试。

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

file

2.查看rollout

kubectl argo rollouts get rollout rollouts-demo

file

3.更新rollout

kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow
kubectl argo rollouts get rollout rollouts-demo

file

可以看到5% 的流量指向 canary,尽管只运行两个 pod。
file

4.查看rollouts-demo-rollouts-demo-stable-canary ingress

k get ing rollouts-demo-rollouts-demo-stable-canary -o yaml

添加了2 个额外的annotations,生效金丝雀和指定权重。

file

Ingress规则中后端指向 canary 服务。

file

5.继续rollout

file

file

5.1查看ingress中的权重

权重已经为0了。

file

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x