部署容器映像

本页面介绍如何将新服务和新修订版本部署到 Cloud Run for Anthos on Google Cloud。

前提条件

如需使用 gcloud 命令行工具,您必须安装并配置 Cloud SDK

部署所需的权限

除了需要针对 apiGroup serving.knative.dev 和 kind Service 的创建、更新和删除权限外,您还必须拥有下列角色之一:

  • Owner
  • Editor
  • GKE Admin
  • GKE Developer

可部署的映像

您可以部署的容器映像没有大小限制。

您可以使用任何容器注册表中的容器,例如 Docker Hub。如需了解如何部署 Container Registry 或 Artifact Registry 以外的其他注册表中的私有映像,请参阅部署其他容器注册表中的私有容器映像

部署新的服务

您可以使用标记(例如 gcr.io/my-project/my-image:latest)或确切摘要(例如 gcr.io/my-project/my-image@sha256:41f34ab970ee...)指定容器映像。

首次部署到服务时会创建第一个修订版本。请注意,修订版本是不可变的。如果使用容器映像标记进行部署,则该标记会被解析为摘要,并且修订版本将始终提供此特定摘要。

您可以使用 Cloud Console、gcloud 命令行工具或 YAML 配置文件部署容器。

点击相应标签页即可获取有关所选工具的使用说明。

默认 gcloud 位置配置

如果您之前在 Cloud SDK 的 default 配置中配置了位置,则 gcloud 命令默认使用这些值,包括:

  • compute/region
  • compute/zone
  • kuberun/cluster
  • kuberun/region
  • kuberun/cluster_location

运行以下 gcloud config 命令查看 default 配置的设置:

gcloud config configurations describe default

控制台

要部署容器映像,请执行以下操作:

  1. 转到 Cloud Run for Anthos

  2. 点击创建服务以显示“创建服务”页面

    在此表单中执行以下操作:

    1. 选择要部署到的 Cloud Run for Anthos 平台:

      • 对于 Cloud Run for Anthos,部署到已启用 Cloud Run for Anthos 的 GKE 集群或 VMware 上的 Anthos 集群。
    2. 从下拉菜单中,为您的服务选择一个可用的 GKE 集群。

    3. 输入所需的服务名称。服务名称在每个地区和项目或每个集群必须是唯一的。服务名称一旦指定便无法更改。

    4. 在“连接”下

      • 如果您想将访问仅限于对其他 Cloud Run for Anthos 服务或集群中使用 Istio 的服务的访问,请选择内部
      • 如需允许对服务的外部访问,请选择外部

      请注意,您可以随时更改连接选项,具体说明请参阅更改服务连接设置

    5. 点击下一步以转到服务创建表单的第二页:

      图片

      在此表单中执行以下操作:

      1. “容器映像网址”文本框中,提供受支持的注册表中的映像的网址,例如:gcr.io/myproject/my-image:latest

        如需将 Artifact Registry 与您的私有容器映像搭配使用,您必须使用映像摘要。如果您要使用私有容器映像的映像标记,则必须创建并使用 imagePullSecret,直到已知问题得到解决为止。

      2. (可选)点击显示高级设置,然后点击后续标签页以设置:

      3. 点击创建以将映像部署到 Cloud Run for Anthos,然后等待部署完成。

    您刚刚将一项服务部署到启用了 Cloud Run for Anthos 的集群。

命令行

要部署容器映像,请执行以下操作:

  1. 运行 gcloud kuberun core services create 命令:

    gcloud kuberun core services create SERVICE --image IMAGE_URL

    • SERVICE 替换为要部署到的服务的名称。如果指定的服务不存在,则会创建一个新服务。

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/myproject/my-image:latest

    • 其他部署选项:

      • 如需部署到非默认命名空间,必须使用 --namespace 参数指定该命名空间。

      • 如需部署到默认配置以外的位置,必须使用 --cluster--cluster-location 参数指定集群的 namelocation

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 您可以使用 --connectivity 标志设置连接选项,以指定内部或外部访问(请参阅更改服务连接设置)。

      • 对于 Cloud Run for Anthos on-prem,必须添加 --kubeconfig 参数并指定您的配置文件:

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。

YAML

您可以将服务规范存储在 YAML 文件中,然后使用 gcloud 命令行工具进行部署。

  1. 使用以下内容创建新的 service.yaml 文件:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    替换

    • SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。
    • IMAGE 替换为容器映像的网址。 如需将 Artifact Registry 与您的私有容器映像搭配使用,您必须使用映像摘要。如果您要使用私有容器映像的映像标记,则必须创建并使用 imagePullSecret,直到已知问题得到解决为止。

    您还可以指定更多配置,例如环境变量或内存限制。

  2. 使用以下命令部署新服务:

    gcloud beta run services replace service.yaml

Cloud Code

如需使用 Cloud Code 进行部署,请阅读 IntelliJVisual Studio Code 指南。

部署现有服务的新修订版本

您可以使用 Cloud Console、gcloud 命令行或 YAML 配置文件部署新的修订版本。

请注意,更改任何配置设置都会导致新修订版本的创建,即使容器映像没有变化也是如此。创建的每个修订版本都是不可变的。

点击相应标签页即可获取有关所选工具的使用说明。

控制台

要部署现有服务的新修订版本,请执行以下操作:

  1. 转到 Cloud Run for Anthos

  2. 在服务列表中找到要更新的服务,然后点击该服务以打开其详细信息。

  3. 点击修改和部署新修订版本。此时会显示修订版本部署表单:

    图片

  4. 如果需要,请提供要部署的新容器映像的网址。

  5. 根据需要设置:

  6. 如需将所有流量都发送到新修订版本,请选中“立即支持此修订版本”复选框。如需逐步发布新修订版本,请取消选中该复选框:这样在部署中,系统将不会向新修订版本发送任何流量(在部署之后,请按照适用于逐步发布的说明进行操作)。

  7. 点击部署并等待部署完成。

命令行

要部署容器映像,请执行以下操作:

  1. 运行 gcloud kuberun core services update 命令:

    gcloud kuberun core services update SERVICE --image IMAGE_URL

    • 系统会自动为每个修订版本分配修订版本后缀。如果您要指定自己的修订版本后缀,请添加 --revision-suffix 参数。

    • SERVICE 替换为要部署到的服务的名称。如果指定的服务不存在,则会创建一个新服务。

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/myproject/my-image:latest

    • 其他部署选项:

      • 如需部署到非默认命名空间,必须使用 --namespace 参数指定该命名空间。

      • 如需部署到默认配置以外的位置,必须使用 --cluster--cluster-location 参数指定集群的 namelocation

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 您可以使用 --connectivity 标志设置连接选项,以指定内部或外部访问(请参阅更改服务连接设置)。

      • 对于 Cloud Run for Anthos on-prem,必须添加 --kubeconfig 参数并指定您的配置文件:

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。

YAML

如需使用 YAML 文件修改现有服务的配置,请获取当前配置的副本,修改相应配置并将更改保存到本地文件内,然后再将这些更改部署到服务中。

  1. 显示为 YAML,然后将服务的配置复制到本地文件(例如 service.yaml)中:

    gcloud kuberun core services describe SERVICE --format yaml

    SERVICE 替换为您的 Cloud Run for Anthos 服务的名称。

    1. 在本地文件中,更新 spec.template 的任意子属性中的修订版本设置

    2. 部署新修订版本:

      gcloud beta run services replace service.yaml

Cloud Code

如需使用 Cloud Code 部署现有服务的新修订版本,请阅读 IntelliJVisual Studio Code 指南。

从其他 Google Cloud 项目中部署映像

如果您设置了正确的 IAM 权限,则可以从其他 Google Cloud 项目中部署容器映像:

  1. 在 Cloud Console 控制台中,打开 Cloud Run for Anthos 服务的项目。

  2. 转到 IAM 页面

  3. 如果要将映像部署到以下各项,请按如下所述操作:

  4. 打开您要使用的容器注册表所属的项目。

  5. 转到 IAM 页面

  6. 点击添加以添加新成员。

  7. 新成员文本框中,粘贴您之前复制的服务帐号的电子邮件。

  8. 在“选择角色”下拉列表中,选择存储 -> Storage Object Viewer 角色。

  9. 将容器映像部署到您的 Cloud Run for Anthos 服务所属的项目

从其他容器注册表中部署私有容器映像

此部分介绍如何设置正确的权限,以将容器映像从任意私有注册表部署到 Cloud Run for Anthos。私有容器注册表需要凭据才能访问容器映像。 请注意,您无需执行如下步骤,即可将私有容器映像从 Container Registry 或 Artifact Registry 部署到您的集群所在的项目中。

如需部署私有容器映像,您必须创建一个 imagePullSecret 类型的 Kubernetes Secret 并将其与服务帐号相关联:

  1. 创建一个名为 container-registryimagePullSecret Secret:

    kubectl create secret docker-registry container-registry \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-email=REGISTRY_EMAIL \
    --docker-username=REGISTRY_USER \
    --docker-password=REGISTRY_PASSWORD
    • DOCKER_REGISTRY_SERVER 替换为您的私有注册表 FQDN(例如:对于 Container Registry,替换为 https://gcr.io/;对于 DockerHub,则替换为 https://hub.docker.com)。
    • REGISTRY_EMAIL 替换为您的电子邮件地址。
    • REGISTRY_USER 替换为您的容器注册表用户名。

      如果您使用的是 Container Registry 或 Artifact Registry,并且想要存储和拉取长期凭据,而不是传递短期访问令牌,请参阅《身份验证方法:JSON 密钥文件》

    • REGISTRY_PASSWORD 替换为您的容器注册表密码。

  2. 打开默认服务帐号:

    kubectl edit serviceaccount default --namespace default

    Kubernetes 集群中的每个命名空间都有一个名为 default 的默认服务帐号。除非您在部署 Cloud Run for Anthos 服务时另有指定,否则系统将使用此默认服务帐号拉取容器映像。

  3. 将新创建的 imagePullSecret Secret 添加到您的默认服务帐号:

    imagePullSecrets:
    - name: container-registry
    

    您的服务帐号现在应如下所示:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

现在,当前 default 命名空间中创建的所有新 Pod 都将定义了 imagePullSecret Secret。

在启用了自动 Istio Sidecar 注入功能的情况下进行部署

如需在启用自动 Istio Sidecar 注入功能的命名空间上部署服务,您必须使用单独的 Istio 安装

在内部网络上部署服务

在内部网络上部署服务对于下列对象非常有用:为员工提供内部应用的企业;以及在 Cloud Run for Anthos 集群外运行的客户端所使用的服务。

如需在内部网络上部署服务,请参阅设置专用内部网络

后续步骤

部署新服务后,您可以执行以下操作:

您可以利用 Cloud Build 触发器来实现 Cloud Run for Anthos 服务的自动构建和部署: