在 Kubernetes 上使用 Spinnaker 構(gòu)建部署流水線
Spinnaker 是一種持續(xù)交付平臺(tái),最初由 Netflix 開發(fā),用于快速、可靠地發(fā)布軟件更改。Spinnaker 使開發(fā)人員可以更輕松地專注于編寫代碼,而無需擔(dān)心底層的云基礎(chǔ)設(shè)施。它與 Jenkins 以及其他流行的構(gòu)建工具無縫集成。
在本博文中,我們將討論如何安裝 Spinnaker 以及如何為在 Kubernetes 上運(yùn)行的工作負(fù)載構(gòu)建持續(xù)交付管道。我們的工作流與以下類似:

圖中包含了下列步驟:
開發(fā)人員將代碼推送到 GitHub。 GitHub 觸發(fā) Jenkins。 Jenkins 構(gòu)建一個(gè) Docker 映像,然后為它添加標(biāo)簽并推送到 Amazon Elastic Container Registry (Amazon ECR)。 Spinnaker 管道將在 Amazon ECR 收到此新 Docker 映像時(shí)觸發(fā)。 然后 Spinnaker 將執(zhí)行如下操作: 使用 Helm 生成 (Bake) Kubernetes 部署文件(開發(fā)和生產(chǎn))。 將 Kubernetes 部署到開發(fā)環(huán)境。 人工判斷:我們的管道配置需要人工手動(dòng)確認(rèn),然后才能將應(yīng)用程序部署到生產(chǎn)環(huán)境。它會(huì)等待此步驟完成,然后才會(huì)繼續(xù)執(zhí)行管道。 將代碼部署到生產(chǎn)環(huán)境。
先決條件
一個(gè)正在運(yùn)行的 Kubernetes 集群。如果您還沒有運(yùn)行這樣的集群,請(qǐng)使用 eksctl 以通過一個(gè)命令啟動(dòng)并運(yùn)行 EKS 集群。 Kubernetes 集群中至少需要有 8GB 可用內(nèi)存和 2 個(gè) vCPU 以支持 Spinnaker 微服務(wù)。一個(gè) m5.large 實(shí)例應(yīng)該足夠滿足此要求。 已在您的計(jì)算機(jī)上安裝、配置和運(yùn)行 kubectl。 已安裝 Helm。如要安裝,請(qǐng)遵循 Kubernetes Helm 說明。 已安裝 Jenkins。如要安裝,請(qǐng)遵循 AWS 上的 Jenkins 文檔中的說明。 已為 Jenkins 安裝 Docker 和 Amazon ECR 插件并且正確配置。 一個(gè) Docker 注冊(cè)表賬戶。如果您還沒有這樣的賬戶,您可以使用 Amazon ECR,因?yàn)槲覀冊(cè)诒静┪闹幸矊⑦@樣做。您還可以使用 Docker Hub。 一個(gè)身份提供商 (LDAP/SAML/Oauth2)。在本博文中,我們將使用 Active Directory (LDAP) 身份認(rèn)證機(jī)制。如果您還沒有身份提供商,請(qǐng)遵循 AWS 托管 Microsoft AD 文檔中的說明。
步驟
當(dāng)所有的先決條件都具備后,您就可以開始設(shè)置管道的實(shí)際步驟。我們將詳細(xì)講解每個(gè)步驟,下面概括了我們將要執(zhí)行的步驟:
構(gòu)建一個(gè)示例應(yīng)用程序:Hello world 示例微服務(wù)。 使用 Helm 在 EKS 上安裝 Spinnaker。 設(shè)置 LDAP/AD 身份驗(yàn)證。 通過設(shè)置入站控制器來暴露 Spinnaker。 將一個(gè) GitHub 賬戶添加到 Spinnaker。 在您的 AWS 賬戶中配置 Amazon ECR,以便存儲(chǔ) Jenkins 推送的 Docker 映像。 為 Docker 映像編譯和 ECR 推送配置 Jenkins。 在 Spinnaker 中構(gòu)建 CI/CD 管道 — 使用來自 GitHub 的 Web-hook 自動(dòng)化編譯,手動(dòng)批準(zhǔn)生產(chǎn)環(huán)境部署。 運(yùn)行管道并部署應(yīng)用程序。 測(cè)試。 清除。
第 1 步:構(gòu)建示例應(yīng)用程序
為便于本博文的演示,我們將使用我們的管道將會(huì)構(gòu)建和部署的示例應(yīng)用程序。請(qǐng)對(duì)示例應(yīng)用程序進(jìn)行分叉以繼續(xù)下一步。
此存儲(chǔ)庫包含一個(gè) Helm 圖表,該圖表將在 Spinnaker 進(jìn)行部署時(shí)使用。本節(jié)剩余部分提到的項(xiàng)目已經(jīng)為此存儲(chǔ)庫完成,因此您可以直接使用。如果您使用示例應(yīng)用程序,則可跳過第 2 步!否則,如果您使用自己的應(yīng)用程序:
如果您使用自己的應(yīng)用程序
如果您傾向于使用自己的應(yīng)用程序,您將需要?jiǎng)?chuàng)建自己的 Helm 圖表并進(jìn)行封裝。請(qǐng)按照以下步驟為您的應(yīng)用程序創(chuàng)建和封裝一個(gè) Helm 圖表。
helm 創(chuàng)建示例微服務(wù)

打開 sample-microservice/templates/deployment.yaml,然后進(jìn)行如下更改:
1.1 添加命名空間
將 namespace: {{ .Release.Namespace}} 添加到 Helm 模板部署中。這將幫助 Spinnaker 在部署階段提到的特定命名空間中部署 Kubernetes 部署包
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ include "sample-microservice.fullname" . }}
namespace: {{ .Release.Namespace}}
1.2 更改映像
將 Helm 模板的 deployment.yaml 文件中的 "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 更改為 {{ .Values.image.repository }}(這將讓 Spinnaker 替換部署的標(biāo)簽),即從:
spec:
containers:
- name: {{ .Chart.Name }}
image: {{ .Values.image.repository }}
imagePullPolicy: "{{ .Values.image.pullPolicy }}:{{ .Values.image.tag}}"
更改為:
spec:
containers:
- name: {{ .Chart.Name }}
image: {{ .Values.image.repository }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
通過運(yùn)行以下命令封裝 Helm 圖表:
helm package sample-microservice
此命令將創(chuàng)建 Spinnaker 會(huì)用到的 sample-microservice-0.1.0.tgz 文件。
第 2 步:使用 Helm 安裝 Spinnaker
要使用默認(rèn)配置安裝 Spinnaker,請(qǐng)運(yùn)行如下命令:
helm install stable/spinnaker --name=spinnaker --namespace=spinnaker
如需了解更多信息,請(qǐng)參閱適用于 GitHub 上的 Spinnaker 的 Helm 圖表。
在安裝過程中,我們來談?wù)勎覀儗⒃诒静┪闹杏玫降囊恍?Spinnaker 組件。有關(guān) Spinnaker 的詳細(xì)架構(gòu)和組件,請(qǐng)參閱 Spinnaker 參考架構(gòu)。
Deck — 這是用于提供基于瀏覽器的 UI 的 Spinnaker 前端組件。 Gate — 此服務(wù)提供了 Spinnaker REST API,負(fù)責(zé)服務(wù)腳本處理客戶端以及來自 Deck 的所有操作。 Halyard — 用于配置、安裝和更新 Spinnaker 的 CLI。
Spinnaker 將 Redis 作為緩存基礎(chǔ)設(shè)施,用于存儲(chǔ)與實(shí)時(shí)執(zhí)行有關(guān)的信息;有關(guān)此功能的更多信息請(qǐng)參閱 Spinnaker Redis 配置頁面。我們將使用 Helm 圖表依賴并且安裝在 Kubernetes 集群內(nèi)部的一個(gè) Redis 安裝。對(duì)于 Spinnaker 的生產(chǎn)設(shè)置,您將需要將 Redis 外部化。您還將需要參閱 Spinnaker 生產(chǎn)化文檔。
Spinnaker 還需要一個(gè)數(shù)據(jù)存儲(chǔ)(S3、Minio 或其他對(duì)象存儲(chǔ))。默認(rèn)安裝會(huì)使用 Minio。對(duì)于生產(chǎn)環(huán)境,您將需要通過在 values.yaml 中啟用 S3 來使用 S3,而不是 Minio。
要驗(yàn)證您的 Spinnaker 安裝:
kubectl -n spinnaker get pods
與以下類似的輸出可確認(rèn) Spinnaker 已成功安裝:
NAME READY STATUS RESTARTS AGE
spin-clouddriver-945c95564-8wl52 1/1 Running 0 2h
spin-deck-6c4bf6c4f6-wqgmk 1/1 Running 0 2h
spin-echo-646f6c4b76-p29tl 1/1 Running 0 2h
spin-front50-7cc5575457-qcvtd 1/1 Running 1 2h
spin-gate-84dc696d7c-zqctg 1/1 Running 0 2h
spin-igor-885f8bf5c-xprkc 1/1 Running 0 2h
spin-orca-7bfd8fd4d6-28dks 1/1 Running 0 2h
spin-rosco-844b85888-sggkk 1/1 Running 0 2h
spinnaker-install-using-hal-qlvfj 0/1 Completed 0 2h
spinnaker-Minio-df54fb68d-h4ld9 1/1 Running 0 2h
spinnaker-Redis-master-0 1/1 Running 0 2h
spinnaker-spinnaker-halyard-0 1/1 Running 0 2h
要列出服務(wù),請(qǐng)運(yùn)行以下命令:
kubectl -n spinnaker get services
輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
spin-clouddriver ClusterIP 172.20.135.53 <none> 7002/TCP 2h
spin-deck ClusterIP 172.20.167.104 <none> 9000/TCP 2h
spin-echo ClusterIP 172.20.46.99 <none> 8089/TCP 2h
spin-front50 ClusterIP 172.20.234.34 <none> 8080/TCP 2h
spin-gate ClusterIP 172.20.132.82 <none> 8084/TCP 2h
spin-igor ClusterIP 172.20.87.99 <none> 8088/TCP 2h
spin-orca ClusterIP 172.20.241.201 <none> 8083/TCP 2h
spin-rosco ClusterIP 172.20.136.62 <none> 8087/TCP 2h
spinnaker-Minio ClusterIP None <none> 9000/TCP 2h
spinnaker-Redis-master ClusterIP 172.20.80.211 <none> 6379/TCP 2h
spinnaker-spinnaker-halyard ClusterIP None <none> 8064/TCP 2h
要啟動(dòng) Spinnaker UI,請(qǐng)運(yùn)行命令:
kubectl -n spinnaker port-forward svc/spin-deck 9000:9000
在瀏覽器中導(dǎo)航至 http://localhost:9000。這時(shí)您應(yīng)會(huì)看到:

第 2.1 步:設(shè)置 LDAP/AD 身份驗(yàn)證。
獲取您的 Active Directory 服務(wù)器的 URL。在我的 AWS 賬戶中,有一個(gè) AD 服務(wù)器與我的 Kubernetes 集群在同一個(gè) VPC 中運(yùn)行。如果您還沒有這樣的服務(wù)器,請(qǐng)轉(zhuǎn)至 AWS 托管 AD 并自行獲取一個(gè)服務(wù)器。
如下所示創(chuàng)建一個(gè)名為 gate-local.yaml 的文件。此文件將用于放置 Spinnaker 的 Active Directory 配置。
ldap:
enabled: true
url: ldap://10.0.157.236:389/dc=ad,dc=prabhatsharma,dc=com
userSearchBase: OU=users,OU=ad
userSearchFilter: (sAMAccountName={0})
managerDn: CN=prabhat,OU=users,OU=ad,dc=ad,dc=prabhatsharma,dc=com
managerPassword: MySuper#StrongPassword
將 gate-local.yaml 復(fù)制到 Halyard:
kubectl cp gate-local.yaml spinnaker-spinnaker-halyard-0:/home/spinnaker/.hal/default/profiles/
應(yīng)用 Halyard 配置:
kubectl exec spinnaker-spinnaker-halyard-0 -- bash hal deploy apply
第 3 步:暴露 Spinnaker — 設(shè)置入站控制器
這是一個(gè)可選步驟,僅在您需要在 Kubernetes 集群外部暴露 Spinnaker 時(shí)使用。您必須安裝了 NGINX 入站控制器才能成功完成此步驟。
我在 Route53 中配置了一個(gè)公有的萬用域,它指向我的 NGINX 入站 ELB。您需要使用自己的域,為此請(qǐng)將 yourcustomdomain.com 替換為您自己的域。
創(chuàng)建文件 spinnaker-ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: spinnaker
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- spinnaker.yourcustomdomain.com
- spin-gate.yourcustomdomain.com
rules:
- host: spinnaker.yourcustomdomain.com
http:
paths:
- path: /
backend:
serviceName: spin-deck
servicePort: 9000
- host: spin-gate.yourcustomdomain.com
http:
paths:
- path: /
backend:
serviceName: spin-gate
servicePort: 8084
部署入站控制器:
kubectl -n spinnaker apply -f spinnaker-ingress.yaml
這時(shí),您已經(jīng)暴露了甲板(Spinnaker UI 終端節(jié)點(diǎn))和閘門(Spinnaker API 終端節(jié)點(diǎn))。
您需要告訴 Spinnaker 使用我們剛剛創(chuàng)建的新 Spinnaker 終端節(jié)點(diǎn)。為此我們將使用 Halyard。要運(yùn)行 Halyard,請(qǐng)登錄到 Halyard Pod:
kubectl -n spinnaker exec -it spinnaker-spinnaker-halyard-0 bash
這將會(huì)進(jìn)入容器中的 shell 程序。
spinnaker@spinnaker-spinnaker-halyard-0:/workdir$
運(yùn)行以下命令以將 Spinnaker 配置為使用新的終端節(jié)點(diǎn)。如果需要任何其他的配置,您始終可以參考完整的 Halyard 命令列表。
hal config security api edit --override-base-url https://spin-gate.yourcustomdomain.com
hal config security ui edit --override-base-url https://spinnaker.yourcustomdomain.com
hal deploy apply
此后您將能夠通過 https://spinnaker.yourcustomdomain.com 訪問 Spinnaker。
第 4 步:將一個(gè) GitHub 賬戶添加到 Spinnaker
我們將使用 Halyard 來添加 GitHub 賬戶
要訪問 Halyard Pod:
kubectl -n spinnaker exec -it spinnaker-spinnaker-halyard-0 bash
hal config artifact github account add aws-samples
hal deploy apply
注意:請(qǐng)將 aws-samples 更改為您自己的 Github 賬戶名。
以上命令將允許 Spinnaker 訪問 GitHub。
第 5 步:為 Jenkins 映像推送配置 Amazon ECR 存儲(chǔ)庫
您需要一個(gè) Docker 存儲(chǔ)庫來存儲(chǔ)您的微服務(wù) Docker 映像。為此我們將創(chuàng)建一個(gè) Amazon ECR 存儲(chǔ)庫。
導(dǎo)航至 AWS 控制臺(tái) > 計(jì)算 > ECR。
單擊創(chuàng)建存儲(chǔ)庫。

鍵入存儲(chǔ)庫的名稱 (sample-microservice),然后單擊創(chuàng)建存儲(chǔ)庫。

此存儲(chǔ)庫將存儲(chǔ) Jenkins 推送的我們的微服務(wù)的 Docker 映像。
第 6 步:為 Docker 映像編譯和 ECR 推送配置 Jenkins
注意:您必須已經(jīng)安裝并配置好 Amazon ECR 插件才能執(zhí)行此操作。您可以前往 **Jenkins > Plugin Manager(插件管理器)> Installed(已安裝)**并搜索 Amazon ECR,從而驗(yàn)證該插件已安裝。
我們將配置一個(gè) Jenkins 作業(yè),此作業(yè)將通過向 GitHub 推送代碼的方式觸發(fā)。此作業(yè)將會(huì)構(gòu)建一個(gè) Docker 映像并將該映像推送到 Amazon ECR。
現(xiàn)在登錄到您的 Jenkins 安裝,并且:
6.1 創(chuàng)建一個(gè)新的任意風(fēng)格項(xiàng)目

6.2 配置源代碼管理
更改分叉后的 GitHub 存儲(chǔ)庫路徑,然后將 aws-samples 替換為您自己的用戶名,例如將 https://github.com/aws-samples/sample-microservice-with-spinnaker 替換為 https://github.com/[您的 GitHub 句柄]/sample-microservice-with-spinnaker。

6.3 配置編譯觸發(fā)器
您可以使用 Webhook 或輪詢。在本博文中我們使用 Webhook。GitHub 的 Jenkins Webhook 配置不屬于本博文的范圍。

6.4 配置編譯階段
我們將 Jenkins 編譯號(hào)作為 Docker 映像標(biāo)簽使用:

Jenkins 變量 BUILD_NUMBER 將作為新創(chuàng)建映像的標(biāo)簽使用。
第 7 步:為 Spinnaker 配置 Amazon ECR
注意:要完成此項(xiàng)操作,您的 Kubernetes 節(jié)點(diǎn)必須分配了恰當(dāng)?shù)?IAM 角色以允許訪問 ECR。您可以在文檔中找到可以分配到您的 Kubernetes 工作線程節(jié)點(diǎn) IAM 角色的示例 IAM 策略。
此配置將允許您配置將容器推送到 ECR 時(shí)將會(huì)觸發(fā)的 Spinnaker 管道。
ADDRESS=123456789123.dkr.ecr.us-west-2.amazonaws.com
REGION=us-west-2
hal config provider docker-registry account add my-ecr-registry \
--address $ADDRESS \
--username AWS \
--password-command "aws --region $REGION ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'"
hal deploy apply
有關(guān)管理 Docker 注冊(cè)表的更多信息,請(qǐng)參閱 Spinnaker 的 Docker 注冊(cè)表文檔。
第 8 步:在 Spinnaker 中構(gòu)建 CI/CD 管道
在開始構(gòu)建此管道前,您需要了解一些 Spinnaker 概念:
應(yīng)用 — 應(yīng)用是指您將使用 Spinnaker 部署的服務(wù)、該服務(wù)的所有配置以及它運(yùn)行所需的所有基礎(chǔ)實(shí)施。您一般會(huì)為每個(gè)服務(wù)創(chuàng)建不同的應(yīng)用,但這并非 Spinnaker 的強(qiáng)制要求。
管道 — 管道是指 Spinnaker 提供的一定順序的階段,從操作基礎(chǔ)設(shè)施的功能(部署、調(diào)整、禁用),到支持功能(人工判斷、等待、運(yùn)行 Jenkins 作業(yè))等等。所有這些階段一起準(zhǔn)確定義了管理您的部署的操作手冊(cè)。
階段 — Spinnaker 中的階段是管道的基本構(gòu)建塊,它描述了該管道將執(zhí)行的操作。您可以按任何順序排列 Spinnaker 中的階段,但一些階段順序要比其他順序更常見。Spinnaker 提供了多個(gè)階段,例如部署、調(diào)整、禁用、人工判斷等等。
構(gòu)件 — 在 Spinnaker 中,構(gòu)件是指引用任何外部資源的對(duì)象。該資源可以是:
Docker 映像 存儲(chǔ)在 GitHub 中的文件 Amazon 系統(tǒng)映像 (AMI) S3、GCS 等中的二進(jìn)制大對(duì)象
Spinnaker 使用 Helm v2 來管理向 Kubernetes 推送的部署。您必須為您計(jì)劃推送部署的每個(gè)環(huán)境指定一個(gè)基本 Helm 模板和一個(gè)覆蓋文檔。
下面我們執(zhí)行設(shè)置管道的必要步驟:
創(chuàng)建應(yīng)用 創(chuàng)建管道 設(shè)置配置 Helm 模板 — sample-microservice-0.1.0.tgz Helm 開發(fā)環(huán)境覆蓋 — values/dev.yaml Helm 生產(chǎn)環(huán)境覆蓋 — values/dev.yaml Docker 映像 — 123456789123.dkr.ecr.us-west-2.amazonaws.com/sample-microservice 設(shè)置構(gòu)件 設(shè)置管道觸發(fā)器 創(chuàng)建階段 Bake 開發(fā) Bake 生產(chǎn) 部署到開發(fā) 人工判斷 部署到生產(chǎn)
8.1 創(chuàng)建應(yīng)用
我們的應(yīng)用將是 Spinnaker 中的一個(gè)占位符,代替我們將為其構(gòu)建管道的服務(wù)。
登錄到 Spinnaker 后,從 Applications > Create Application 創(chuàng)建一個(gè)新的應(yīng)用。


單擊 Create;您將會(huì)看到應(yīng)用基礎(chǔ)設(shè)施頁面:

8.2 創(chuàng)建管道
轉(zhuǎn)至“Pipelines”,然后單擊 Configure a new pipeline。


8.3 設(shè)置管道配置
現(xiàn)在您將進(jìn)入:

現(xiàn)在我們將配置 Expected Artifacts:
Helm 模板構(gòu)件
單擊 Add Artifact。
注意:在下面的步驟中,請(qǐng)將 aws-samples 替換為您的 GitHub 句柄。
將默認(rèn)內(nèi)容 URL 設(shè)置為 https://api.gitgub.com/repos/aws-samples/sample-microservice-with-spinnaker/contents/sample-microservice-0.1.0.tgz
觸發(fā)器每次觸碰 Webhook 時(shí),會(huì)將構(gòu)件傳輸至 Spinnaker。如果您的管道需要特定的構(gòu)件來執(zhí)行尚未通過觸發(fā)器收到的管道,您可以指定要使用的默認(rèn)構(gòu)件。在此例中,我們將指定默認(rèn)構(gòu)件,因?yàn)槲覀兊墓艿牢幢?GitHub 觸發(fā),因此不會(huì)在我們需要執(zhí)行時(shí)傳輸該構(gòu)件。
對(duì)其他構(gòu)件進(jìn)行類似配置:
開發(fā)環(huán)境覆蓋構(gòu)件
構(gòu)件類型 — GitHub 文件路徑 — values/dev.yaml 默認(rèn)構(gòu)件內(nèi)容 URL – https://api.github.com/repos/aws-samples/sample-microservice-with-spinnaker/contents/values/dev.yaml
生產(chǎn)環(huán)境覆蓋構(gòu)件
構(gòu)件類型 — GitHub 文件路徑 — values/prod.yaml 默認(rèn)構(gòu)件內(nèi)容 URL – https://api.github.com/repos/aws-samples/sample-microservice-with-spinnaker/contents/values/prod.yaml
Docker 映像構(gòu)件
構(gòu)件類型 — Docker Docker 映像 — 123456789123.dkr.ecr.us-west-2.amazonaws.com/sample-microservice 默認(rèn)構(gòu)件 Docker 映像 — 123456789123.dkr.ecr.us-west-2.amazonaws.com/sample-microservice:latest
現(xiàn)在我們將配置 Automated Triggers:
自動(dòng)化觸發(fā)器可以在每次發(fā)生特定事件時(shí)(例如,Docker 映像推送到注冊(cè)表、代碼推送到 GitHub 等)啟動(dòng)某個(gè)管道。我們需要在我們的 ECR 存儲(chǔ)庫中有新的 Docker 映像可用時(shí)啟動(dòng)管道。
配置方式是從 Automated Triggers 的下拉列表中選擇注冊(cè)表名稱和映像:

然后單擊右下角的 Save Changes 以保存更改。
8.4 添加 Bake 階段
現(xiàn)在我們的管道配置已經(jīng)完成,可以添加新的階段
Bake dev — 此階段將使用 dev.yaml 中的覆蓋值,通過 Helm v2 來渲染部署模板。
跳轉(zhuǎn)至管道頂部,單擊 Add stage。

提供名稱和將會(huì)進(jìn)行部署的 Kubernetes 命名空間。命名空間必須已經(jīng)存在,否則管道執(zhí)行時(shí)將會(huì)失敗。

這還將創(chuàng)建一個(gè)叫做 Produces Artifacts 的部分,您可以下翻看到:

此生成的構(gòu)件是一個(gè) base64 編碼的 Kubernetes 部署文件(含服務(wù)、入口等)。
安裝與上述 Bake dev類似的操作,創(chuàng)建一個(gè) Bake prod 階段。

這時(shí)您的管道應(yīng)會(huì)與以下類似:

8.5 添加部署到生產(chǎn)階段
在完成“Bake dev”和“Bake prod”階段后,我們的 Kubernetes 部署文件已經(jīng)準(zhǔn)備就緒,可以用于部署。現(xiàn)在創(chuàng)建一個(gè) Deploy dev 階段,這將會(huì)部署到開發(fā)環(huán)境。選中 Bake dev 階段后,單擊 Add stage。將“Bake prod”作為一個(gè)依賴項(xiàng)與 Bake dev 一起添加。

8.6 添加人工判斷階段
許多團(tuán)隊(duì)希望有人來人工審批,然后再將部署推送到生成環(huán)境。如果您的團(tuán)隊(duì)屬于這種情況,您可以添加一個(gè)“Manual Judgement”階段。
單擊 Add stage,然后從下拉列表中選擇 Manual Judgement:

8.7 添加部署到生產(chǎn)階段
這是我們的最后一個(gè)階段,如果一切進(jìn)展順利,我們會(huì)將部署文件推送到生產(chǎn)環(huán)境。單擊 Add stage 并選擇預(yù)期構(gòu)件 sample-microservice-prod, type: embedded/base64,從而創(chuàng)建此階段。它應(yīng)當(dāng)擁有一個(gè)依賴項(xiàng) Manual Judgement。

9.測(cè)試
在您的 Kubernetes 集群中創(chuàng)建兩個(gè)命名空間:
kubectl create namespace sample-microservice-dev
kubectl create namespace sample-microservice-prod
現(xiàn)在您可以通過修改 main.go 并推送提交至 GitHub,從而對(duì)整個(gè)管道進(jìn)行測(cè)試。您將一次看到以下事件:
Jenkins 編譯被觸發(fā)。 新的 Docker 映像被發(fā)布到 Amazon ECR。 Spinnaker 管道被觸發(fā)。
您可以在管道屏幕上看到進(jìn)度。在人工判斷階段,它將與以下類似:

單擊 Continue,管道將繼續(xù)將部署推送到生產(chǎn)環(huán)境。
祝賀您!您已經(jīng)啟動(dòng)并運(yùn)行了您的 Spinnaker 管道。如需了解更多信息,請(qǐng)參閱官方的 Spinnaker 指南。
10.清除
完成測(cè)試后,您可以按照下列步驟執(zhí)行清理:
10.1 刪除 Helm 圖表
helm delete spinnaker --purge
這將會(huì)刪除與 Spinnaker Helm 部署關(guān)聯(lián)的所有資源。
10.2 刪除入站控制器
kubectl -n spinnaker delete ingress spinnaker
這將刪除 Spinnaker 入站控制器。
小結(jié)
在本博文中,我們向大家演示了如何安裝 Spinnaker 和創(chuàng)建持續(xù)交付管道。此外,我們還介紹了一些 Spinnaker 概念合同可以在構(gòu)建管道時(shí)使用的不同類型的階段。雖然此管道十分簡(jiǎn)單,Spinnaker 也支持多種其他功能,例如回滾和金雀花部署。它可以與 Jenkins 和 Travis CI 等 CI 工具集成。它還可以與 Prometheus 和 SignalFx 等集成以進(jìn)行金雀花分析。要了解有關(guān) Spinnaker 功能的更多信息,請(qǐng)參閱精彩的 Spinnaker 文檔。
原文鏈接:https://aws.amazon.com/cn/blogs/china/deployment-pipeline-spinnaker-kubernetes/
K8S 進(jìn)階訓(xùn)練營(yíng)
點(diǎn)擊屏末 | 閱讀原文 | 即刻學(xué)習(xí)

掃描二維碼獲取
更多云原生知識(shí)
k8s技術(shù)圈

