藍綠部署是一個部署模型,使用在 Kubernetes 叢集中以相同方式部署和設定的兩個 Docker 主機。當 Code Stream 中的管線部署應用程式時,藍綠部署模型可縮短環境中出現的停機時間。

部署模型中的藍綠部署執行個體都有不同的用途。一次只能有一個執行個體接受部署應用程式的即時流量,並且每個執行個體都在特定時間接受該流量。藍部署執行個體接收應用程式的第一個版本,而綠部署執行個體接收第二個。

藍綠部署環境中的負載平衡器會確定即時流量在部署應用程式時採用哪一個路由。透過使用藍綠部署模型,您的環境仍可正常運作,使用者不會注意到任何停機時間,並且管線會持續將應用程式整合和部署至生產環境。

Code Stream 中建立的管線代表包含兩個階段的藍綠部署模型。一個階段適用於開發,而另一個階段適用於生產。

Code Stream 管線工作區支援使用 Docker 和 Kubernetes 執行持續整合工作和自訂工作。

如需設定工作區的相關資訊,請參閱設定管線工作區

表 1. 藍綠部署的開發階段工作
工作類型 工作
Kubernetes 為藍綠部署建立命名空間。
Kubernetes 為 Docker Hub 建立秘密金鑰。
Kubernetes 建立用來部署應用程式的服務。
Kubernetes 建立藍部署。
輪詢 驗證藍部署。
Kubernetes 移除命名空間。
表 2. 藍綠部署的生產階段工作
工作類型 工作
Kubernetes 綠部署會從藍部署取得服務詳細資料。
Kubernetes 取得綠部署複本集的詳細資料。
Kubernetes 建立綠部署,並使用秘密金鑰提取容器映像。
Kubernetes 更新服務。
輪詢 確認生產 URL 上的部署已成功。
Kubernetes 完成藍部署。
Kubernetes 移除藍部署。

若要在您自己的藍綠部署模型中部署應用程式,您可以在 Code Stream 中建立包含兩個階段的管線。第一個階段包括將應用程式部署至藍部署執行個體的藍部署工作,而第二個階段包括將應用程式部署至綠部署執行個體的綠部署工作。

您可以使用 CICD 智慧管線範本來建立您的管線。此範本可以為您建立管線階段和工作,並包含部署選取項目。

如果您手動建立管線,則必須規劃管線階段。如需範例,請參閱手動新增工作前在 Code Stream 中規劃 CICD 原生建置

在此範例中,您可以使用 CICD 智慧管線範本建立藍綠部署管線。

必要條件

  • 確認您可以存取 AWS 上正在運作的 Kubernetes 叢集。
  • 確認您已設定藍綠部署環境,並將藍綠部署執行個體設定為完全相同。
  • Code Stream 中建立 Kubernetes 端點,將應用程式映像部署到 AWS 上的 Kubernetes 叢集中。
  • 自行熟悉使用 CICD 智慧管線範本。請參閱使用智慧管線範本前在 Code Stream 中規劃 CICD 原生建置

程序

  1. 按一下管線 > 新增管線 > 智慧範本 > CI/CD 範本
  2. 輸入 CICD 智慧管線範本的 CI 部分資訊,然後按下一步
  3. 完成智慧管線範本的 CD 部分
    1. 選取應用程式部署的環境。例如,開發生產
    2. 選取管線將用於部署的服務。
    3. 在 [部署] 區域中,選取用於開發環境和生產環境的叢集端點。
    4. 針對生產部署模型,選取 藍綠部署,然後按一下建立

    在智慧管線範本中,選取服務、部署,然後針對生產部署模型按一下 [藍綠部署]。

結果

恭喜您!您可以使用智慧管線範本來建立管線,該管線可將應用程式部署至 AWS 上 Kubernetes 生產叢集中的藍綠部署執行個體。

範例: 針對部分藍綠部署工作的範例 YAML 程式碼

在 Kubernetes 管線工作中出現的用於藍綠部署的 YAML 程式碼可能類似於下列建立命名空間、服務及部署的範例。如果需要從專有存放庫下載映像,YAML 檔案必須包含具有 Docker 組態密碼的區段。請參閱使用智慧管線範本前在 Code Stream 中規劃 CICD 原生建置的 CD 部分。

智慧管線範本建立管線後,您可以視需要針對您自己的部署修改工作。

用於建立範例命名空間的 YAML 程式碼:

apiVersion: v1
kind: Namespace
metadata:
  name: codestream-82855
  namespace: codestream-82855

用於建立範例服務的 YAML 程式碼:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  ports:
  - port: 80
  selector:
    app: codestream-demo
    tier: frontend
  type: LoadBalancer

用於建立範例部署的 YAML 程式碼:

apiVersion: extensions/v1
kind: Deployment
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  replicas: 1
  selector:
    matchLabels:
      app: codestream-demo
      tier: frontend
  template:
    metadata:
      labels:
        app: codestream-demo
        tier: frontend
    spec:
      containers:
      - image: ${input.image}:${input.tag}
        name: codestream-demo
        ports:
        - containerPort: 80
          name: codestream-demo
      imagePullSecrets:
      - name: jfrog-2
      minReadySeconds: 0

下一步

若要進一步瞭解如何使用 Code Stream,請參閱使用 Code Stream 的教學課程

若要復原部署,請參閱如何在 Code Stream 中復原我的部署

如需其他參考,請參閱供 Code Stream 管理員和開發人員使用的更多資源