使用 Amazon EKS 和 Amazon S3 中的頭盔圖儲存庫來部署 Kubernetes 資源和套件 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon EKS 和 Amazon S3 中的頭盔圖儲存庫來部署 Kubernetes 資源和套件

由薩加爾·帕尼格拉希(AWS)創建

環境:PoC 或試點

技術:容器和微服務; DevOps

AWS 服務:Amazon EKS

Summary

此模式可協助您有效管理 Kubernetes 應用程式,無論其複雜性為何。該模式將 Helm 整合到您現有的持續整合和持續交付 (CI/CD) 管道中,以便將應用程式部署到 Kubernetes 叢集中。掌舵是一個 Kubernetes 軟件包管理器,可幫助您管理 Kubernetes 應用程序。掌舵圖有助於定義、安裝和升級複雜的 Kubernetes 應用程式。圖表可以版本化並存儲在 Helm 存儲庫中,這可以改善中斷期間的平均還原時間(MTTR)。 

此模式將 Amazon Elastic Kubernetes Service (Amazon EKS) 用於 Kubernetes 叢集。它使用 Amazon Simple Storage Service (Amazon S3) 做為 Helm 圖儲存庫,因此整個組織的開發人員都可以集中管理和存取圖表。

先決條件和限制

先決條件

  • 具有虛擬私有雲 (VPC) 的有效亞馬遜網路服務 (AWS) 帳戶

  • Amazon EKS 集群 

  • 在 Amazon EKS 叢集中設定工作者節點並準備好執行工作負載

  • 用於為用戶端機器中的目標叢集設定 Amazon EKS 庫貝設定檔案

  • 用於建立 S3 儲存貯體的 AWS Identity and Access Management (IAM) 存取權

  • 從用戶端機器存取 Amazon S3 的 IAM (程式設計或角色)

  • 源代碼管理和 CI/CD 管道

限制

  • 目前不支援升級、刪除或管理自訂資源定義 (CRD)。

  • 如果您使用參照 CRD 的資源,則必須單獨安裝 CRD(在圖表之外)。

產品版本

  • 頭盔

架構

目標技術堆疊

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • 源代碼管理

  • Helm

  • 庫貝克特爾

目標架構

客戶頭盔和 Kubectl 在 Amazon S3 中為 Amazon EKS 集群部署頭盔圖存儲庫。

自動化和規模

  • AWS CloudFormation 可用於自動化基礎設施的建立。如需詳細資訊,請參閱 Amazon EKS 文件 CloudFormation中的使用 AWS 建立 Amazon EKS 資源

  • Helm 將被納入您現有的 CI/CD 自動化工具中,以自動化 Helm 圖表的包裝和版本控制(超出此模式的範圍)。

  • GitVersion 或者 Jenkins 內建編號可用於自動化圖表的版本控制。

工具

工具

  • Amazon EKS — Amazon Elastic Kubernetes Service (Amazon EKS) 是一項受管服務,可在 AWS 上執行 Kubernetes,而不需要站立或維護自己的 Kubernetes 控制平面。Kubernetes 是一套開放原始碼系統,用於容器化應用程式的自動化部署、擴展與管理。

  • 掌舵 — Helm 是 Kubernetes 的套件管理員,可協助您在 Kubernetes 叢集上安裝及管理應用程式。

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) 是互聯網的存儲。您可以使用 Amazon S3 隨時從 Web 任何地方存放和擷取任意資料量。

  • Kubectl — Kubectl 是一個命令列公用程式,可針對 Kubernetes 叢集執行命令。

Code

範例程式碼已附加。

史诗

任務描述所需技能

安裝 Helm 客戶端。

要在本地系統上下載並安裝 Helm 客戶端,請使用以下命令。 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
DevOps 工程師

驗證頭盔的安裝。

若要驗證 Helm 是否能夠與 Amazon EKS 叢集內的 Kubernetes API 伺服器通訊,請執行。helm version

DevOps 工程師
任務描述所需技能

為 NGINX 創建一個頭盔圖表。

要創建在客戶端機器my-nginx上命名的頭盔圖,請運行helm create my-nginx

DevOps 工程師

檢閱圖表的結構。

若要檢閱圖表的結構,請執行 tree 指令tree my-nginx/

DevOps 工程師

停用圖表中的服務帳戶建立。

values.yamlserviceAccount段下方,將create金鑰設定為false。此功能已關閉,因為不需要為此模式建立服務帳戶。

DevOps 工程師

驗證 (lint) 修改過的圖表是否存在語法錯誤。

若要在目標叢集中安裝之前驗證圖表是否有任何語法錯誤,請執行helm lint my-nginx/

DevOps 工程師

安裝圖表以部署 Kubernetes 資源。

要運行 Helm 圖安裝,請使用以下命令。 

helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space

選用debug旗標會在安裝期間輸出所有除錯訊息。該namespace標誌指定將在其中創建此圖表的資源部分的命名空間。

DevOps 工程師

檢閱 Amazon EKS 叢集中的資源。

若要檢閱作為命helm-space名空間中 Helm 圖表一部分建立的資源,請使用下列命令。 

kubectl get all -n helm-space
DevOps 工程師
任務描述所需技能

修改並升級發行版本。

若要修改圖表,請在中values.yaml,將replicaCount值變更為2。然後通過運行以下命令升級已安裝的版本。

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
DevOps 工程師

查看頭盔版本的歷史記錄。

若要列出已使用 Helm 安裝之特定版本的所有修訂版本,請執行下列命令。 

helm history my-nginx-release
DevOps 工程師

檢閱特定修訂的詳細資訊。

在切換或復原至工作中版本之前,以及在安裝修訂版之前進行額外的驗證層,請使用下列指令檢視哪些值已傳遞給每個修訂版本。

helm get --revision=2 my-nginx-release
DevOps 工程師

回滾到以前的版本。

若要復原至先前的修訂版,請使用下列指令。 

helm rollback my-nginx-release 1

此範例將復原至修訂編號 1。

DevOps 工程師
任務描述所需技能

為舵圖表創建 S3 存儲桶。

建立唯一的 S3 儲存貯體。在值區中,建立名為的資料夾charts。此模式中的範例使用s3://my-helm-charts/charts作為目標圖表儲存庫。

雲端管理員

安裝 Amazon S3 的頭盔插件。

要在客戶端計算機上安裝 helm-s3 插件,請使用以下命令。 

helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

注:頭盔 V3 支持可與插件版本 0.9.0 及以上。

DevOps 工程師

初始化 Amazon S3 掌舵存儲庫。

要將目標文件夾初始化為 Helm 存儲庫,請使用以下命令。 

helm S3 init s3://my-helm-charts/charts

命令會在目標中建立index.yaml檔案,以追蹤儲存在該位置的所有圖表資訊。

DevOps 工程師

將 Amazon S3 存儲庫添加到掌舵。

若要在用戶端機器中新增存放庫,請使用下列命令。

helm repo add my-helm-charts s3://my-helm-charts/charts

此命令將別名添加到 Helm 客戶端機器中的目標存儲庫。

DevOps 工程師

檢閱儲存庫清單。

若要檢視 Helm 用戶端機器中的存放庫清單,請執行helm repo list

DevOps 工程師
任務描述所需技能

封裝圖表。

若要封裝您建立的my-nginx圖表,請執行helm package ./my-nginx/。此命令會將my-nginx圖表資料夾的所有內容封裝到封存檔案中,該檔案會使用檔Chart.yaml案中提到的版本號碼來命名。

DevOps 工程師

將套件存放在 Amazon S3 掌舵儲存庫中。

若要將套件上傳到 Amazon S3 中的 Helm 儲存庫,請使用.tgz檔案的正確名稱執行下列命令。

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
DevOps 工程師

搜尋「頭盔」圖表。

若要確認圖表同時出現在本機和 Amazon S3 的 Helm 儲存庫中,請執行下列命令。

helm search repo my-nginx
DevOps 工程師
任務描述所需技能

修改並封裝圖表。

在中values.yaml,將replicaCount值設定為1。然後通過運行來打包圖表helm package ./my-nginx/,這次將版本更改Chart.yaml0.1.1。 

版本控制最理想地通過使用 CI/CD 管道中的工具(例如 GitVersion Jenkins 構建編號)進行自動化更新。自動化版本號超出此模式的範圍。

DevOps 工程師

將新版本推送到 Amazon S3 中的頭盔存儲庫。

若要將版本為 0.1.1 的新套件推送至 Amazon S3 中的 my-helm-charts Helm 儲存庫,請執行下列命令。

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
DevOps 工程師
任務描述所需技能

搜索所有版本的 my-nginx 圖表。

若要檢視圖表的所有可用版本,請使用--versions旗標執行下列命令。

helm search repo my-nginx --versions

如果沒有旗標,Helm 預設會顯示圖表的最新上傳版本。

DevOps 工程師

從 Amazon S3 掌舵存儲庫安裝圖表。

先前工作的搜尋結果會顯示my-nginx圖表的多個版本。若要從 Amazon S3 掌舵儲存庫安裝新版本 (0.1.1),請使用以下命令。

helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space
DevOps 工程師

相關資源

附件

若要存取與此文件相關聯的其他內容,請解壓縮下列檔案:attachment.zip