在 Amazon S3 中设置 Helm v3 图表存储库 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon S3 中设置 Helm v3 图表存储库

由 Abhishek Sharma 创作 () AWS

环境:PoC 或试点

技术: DevOps;容器和微服务;现代化

工作负载:所有其他工作负载

AWS服务:亚马逊 S3

Summary

这种模式通过将 Helm v3 存储库集成到亚马逊网络服务 () 云上的亚马逊简单存储服务 (Amazon S3) 中,帮助您高效地管理 Helm v3 图表。AWS要使用此模式,您必须熟悉 Kubernetes 和 Helm(Kubernetes 包管理器)。使用 Helm 存储库存储图表和控制图版本可以缩短中断期间的平均恢复 (MTTR) 时间。 

这种模式AWS CodeCommit 用于创建 Helm 存储库,它使用 S3 存储桶作为 Helm 图表存储库,这样整个组织的开发人员就可以集中管理和访问图表。

先决条件和限制

先决条件

  • 一个活跃的AWS账户

  • Python 版本 2.7.12 或更高版本

  • pip

  • 带有子网和亚马逊弹性计算云 (AmazonVPC) 实例的虚拟私有云 (EC2) 

  • Git 安装在EC2实例上

  • AWS创建 S3 存储桶的 Identity and Access Management (IAM) 访问权限

  • IAM(以编程方式或角色)从客户端计算机访问 Amazon S3

  • AWS CodeCommit 存储库

  • AWS命令行界面 (AWSCLI)

产品版本

  • Helm v3

  • Python 版本 2.7.12 或更高版本

架构

目标技术堆栈

  • Amazon S3

  • AWS CodeCommit

  • Helm

  • Kubectl

  • Python 和 pip

  • Git

  • helm-3 插件

目标架构

EC2例如 CodeCommit,Helm 存储库中有 Helm、Git 和 helm-s3,亚马逊 S3 中的 Helm 图表。

自动化和扩缩

  • 您可将 Helm 整合到现有的持续集成/持续交付 (CI/CD) 自动化工具中,以自动执行 Helm 图表的打包和版本控制(超出此模式的范围)。

  • GitVersion 或者 Jenkins 内部版本号可用于自动控制图表的版本。

工具

  • Helm – Helm 是 Kubernetes 的软件包管理器,可帮助您在 Kubernetes 集群上安装和管理应用程序。

  • Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一项面向互联网的存储服务。您可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据。

  • helm-s3 插件 – helm-s3 插件支持与 Amazon S3 的交互。它可与 Helm v2 或 Helm v3 一起使用。

操作说明

任务描述所需技能

安装 Helm v3 客户端。

要在本地系统上下载并安装 Helm 客户端,请运行以下命令:sudo curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

云管理员、 DevOps 工程师

验证 Helm 安装。

要验证 Helm 客户端,请运行以下命令:helm version --short

云管理员、 DevOps 工程师
任务描述所需技能

为 Helm 图表创建 S3 存储桶。

创建唯一 S3 存储桶。在存储桶中,创建一个名为 stable/myapp 的文件夹。此模式中的示例使用 s3://my-helm-charts/stable/myapp 作为目标图表存储库。

云管理员、 DevOps 工程师

安装适用于 Amazon S3 的 helm-s3 插件。

要在客户端计算机上安装 helm-s3 插件,请运行以下命令:helm plugin install https://github.com/hypnoglow/helm-s3.git

云管理员、 DevOps 工程师

初始化 Amazon S3 Helm 存储库。

要将目标文件夹初始化为 Helm 存储库,请使用以下命令:helm s3 init s3://my-helm-charts/stable/myapp 

该命令在目标系统中创建 index.yaml 文件,用于跟踪存储在该位置的所有图表信息。

云管理员、 DevOps 工程师

验证新创建的 Helm 存储库。

要验证 index.yaml 文件是否已创建,请运行以下命令:aws s3 ls s3://my-helm-charts/stable/myapp/

云管理员、 DevOps 工程师

将 Amazon S3 存储库添加至客户端计算机的 Helm 中。

要向 Helm 客户端计算机中添加目标存储库别名,请使用以下命令:helm repo add stable-myapp s3://my-helm-charts/stable/myapp/

云管理员、 DevOps 工程师
任务描述所需技能

克隆您的 Helm 图表。

如果您的 CodeCommit 存储库中没有本地 Helm 图表,请运行以下命令从存储 GitHub 库中克隆它们:git clone <url_of_your_helm_source_code>.git

云管理员、 DevOps 工程师

打包本地 Helm 图表。

要打包您创建或克隆的图表,请使用以下命令:helm package ./my-app 

例如,此模式使用 my-app 图表。该命令将 my-app 图表文件夹的所有内容打包成存档文件,该文件使用 Chart.yaml 文件中提到的版本号命名。

云管理员、 DevOps 工程师

将本地数据包存储在 Amazon S3 Helm 存储库中。

要将本地数据包上传至 Amazon S3 中的 Helm 存储库,请运行以下命令:helm s3 push ./my-app-0.1.0.tgz stable-myapp

在该命令中,my-app 是您的图表文件夹名称,0.1.0Chart.yaml 中提及的图表版本,stable-myapp 是目标存储库别名。

云管理员、 DevOps 工程师

搜索 Helm 图表。

要确认图表同时出现在本地和 Amazon S3 Helm 存储库中,请运行以下命令:helm search repo stable-myapp

云管理员、 DevOps 工程师
任务描述所需技能

修改和打包图表。

values.yaml 中,将 replicaCount 值设置为 1,然后打包图表,这次将 Chart.yaml 中的版本更改为 0.1.1。理想情况下,版本控制是通过在 CI/CD 管道中使用诸如 GitVersion 或 Jenkins 内部版本号之类的工具通过自动化来实现的。自动生成的版本号超出了这种模式范围。要打包图表,请运行以下命令:helm package ./my-app/

云管理员、 DevOps 工程师

将新版本推送至 Amazon S3 中的 Helm 存储库。

要将新软件包(0.1.1 版)推送到 Amazon S3 中的 my-helm-chartsHelm 存储库,请运行以下命令:helm s3 push ./my-app-0.1.1.tgz stable-myapp

云管理员、 DevOps 工程师

验证更新的 Helm 图表。

要确认更新后的图表同时出现在本地和 Amazon S3 Helm 存储库中,请运行以下命令。

helm repo update

helm search repo stable-myapp

云管理员、 DevOps 工程师
任务描述所需技能

搜索 my-app 图表的所有版本。

要查看图表的所有可用版本,请使用 --versions 标志运行以下命令:helm search repo my-app --versions 

如果没有标志,Helm 默认会显示图表的最新上传版本。

DevOps 工程师

从 Amazon S3 Helm 存储库安装图表。

自动安装超出了此模式的范围,但您可手动安装。上一个任务的搜索结果显示了 my-app 图表的多个版本。要从 Amazon S3 Helm 存储库安装新版本 (0.1.1),请使用以下命令:helm upgrade --install my-app-release stable-myapp/my-app --version 0.1.1 --namespace dev

DevOps 工程师
任务描述所需技能

查看特定修订版的详细信息。

自动回滚超出了此模式的范围,但您可手动回滚到较早的版本。在切换或回滚至工作版本前,以及要在安装修订版之前进行额外验证,请使用以下命令查看已传递至每个修订版的值:helm get values --revision=2 my-app-release

DevOps 工程师

回滚至以前的版本。

自动回滚超出了此模式范围。要手动回滚至以前的修订版,请使用以下命令:helm rollback my-app-release 1 

此示例正在回滚至修订版号 1。

DevOps 工程师

相关资源