选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用亚马逊和亚马逊 S3 中的 Helm 图表存储库部署 Kubernetes 资源EKS和软件包 - AWS Prescriptive Guidance

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

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

使用亚马逊和亚马逊 S3 中的 Helm 图表存储库部署 Kubernetes 资源EKS和软件包

由 Sagar Panigrahi 创作 () AWS

摘要

此模式可帮助您高效管理 Kubernetes 应用程序,无论复杂性如何。此模式将 Helm 集成至现有持续集成和持续交付 (CI/CD) 管道,以便将应用程序部署至 Kubernetes 集群。Helm 是 Kubernetes 软件包管理器,可以帮助您管理 Kubernetes 应用程序。Helm 图表可用于定义、安装和升级复杂的 Kubernetes 应用程序。图表可以版本控制并存储在 Helm 存储库中,这样可以缩短中断期间恢复 (MTTR) 的平均时间。 

这种模式在 Kubernetes 集群中使用亚马逊 Elastic Kubernetes Servic EKS e(亚马逊)。其使用 Amazon Simple Storage Service (Amazon S3) 作为 Helm 图表存储库,如此整个组织的开发人员即可集中管理和访问此类图表。

先决条件和限制

先决条件

  • 具有虚拟私有云的活跃亚马逊 Web Services (AWS) 账户 (VPC)

  • Amazon EKS 集群 

  • 在 Amazon EKS 集群中设置并准备好处理工作负载的工作节点

  • Kubectl 用于在客户端计算机上为目标集群配置 Amazon EKS kubeconfig 文件

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

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

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

限制

  • 目前不支持升级、删除或管理自定义资源定义 (CRDs)。

  • 如果您使用的是引用 a 的资源CRD,则CRD必须单独安装(在图表之外)。

产品版本

  • Helm v3.6.3

架构

目标技术堆栈

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • 源代码管理

  • Helm

  • Kubectl

目标架构

客户端 Helm 和 Kubectl 在适用于亚马逊集群的 Amazon S3 中部署了 Helm 图表存储库。EKS

自动化和扩缩

  • AWS CloudFormation 可用于自动创建基础架构。有关更多信息,请参阅亚马逊EKS文档AWS CloudFormation中的使用创建亚马逊EKS资源

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

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

工具

工具

  • 亚马逊 EKS — 亚马逊 Elastic Kubernetes Servic EKS e(亚马逊)是一项托管服务,无需站起来或维护自己的 AWS Kubernetes 控制平面,即可在上面运行 Kubernetes。Kubernetes 是一个用于实现容器化应用程序的部署、扩缩和管理自动化的开源系统。

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

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

  • Kubectl – Kubectl 是针对 Kubernetes 集群运行命令的命令行实用程序。

代码

示例代码附后。

操作说明

任务描述所需技能

安装 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 工程师

配置并初始化 Helm

任务描述所需技能

安装 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。

若要在客户端计算机上创建名为 my-nginx 的 Helm 图表,请运行 helm create my-nginx

DevOps 工程师

查看图表结构。

若要查看图表的结构,请运行树命令 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 工程师

在 Amazon EKS 集群中创建并安装 Helm 图表

任务描述所需技能

为创建头盔图表NGINX。

若要在客户端计算机上创建名为 my-nginx 的 Helm 图表,请运行 helm create my-nginx

DevOps 工程师

查看图表结构。

若要查看图表的结构,请运行树命令 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 安装的特定版本的所有修订版本,请运行以下命令。 

helm history my-nginx-release
DevOps 工程师

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

在切换或回滚至工作版本前以及在安装修订版前进行额外验证前,请使用以下命令查看已传递至每个修订版本的值。

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

回滚至先前版本。

若要回滚至以前的修订版,请使用以下命令。 

helm rollback my-nginx-release 1

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

DevOps 工程师

回滚至 Kubernetes 应用程序的先前版本

任务描述所需技能

修改并升级版本。

若要修改图表,请在 values.yaml 中将 replicaCount 值更改为 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 图表创建 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

请注意:提供使用插件版本 0.9.0 及更高版本的 Helm V3 支持。

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 工程师

将 S3 存储桶初始化为 Helm 存储库

任务描述所需技能

为 Helm 图表创建 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

请注意:提供使用插件版本 0.9.0 及更高版本的 Helm V3 支持。

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 图表。

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

helm search repo my-nginx
DevOps 工程师

在 Amazon S3 Helm 存储库中打包和存储图表

任务描述所需技能

打包图表。

若要打包您创建的 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 图表。

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

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

修改并打包图表。

values.yaml 中,将 replicaCount 的值设为 1。然后通过运行 helm package ./my-nginx/ 来打包图表,这次是将版本 Chart.yaml 更改为 0.1.1。 

最好使用诸如 CI/CD 管道中的 Jenkins 内部版本号 GitVersion 之类的工具通过自动化更新版本控制。自动生成的版本号超出了这种模式范围。

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 工程师

修改、版本化和打包图表

任务描述所需技能

修改并打包图表。

values.yaml 中,将 replicaCount 的值设为 1。然后通过运行 helm package ./my-nginx/ 来打包图表,这次是将版本 Chart.yaml 更改为 0.1.1。 

最好使用诸如 CI/CD 管道中的 Jenkins 内部版本号 GitVersion 之类的工具通过自动化更新版本控制。自动生成的版本号超出了这种模式范围。

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 工程师

从 Amazon S3 Helm 存储库中搜索并安装图表

任务描述所需技能

搜索 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

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。