将 Helm 图表存储在 Artifact Registry 中

Helm 是 Kubernetes 的软件包管理器。它使用图表来定义一组要部署的 Kubernetes 资源。

本快速入门向您展示了如何执行以下操作:

  • 在 Artifact Registry 中创建私有代码库
  • 创建示例图表
  • 向代码库进行身份验证
  • 将图表推送到代码库
  • 部署图表

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Artifact Registry, Google Kubernetes Engine API。

    启用 API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Artifact Registry, Google Kubernetes Engine API。

    启用 API

选择 shell

如需完成本快速入门,请使用 Cloud Shell 或本地 shell。

Cloud Shell
Cloud Shell 是一种 shell 环境,用于管理托管在 Google Cloud 上的资源。它预装了 Docker、Helm 和 Google Cloud CLI(Google Cloud 的主要命令行界面)。
本地 shell
如果您更喜欢使用本地 shell,则必须在您的环境中安装 Docker 和 gcloud CLI。

启动 Cloud Shell

如需启动 Cloud Shell,请执行以下步骤:

  1. 转到 Google Cloud 控制台。

    Google Cloud 控制台

  2. 点击激活 Cloud Shell 按钮:

    控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloud 命令。

  3. 安装 Helm 3.8.0 或更高版本。在更早的 Helm 版本中,OCI 格式的图表只作为一项实验性功能提供。

    运行 helm version 验证您的版本。

设置本地 shell

如需安装 gcloud CLI 和 Helm,请执行以下步骤:

  1. 安装 gcloud CLI。如需更新现有安装,请运行命令 gcloud components update

  2. 安装 Helm 3.8.0 或更高版本。在更早的 Helm 版本中,OCI 格式的图表只作为一项实验性功能提供。

    运行 helm version 验证您的版本。

创建代码库

创建 Docker 代码库以存储本快速入门的示例图表。

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 点击创建代码库

  3. 指定 quickstart-helm-repo 作为该代码库的名称。

  4. 选择 Docker 作为格式。

  5. 位置类型下,选择区域,然后选择位置 us-west1

  6. 点击创建

该代码库会被添加到代码库列表中。

gcloud

  1. 运行以下命令,在位置 us-west1 中创建一个名为 quickstart-helm-repo 且带有说明“docker 代码库”的新 Docker 代码库。

    gcloud artifacts repositories create quickstart-helm-repo --repository-format=docker \
    --location=us-west1 --description="Helm repository"
    
  2. 运行以下命令确认已创建代码库。

    gcloud artifacts repositories list
    

如需详细了解 Artifact Registry 命令,请运行 gcloud artifacts 命令。

创建图表

在本快速入门中,您将创建一个名为 hello-chart 的示例图表。

  1. 切换到要在其中创建图表的目录。
  2. 运行以下命令以创建图表:

    helm create hello-chart
    

    Helm 创建一个名为 hello-chart 的目录,其中包含一组默认图表文件。其中一个文件是 Chart.yaml,其中包含有关图表的信息。

  3. 将图表打包为归档。

    helm package hello-chart/
    

    Helm 使用 Chart.yaml 中的图表名称和版本号创建名为 hello-chart-0.1.0.tgz 的归档文件。

向代码库进行身份验证

在推送或安装映像之前,Helm 必须向 Artifact Registry 进行身份验证。

Helm 可以使用现有的注册表设置以及 Docker 配置文件。 如果您尚未配置 Docker 以便与 Artifact Registry 搭配使用,可以使用访问令牌进行身份验证,以便完成本快速入门中的操作。

如需详细了解身份验证,请参阅为 Helm 设置身份验证

使用 Docker 配置进行身份验证

默认情况下,Helm 支持 Docker 配置文件 config.json 中的注册表设置。Helm 会在默认位置或 DOCKER_CONFIG 环境变量指定的位置中查找注册表设置。

如果您为 Docker 配置了凭据帮助程序,以便向 Artifact Registry 进行身份验证,则 Helm 会使用 Artifact Registry Docker 代码库的现有配置。

使用访问令牌进行身份验证

如需使用访问令牌进行身份验证,请执行以下操作:

  1. 使用 Helm 向 Artifact Registry 进行身份验证时,获取访问令牌作为凭据。

    Linux/macOS

    运行以下命令:

    gcloud auth print-access-token | helm registry login -u oauth2accesstoken \
    --password-stdin https://us-west1-docker.pkg.dev
    

    Windows

    运行以下命令:

    gcloud auth print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://us-west1-docker.pkg.dev/PROJECT-ID/REPOSITORY
    

    其中

    • oauth2accesstoken 是在使用访问令牌进行身份验证时要使用的用户名。
    • gcloud auth print-access-token 是用于获取访问令牌的 gcloud 命令。您的访问令牌是进行身份验证的密码。

Helm 现已通过 Artifact Registry 身份验证。您已准备好将图表push到代码库。

将图表推送到 Artifact Registry

创建图表归档文件并向 Artifact Registry 代码库进行身份验证后,您可以将图表推送到代码库。

如需推送图表,请运行以下命令:

helm push hello-chart-0.1.0.tgz oci://us-west1-docker.pkg.dev/PROJECT/quickstart-helm-repo

PROJECT 替换为您的 Google Cloud 项目 ID

Helm 对映像使用 Chart.yaml 中的值:

  • 图表名称为图片名称:hello-chart
  • 图表版本为图片标记:0.1.0

Helm 返回类似于以下示例的输出:

Login Succeeded
Pushed: us-west1-docker.pkg.dev/my-project/quickstart-helm-repo/hello-chart:0.1.0
Digest: sha256:67a72...

运行以下命令以验证图表现在是否已存储在代码库中:

gcloud artifacts docker images list us-west1-docker.pkg.dev/PROJECT/quickstart-helm-repo

命令输出如以下示例所示:

Listing items under project my-project, location us-west1, repository quickstart-helm-repo.

IMAGE: us-west1-docker.pkg.dev/my-project/quickstart-helm-repo/hello-chart
DIGEST: sha256:67a72...
CREATE_TIME: 2021-11-08T22:59:57
UPDATE_TIME: 2021-11-08T22:59:57

您现在可以使用存储在 Artifact Registry 中的图表部署版本。

部署图表

在 Helm 中,应用的已部署实例称为版本。将代码库添加到 Helm 配置后,您可以部署图表的版本。

  1. 使用以下命令为您的部署创建一个名为 chart-cluster 的集群:

    gcloud container clusters create --zone us-west1-a chart-cluster
    

    创建集群后,该命令将返回类似于以下示例的摘要:

    kubeconfig entry generated for chart-cluster.
    NAME: chart-cluster
    LOCATION: us-west1-a
    MASTER_VERSION: 1.20.10-gke.1600
    MASTER_IP: 34.66.36.211
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.20.10-gke.1600
    NUM_NODES: 3
    STATUS: RUNNING
    
  2. 获取集群凭据,以便 kubectl 可以访问集群:

    gcloud container clusters get-credentials --zone us-west1-a chart-cluster
    
  3. 运行以下命令,使用本地提取的图表文件部署一个版本的 hello-chart

    helm install hello-chart oci://us-west1-docker.pkg.dev/PROJECT/quickstart-helm-repo/hello-chart --version 0.1.0
    

    该命令会返回部署摘要:

    NAME: hello-chart
    LAST DEPLOYED: Mon Nov  8 23:15:13 2021
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    

您已成功使用您创建并推送到 Artifact Registry 的图表部署了版本。

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. 使用以下命令删除您创建的代码库:

    gcloud artifacts repositories delete quickstart-helm-repo --location=us-west1
    
  2. 删除您创建的集群:

    gcloud container clusters delete --zone=us-west1-a chart-cluster
    

后续步骤