0
点赞
收藏
分享

微信扫一扫

使用 Jenkins X 渐进式交付



这是渐进式交付系列的第二篇文章,第一篇请看:​​Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署​​。

我使用的我的 ​​Croc Hunter 示例项目​​评估了 Jenkins X 中金丝雀部署和蓝绿色部署的三种渐进式交付方案。

  • Shipper 为 Jenkins X 构建的 Helm 图表启用了蓝绿部署和多集群部署,但是对图表的内容有限制。
    你可以在 staging 和生产环境之间做蓝绿部署。
  • Istio 允许通过创建一个虚拟服务将一定比例的流量发送到 staging 或预览环境。
  • Flagger 构建在 Istio 之上,并添加了金丝雀部署,可以根据指标自动进行滚动部署和回滚。
    Jenkins X 可以通过创建一个 Canary 对象自动启用金丝雀功能,从而实现优雅的滚动部署,以升级到生产环境。

这里可以查看 ​​Shipper​​​、​​Isito​​​ 和 ​​Flager​​ 的示例代码。

Shipper

由于 Shipper 对创建的 Helm 图表有多个限制,因此我必须对应用做一些更改。
而且 Jenkins X 只从 master 分支构建 Helm 包,所以我们不能做 PRs 的滚动部署,只能对 master 分支做滚动部署。

应用标签不能包含发布名称,例如: ​​app: {{ template “fullname” . }}​​​ 不起作用,
需要一些类似这样的标签: ​​​app: {{ .Values.appLabel }}​​。

由 Jenkins X 生成的图表导致应用滚动失败,归因于生成的 ​​templates/release.yaml​​​ 可能和 ​​jenkins.io/releases CRD​​ 冲突。

Chart croc-hunter-jenkinsx-0.0.58 failed to render:
could not decode manifest:

我们只需要将 ​​jx step changelog​​​ 更改为 ​​jx step changelog -generate-yaml =false​​ ,这样就不会生成文件。

在多集群环境,需要在 shipper 应用 yaml 中为 chartmuseum 和 docker registry 使用公开的 url,以便其他集群可以发现管理集群服务来下载图表。

Istio

我们可以创建这个虚拟服务,
将所有进入 Ingress 网关的主机为 ​​​croc-hunter.istio.example.org​​​ 的请求的
1% 的流量发送到 Jenkins X 预览环境( PR 号为 35 )。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: croc-hunter-jenkinsx
namespace: jx-production
spec:
gateways:
- public-gateway.istio-system.svc.cluster.local
- mesh
hosts:
- croc-hunter.istio.example.com
http:
- route:
- destination:
host: croc-hunter-jenkinsx.jx-production.svc.cluster.local
port:
number: 80
weight: 99
- destination:
host: croc-hunter-jenkinsx.jx-carlossg-croc-hunter-jenkinsx-serverless-pr-35.svc.cluster.local
port:
number: 80

Flagger

我们可以为 Jenkins X 在 jx-production 命名空间中部署的图表创建一个 Canary 对象,
所有新的 Jenkins X 对 jx-production 的 promotions 每次将自动滚动 10% ,
如果出现任何失败,将自动回滚。

apiVersion: flagger.app/v1alpha2
kind: Canary
metadata:
# canary name must match deployment name
name: jx-production-croc-hunter-jenkinsx
namespace: jx-production
spec:
# deployment reference
targetRef:
apiVersion: apps/v1
kind: Deployment
name: jx-production-croc-hunter-jenkinsx
# HPA reference (optional)
# autoscalerRef:
# apiVersion: autoscaling/v2beta1
# kind: HorizontalPodAutoscaler
# name: jx-production-croc-hunter-jenkinsx
# the maximum time in seconds for the canary deployment
# to make progress before it is rollback (default 600s)
progressDeadlineSeconds: 60
service:
# container port
port: 8080
# Istio gateways (optional)
gateways:
- public-gateway.istio-system.svc.cluster.local
# Istio virtual service host names (optional)
hosts:
- croc-hunter.istio.example.com
canaryAnalysis:
# schedule interval (default 60s)
interval: 15s
# max number of failed metric checks before rollback
threshold: 5
# max traffic percentage routed to canary
# percentage (0-100)
maxWeight: 50
# canary increment step
# percentage (0-100)
stepWeight: 10
metrics:
- name: istio_requests_total
# minimum req success rate (non 5xx responses)
# percentage (0-100)
threshold: 99
interval: 1m
- name: istio_request_duration_seconds_bucket
# maximum req duration P99
# milliseconds
threshold: 500
interval:

翻译:翟志军

使用 Jenkins X 渐进式交付_生产环境


举报

相关推荐

0 条评论