使用 Amazon EKS 和 Amazon S3 中的 Helm 圖表儲存庫部署 Kubernetes 資源和套件 - AWS Prescriptive Guidance

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

使用 Amazon EKS 和 Amazon S3 中的 Helm 圖表儲存庫部署 Kubernetes 資源和套件

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

PoC 或試驗

技術:容器與微服務;DevOps

AWS 服務:Amazon EKS

Summary

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

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

先決條件和限制

先決條件

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

  • Amazon EKS 叢集 

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

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

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

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

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

限制

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

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

產品版本

  • 頭盔 v3.6.3

Architecture

目標技術堆疊

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • 來源碼管理

  • 金屬頭盔

  • 庫貝特

目標架構

自動化和擴充

  • AWS CloudFormation 可用來自動建立基礎設施。一種選擇是使用模組化和可擴展的 Amazon EKS 架構快速入門

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

  • GitVersion 或詹金斯構建號可以用來自動化圖表的版本。

Tools

工具

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

  • 金屬頭盔— Helm 是 Kubernetes 的套件管理工具,可協助您在 Kubernetes 叢集上安裝和管理應用程式。

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

  • 庫貝特— Kubectl 是一項命令列公用程式,用於對 Kubernetes 叢集執行命令。

Code

附加範例程式碼。

Epics

任務描述所需技能
安裝 Helm 用戶端。

若要在本機系統上下載並安裝 Helm 用戶端,請使用下列指令。 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
裝置工程師
驗證頭盔安裝。

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

裝置工程師
任務描述所需技能
為 NGINX 創建一個頭盔圖表。

若要建立名為my-nginx,請在用戶端機器上執行helm create my-nginx

裝置工程師
檢閱圖表的結構。

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

裝置工程師
停用圖表中的服務帳戶建立。

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

裝置工程師
驗證(lint)修改後的圖表是否有語法錯誤。

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

裝置工程師
安裝圖表以部署 Kubernetes 資源。

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

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

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

裝置工程師
檢閱 Amazon EKS 叢集中的資源。

若要檢閱在 Helm 圖表中所建立的資源,請參閱helm-space命名空間中,請使用下列命令。 

kubectl get all -n helm-space
裝置工程師
任務描述所需技能
修改並升級版本。

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

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
裝置工程師
查看頭盔版本的歷史記錄。

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

helm history my-nginx-release
裝置工程師
檢閱特定修訂版本的詳細資訊。

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

helm get --revision=2 my-nginx-release
裝置工程師
轉返到先前的版本。

若要轉返到先前的修訂,請使用下列命令。 

helm rollback my-nginx-release 1

這個例子是回滾到修訂號碼 1。

裝置工程師
任務描述所需技能
為 Helm 圖表中的 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 及以上版本可用。

裝置工程師
初始化 Amazon S3 頭盔存儲庫。

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

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

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

裝置工程師
將 Amazon S3 儲存庫新增到 Helm。

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

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

此命令會將別名新增至 Helm 用戶端機器中的目標儲存庫。

裝置工程師
檢閱儲存庫清單。

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

裝置工程師
任務描述所需技能
封裝圖表。

若要封裝my-nginx圖表,執行helm package ./my-nginx/。命令會封裝所有的內容my-nginx圖表資料夾複製到封存檔案中,其名稱是使用Chart.yamlfile.

裝置工程師
將軟件包存儲在 Amazon S3 頭盔存儲庫中。

若要將套件上傳到 Amazon S3 中的 Helm 存放庫,請使用.tgzfile.

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
裝置工程師
搜尋頭盔圖表。

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

helm search repo my-nginx
裝置工程師
任務描述所需技能
修改並封裝圖表。

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

版本控制是通過使用 GITVersion 或 Jenkins 在 CI/CD 管道中的工具自動化進行理想的更新。自動化版本號碼已超出此樣式的範圍。

裝置工程師
將新版本推送到 Amazon S3 中的頭盔存儲庫。

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

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
裝置工程師
任務描述所需技能
搜索我的 nginx 圖表的所有版本。

若要檢視圖表的所有可用版本,請使用--versions旗標。

helm search repo my-nginx --versions

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

裝置工程師
從 Amazon S3 頭盔存儲庫安裝圖表。

上一個工作的搜尋結果會顯示多個版本的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
裝置工程師

相關資源

Attachments

attachment.zip