在 Amazon S3 中使用 Amazon EKS 和 Helm Chart 儲存庫部署 Kubernetes 資源和套件 - AWS 方案指引

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

在 Amazon S3 中使用 Amazon EKS 和 Helm Chart 儲存庫部署 Kubernetes 資源和套件

由 Sagar Panigrahi (AWS) 建立

Summary

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

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

先決條件和限制

先決條件

  • 具有虛擬私有雲端 (VPC) 的作用中 Amazon Web Services (AWS) 帳戶

  • Amazon EKS 叢集 

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

  • Kubectl 用於設定用戶端機器中目標叢集的 Amazon EKS kubeconfig 檔案

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

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

  • 原始程式碼管理和 CI/CD 管道

限制

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

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

產品版本

  • Helm 3.6.3 版

架構

目標技術堆疊

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • 原始程式碼管理

  • Helm

  • Kubectl

目標架構

用戶端 Helm 和 Kubectl 在 Amazon S3 中為 Amazon EKS 叢集部署 Helm Chart 儲存庫。

自動化和擴展

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

  • Helm 要併入您現有的 CI/CD 自動化工具,以自動化 Helm Chart 的封裝和版本控制 (此模式的範圍外)。

  • GitVersion 或 Jenkins 建置號碼可用來自動化圖表的版本控制。

工具

工具

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

  • Helm – 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 安裝。

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

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

建立 NGINX 的 Helm Chart。

若要在用戶端電腦上建立名為 my-nginx的 Helm Chart,請執行 helm create my-nginx

DevOps 工程師

檢閱圖表的結構。

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

DevOps 工程師

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

在 的 serviceAccount區段values.yaml下,將create金鑰設定為 false。這是關閉的,因為不需要為此模式建立服務帳戶。

DevOps 工程師

驗證 (lint) 修改後的圖表是否有語法錯誤。

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

DevOps 工程師

安裝圖表以部署 Kubernetes 資源。

若要執行 Helm Chart 安裝,請使用下列命令。 

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

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

DevOps 工程師

檢閱 Amazon EKS 叢集中的資源。

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

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

修改和升級版本。

若要修改圖表,請在 中將replicaCountvalues.yaml變更為 2。然後執行下列命令來升級已安裝的版本。

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

檢閱 Helm 版本的歷史記錄。

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

helm history my-nginx-release
DevOps 工程師

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

在切換或轉返到工作版本之前,以及安裝修訂之前的額外驗證層,請使用下列命令檢視傳遞到每個修訂的值。

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

回復至先前的版本。

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

helm rollback my-nginx-release 1

此範例會轉返至修訂編號 1。

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

建立 Helm Chart 的 S3 儲存貯體。

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

雲端管理員

安裝適用於 Amazon S3 的 Helm 外掛程式。

若要在用戶端機器上安裝 helm-s3 外掛程式,請使用下列命令。 

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

注意:Helm V3 支援適用於外掛程式 0.9.0 版及更新版本。

DevOps 工程師

初始化 Amazon S3 Helm 儲存庫。

若要將目標資料夾初始化為 Helm 儲存庫,請使用下列命令。 

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

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

DevOps 工程師

將 Amazon S3 儲存庫新增至 Helm。

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

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 Helm 儲存庫中。

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

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

搜尋 Helm Chart。

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

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

修改和封裝圖表。

在 中values.yaml,將 replicaCount值設定為 1。然後執行 封裝圖表helm package ./my-nginx/,這次將 中的版本變更為 Chart.yaml 0.1.1。 

在 CI/CD 管道中使用 GitVersion 或 Jenkins 建置號碼等工具,最好透過自動化更新版本控制。自動化版本編號超出此模式的範圍。

DevOps 工程師

將新版本推送至 Amazon S3 中的 Helm 儲存庫。

若要將 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 Helm 儲存庫安裝圖表。

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

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

相關資源

附件

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