<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在 Kubernetes 上使用 Spinnaker 構(gòu)建部署流水線

          共 19929字,需瀏覽 40分鐘

           ·

          2021-06-09 07:58

          Spinnaker 是一種持續(xù)交付平臺(tái),最初由 Netflix 開發(fā),用于快速、可靠地發(fā)布軟件更改。Spinnaker 使開發(fā)人員可以更輕松地專注于編寫代碼,而無需擔(dān)心底層的云基礎(chǔ)設(shè)施。它與 Jenkins 以及其他流行的構(gòu)建工具無縫集成。

          在本博文中,我們將討論如何安裝 Spinnaker 以及如何為在 Kubernetes 上運(yùn)行的工作負(fù)載構(gòu)建持續(xù)交付管道。我們的工作流與以下類似:

          圖中包含了下列步驟:

          1. 開發(fā)人員將代碼推送到 GitHub。
          2. GitHub 觸發(fā) Jenkins。
          3. Jenkins 構(gòu)建一個(gè) Docker 映像,然后為它添加標(biāo)簽并推送到 Amazon Elastic Container Registry (Amazon ECR)。
          4. Spinnaker 管道將在 Amazon ECR 收到此新 Docker 映像時(shí)觸發(fā)。
          5. 然后 Spinnaker 將執(zhí)行如下操作:
            1. 使用 Helm 生成 (Bake) Kubernetes 部署文件(開發(fā)和生產(chǎn))。
            2. 將 Kubernetes 部署到開發(fā)環(huán)境。
            3. 人工判斷:我們的管道配置需要人工手動(dòng)確認(rèn),然后才能將應(yīng)用程序部署到生產(chǎn)環(huán)境。它會(huì)等待此步驟完成,然后才會(huì)繼續(xù)執(zhí)行管道。
            4. 將代碼部署到生產(chǎn)環(huán)境。

          先決條件

          1. 一個(gè)正在運(yùn)行的 Kubernetes 集群。如果您還沒有運(yùn)行這樣的集群,請(qǐng)使用 eksctl 以通過一個(gè)命令啟動(dòng)并運(yùn)行 EKS 集群。
          2. Kubernetes 集群中至少需要有 8GB 可用內(nèi)存和 2 個(gè) vCPU 以支持 Spinnaker 微服務(wù)。一個(gè) m5.large 實(shí)例應(yīng)該足夠滿足此要求。
          3. 已在您的計(jì)算機(jī)上安裝、配置和運(yùn)行 kubectl。
          4. 已安裝 Helm。如要安裝,請(qǐng)遵循 Kubernetes Helm 說明。
          5. 已安裝 Jenkins。如要安裝,請(qǐng)遵循 AWS 上的 Jenkins 文檔中的說明。
          6. 已為 Jenkins 安裝 Docker 和 Amazon ECR 插件并且正確配置。
          7. 一個(gè) Docker 注冊(cè)表賬戶。如果您還沒有這樣的賬戶,您可以使用 Amazon ECR,因?yàn)槲覀冊(cè)诒静┪闹幸矊⑦@樣做。您還可以使用 Docker Hub。
          8. 一個(gè)身份提供商 (LDAP/SAML/Oauth2)。在本博文中,我們將使用 Active Directory (LDAP) 身份認(rèn)證機(jī)制。如果您還沒有身份提供商,請(qǐng)遵循 AWS 托管 Microsoft AD 文檔中的說明。

          步驟

          當(dāng)所有的先決條件都具備后,您就可以開始設(shè)置管道的實(shí)際步驟。我們將詳細(xì)講解每個(gè)步驟,下面概括了我們將要執(zhí)行的步驟:

          1. 構(gòu)建一個(gè)示例應(yīng)用程序:Hello world 示例微服務(wù)。
          2. 使用 Helm 在 EKS 上安裝 Spinnaker。
            1. 設(shè)置 LDAP/AD 身份驗(yàn)證。
          3. 通過設(shè)置入站控制器來暴露 Spinnaker。
          4. 將一個(gè) GitHub 賬戶添加到 Spinnaker。
          5. 在您的 AWS 賬戶中配置 Amazon ECR,以便存儲(chǔ) Jenkins 推送的 Docker 映像。
          6. 為 Docker 映像編譯和 ECR 推送配置 Jenkins。
          7. 在 Spinnaker 中構(gòu)建 CI/CD 管道 — 使用來自 GitHub 的 Web-hook 自動(dòng)化編譯,手動(dòng)批準(zhǔn)生產(chǎn)環(huán)境部署。
          8. 運(yùn)行管道并部署應(yīng)用程序。
          9. 測(cè)試。
          10. 清除。

          第 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)。

          1. Deck — 這是用于提供基于瀏覽器的 UI 的 Spinnaker 前端組件。
          2. Gate — 此服務(wù)提供了 Spinnaker REST API,負(fù)責(zé)服務(wù)腳本處理客戶端以及來自 Deck 的所有操作。
          3. 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è)置管道的必要步驟:

          1. 創(chuàng)建應(yīng)用
          2. 創(chuàng)建管道
          3. 設(shè)置配置
            1. Helm 模板 — sample-microservice-0.1.0.tgz
            2. Helm 開發(fā)環(huán)境覆蓋 — values/dev.yaml
            3. Helm 生產(chǎn)環(huán)境覆蓋 — values/dev.yaml
            4. Docker 映像 — 123456789123.dkr.ecr.us-west-2.amazonaws.com/sample-microservice
            5. 設(shè)置構(gòu)件
            6. 設(shè)置管道觸發(fā)器
          4. 創(chuàng)建階段
            1. Bake 開發(fā)
            2. Bake 生產(chǎn)
            3. 部署到開發(fā)
            4. 人工判斷
            5. 部署到生產(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è)試。您將一次看到以下事件:

          1. Jenkins 編譯被觸發(fā)。
          2. 新的 Docker 映像被發(fā)布到 Amazon ECR。
          3. 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ù)圈






          瀏覽 105
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  熟女人妻一区二区三区免费看 | www.夜夜撸 | 天天综合永久入口 | 欧美a片一区二区三区 | WWW.精品天堂网一区二区三区 |