本文首發於:Jenkins 中文社區git
這是漸進式交付系列的第二篇文章,第一篇請看:Kubernetes 中的漸進式交付:藍綠部署和金絲雀部署。github
我使用的個人 Croc Hunter 示例項目評估了 Jenkins X 中金絲雀部署和藍綠色部署的三種漸進式交付方案。docker
這裏能夠查看 Shipper、Isito 和 Flager 的示例代碼。api
因爲 Shipper 對建立的 Helm 圖表有多個限制,所以我必須對應用作一些更改。 並且 Jenkins X 只從 master 分支構建 Helm 包,因此咱們不能作 PRs 的滾動部署,只能對 master 分支作滾動部署。app
應用標籤不能包含發佈名稱,例如: app: {{ template 「fullname」 . }}
不起做用, 須要一些相似這樣的標籤: app: {{ .Values.appLabel }}
。less
由 Jenkins X 生成的圖表致使應用滾動失敗,歸因於生成的 templates/release.yaml
可能和 jenkins.io/releases CRD
衝突。url
Chart croc-hunter-jenkinsx-0.0.58 failed to render: could not decode manifest: no kind "Release" is registered for version "jenkins.io/v1"
咱們只須要將 jx step changelog
更改成 jx step changelog -generate-yaml =false
,這樣就不會生成文件。spa
在多集羣環境,須要在 shipper 應用 yaml 中爲 chartmuseum 和 docker registry 使用公開的 url,以便其餘集羣能夠發現管理集羣服務來下載圖表。code
咱們能夠建立這個虛擬服務, 將全部進入 Ingress 網關的主機爲 croc-hunter.istio.example.org
的請求的 1% 的流量發送到 Jenkins X 預覽環境( PR 號爲 35 )。server
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
咱們能夠爲 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: 30s
譯者:王冬輝