内部实现:Argo Rollouts 1.8 如何在 Kubernetes 1.33 和 Prometheus 3.1 中实现 Canary Deployments

发布: (2026年5月3日 GMT+8 04:20)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容(文章正文),我将为您翻译成简体中文,并保留原有的 Markdown 格式和技术术语。谢谢!

Prerequisites and Stack Compatibility

Argo Rollouts 1.8 专为利用 Kubernetes 1.33 的增强工作负载 API 而构建,包括对 DeploymentReplicaSet 生命周期钩子的稳定支持,以及 Prometheus 3.1 原生直方图指标用于低延迟金丝雀分析。关键兼容性说明:

  • Kubernetes 1.33+ 是 Argo Rollouts 新的 Rollout 控制器准入 webhook 的前置要求,这些 webhook 在创建时验证金丝雀配置。
  • Prometheus 3.1prometheus-operator v0.70+ 集成实现了金丝雀分析规则的自动指标抓取。
  • Argo Rollouts 1.8 不再支持 1.28 以下的 Kubernetes 版本,以符合上游的弃用策略。

Argo Rollouts 1.8 金丝雀架构

核心 Argo Rollouts 1.8 金丝雀工作流依赖于三个组件,已更新至 K8s 1.33 和 Prometheus 3.1:

ComponentResponsibility
Rollout Controller监视 Rollout 自定义资源(CR),管理金丝雀 ReplicaSet 的创建,并更新 Kubernetes ServiceIngress 对象以实现流量分配。
Analysis Controller查询 Prometheus 3.1 获取金丝雀健康指标,评估分析模板,并向 Rollout Controller 发出信号以推进或中止金丝雀。
Metrics Server聚合来自 K8s 1.33 的 kube-proxy 和 Prometheus 3.1 导出器的实时流量和错误率指标。

深入了解 Kubernetes 1.33 的流量拆分

Kubernetes 1.33 引入了对 Service traffic policy 增强的稳定支持,Argo Rollouts 1.8 利用该特性在无需第三方服务网格的情况下实现金丝雀流量拆分(仍然支持网格集成)。

工作流程

Rollout CR 使用新容器镜像进行更新时,Rollout 控制器会:

  1. 创建一个带有新镜像的金丝雀 ReplicaSet,最初将副本数设为 0。
  2. 更新主 Service 的 selector,给金丝雀 Pod 添加 rollout.argoproj.io/canary: "true" 标签,给稳定 Pod 添加 rollout.argoproj.io/stable: "true" 标签。
  3. 使用 K8s 1.33 的 EndpointSlice API,根据 Rollout 规范中定义的金丝雀比例,在稳定和金丝雀 EndpointSlice 对象之间拆分流量。

示例 Rollout 流量拆分片段

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: canary-demo
spec:
  replicas: 10
  strategy:
    canary:
      steps:
        - setWeight: 10
        - pause: {duration: 5m}
        - setWeight: 50
        - pause: {duration: 10m}
        - setWeight: 100
      trafficRouting:
        kubernetes:
          service: canary-demo-svc
          ingress:
            name: canary-demo-ingress
  selector:
    matchLabels:
      app: canary-demo
  template:
    metadata:
      labels:
        app: canary-demo
    spec:
      containers:
        - name: demo-app
          image: demo-app:v2.0.0
          ports:
            - containerPort: 8080

Prometheus 3.1 对金丝雀分析的集成

Argo Rollouts 1.8 利用 Prometheus 3.1 的原生直方图和指数桶度量,在查询延迟低于以前版本的情况下评估金丝雀健康状况。Analysis Controller 使用 PrometheusQuery API 按可配置的间隔轮询 Prometheus 3.1,然后将结果与用户定义的成功阈值进行比较。

Prometheus 3.1 示例 AnalysisTemplate

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: prometheus-canary-analysis
spec:
  metrics:
    - name: error-rate
      successCondition: result[0]  0.05
      provider:
        prometheus:
          address: http://prometheus.istio-system.svc:9090
          query: |
            sum(rate(http_requests_total{app="canary-demo", status=~"5.."}[5m])) /
            sum(rate(http_requests_total{app="canary-demo"}[5m]))

Prometheus 3.1 的新 remote_write 优化将指标延迟降低至不足 1 秒,确保 Argo Rollouts 1.8 能够几乎实时地做出金丝雀推进决策。

Argo Rollouts 1.8 的关键优化

超出 K8s 1.33 与 Prometheus 3.1 的集成,Argo Rollouts 1.8 还包括若干底层改进:

  • 降低内存占用 – 由于 K8s 1.33 的共享 informer 缓存优化,Rollout Controller 的内存使用量下降约 30 %。
  • 原生支持 Prometheus 3.1 exemplar 指标,实现金丝雀调试的追踪‑指标关联。
  • 改进的金丝雀中止逻辑 – 当 Prometheus 3.1 报告阈值突破时,Rollout Controller 会自动缩减金丝雀 ReplicaSet,并在 2 秒内将 100 % 流量恢复到稳定版本。

结论

Argo Rollouts 1.8 与 Kubernetes 1.33 和 Prometheus 3.1 搭配使用,提供了一个稳健、低延迟的金丝雀部署工作流,无需依赖复杂的服务网格配置。它与 K8s 1.33 的流量路由 API 以及 Prometheus 3.1 的高性能指标引擎的紧密集成,使其成为运行现代云原生工作负载的团队的理想选择。

生产环境的 Kubernetes 工作负载。

完整的发行说明请参阅 Argo Rollouts 1.8 changelog

0 浏览
Back to Blog

相关文章

阅读更多 »