在 Artifact Registry 中存储 Helm 图表

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

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

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

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

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

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

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  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-central1

  6. 点击创建

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

gcloud

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

    gcloud artifacts repositories create quickstart-helm-repo --repository-format=docker \
    --location=us-central1 --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-central1-docker.pkg.dev
    

    Windows

    运行以下命令:

    gcloud auth print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://us-central1-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-central1-docker.pkg.dev/PROJECT/quickstart-helm-repo

PROJECT 替换为您的 Google Cloud 项目 ID

Helm 将 Chart.yaml 中的值用于映像:

  • 图表名称是映像名称:hello-chart
  • 图表版本是映像标记:0.1.0

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

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

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

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

命令输出类似于以下示例:

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

IMAGE: us-central1-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-central1-a chart-cluster
    

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

    kubeconfig entry generated for chart-cluster.
    NAME: chart-cluster
    LOCATION: us-central1-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-central1-a chart-cluster
    
  3. 运行以下命令,使用本地提取的图表文件部署 hello-chart 版本:

    helm install hello-chart oci://us-central1-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-central1
    
  2. 删除您创建的集群:

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

后续步骤