为 AI Platform Pipelines 配置 Google Kubernetes Engine 集群

通过减少以下麻烦,您可以借助 AI Platform Pipelines 更轻松地在 Google Kubernetes Engine 上开始使用 Kubeflow Pipelines 以及 TensorFlow Extended:

  • 创建 GKE 集群
  • 将 Kubeflow Pipelines 部署到您的 GKE 集群
  • 创建 Cloud Storage 存储分区以用于存储流水线工件

如果愿意,您可以使用 AI Platform Pipelines 在尚未安装 Kubeflow Pipelines 的现有集群上部署 Kubeflow Pipelines。使用本指南确保您的集群配置正确以部署和运行 Kubeflow Pipelines。

确保您的 GKE 集群有足够的资源用于 AI Platform Pipelines

如需使用 Google Cloud Marketplace 在 GKE 集群上部署 Kubeflow Pipelines,必须满足以下条件:

  • 您的集群必须至少有 3 个节点。每个节点必须至少有 2 个 CPU 和 4 GB 可用内存。
  • 集群的访问权限范围必须授予对所有 Cloud API 的完整访问权限,否则您的集群必须使用自定义服务账号。
  • 集群不能已安装 Kubeflow Pipelines。

请按照以下说明检查您的集群是否有足够的资源来安装 AI Platform Pipelines。

  1. 在 Google Cloud Console 中打开 AI Platform Pipelines。

    打开 AI Platform Pipelines

  2. 在 AI Platform Pipelines 工具栏中,点击新建实例。 Kubeflow Pipelines 将在 Google Cloud Marketplace 中打开。

  3. 点击配置。系统将打开部署 Kubeflow Pipelines 表单。

  4. 点击集群以展开列表。没有足够资源或权限的 GKE 集群被列为不合格集群。每个不合格集群都会包含无法安装 Kubeflow Pipelines 的说明,例如:

为您的 GKE 集群分配更多资源

如需将 Kubeflow Pipelines 从 Google Cloud Marketplace 安装到现有 GKE 集群,您的集群必须至少有 3 个节点,其中包含 2 个 CPU 和 4 GB 可用空间。

按照以下说明将集群中的节点池替换为拥有足够的 AI Platform Pipelines CPU 和内存资源的节点池。

  1. 在 Google Cloud Console 中打开 Google Kubernetes Engine 集群。

    转到 GKE 集群

  2. 点击您的集群名称。这将显示集群的详细信息。

  3. 在 GKE 工具栏中,点击添加节点池。系统将打开添加新节点池表单。

  4. 添加新节点池表单中提供以下信息。

    • 节点数:指定节点池中的节点数。 您的集群必须具有 3 个或以上节点才能使用 Google Cloud Marketplace 安装 Kubeflow Pipelines。
    • 机器类型:指定要用于节点池中实例的 Compute Engine 机器类型。选择具有至少 2 个 CPU 和 4 GB 内存的机器类型,例如 n1-standard-2

    • 访问权限范围:点击访问权限范围中的授予对所有 Cloud API 的完整访问权限

    您也可以根据需要配置节点池。详细了解如何将节点池添加到集群

  5. 点击创建节点池。创建节点池需要几分钟才能完成。

  6. 对于节点池部分中的每个节点池(您在上一步中创建的节点池除外),请点击 删除。这将显示删除节点池对话框,确认您要删除此节点池。

  7. 点击删除。删除节点池需要几分钟时间。

  8. 删除旧节点池后,请检查您的集群是否有足够的资源和访问权限从 Google Cloud Marketplace 安装 Kubeflow Pipelines

为您的 GKE 集群授予对 Google Cloud 资源和 API 的访问权限

您可以通过以下三种方法向机器学习流水线授予对 Google Cloud 资源和 API 的访问权限:

部署 AI Platform Pipelines 时,您必须向 GKE 集群授予对 Google Cloud 资源和 API 的完整访问权限,或使用服务账号授予对 Google Cloud 的访问权限。

配置对 Google Cloud API 具有完整访问权限的 GKE 集群

为了让您的机器学习流水线和其他 GKE 集群工作负载更轻松地访问项目的 Google Cloud 资源,请为集群配置对 https://www.googleapis.com/auth/cloud-platform 范围的访问权限。此访问权限范围可提供对您已在项目中启用的 Google Cloud 资源的完整访问权限。如果授予此访问权限范围会提供对 Google Cloud 的过度访问,请使用服务账号配置精细访问权限

按照以下说明,将集群的节点池替换为允许该集群上的所有工作负载访问项目中已启用的所有 Google Cloud API 的节点池。在更改 GKE 集群之前,请与您的 GKE 管理员讨论这些更改。

  1. 在 Google Cloud Console 中打开 Google Kubernetes Engine 集群。

    转到 GKE 集群

  2. 点击您的集群名称。这将显示集群的详细信息。

  3. 在 GKE 工具栏中,点击添加节点池。系统将打开添加新节点池表单。

  4. 添加新节点池表单中提供以下信息。

    • 节点数:指定节点池中的节点数。 您的集群必须具有 3 个或以上节点才能使用 Google Cloud Marketplace 安装 Kubeflow Pipelines。
    • 机器类型:指定要用于节点池中实例的 Compute Engine 机器类型。选择具有至少 2 个 CPU 和 4 GB 内存的机器类型,例如 n1-standard-2

    • 访问权限范围:点击访问权限范围中的授予对所有 Cloud API 的完整访问权限

    您也可以根据需要配置节点池。详细了解如何将节点池添加到集群

  5. 点击创建节点池。创建节点池需要几分钟才能完成。

  6. 对于节点池部分中的每个节点池(您在上一步中创建的节点池除外),请点击 删除。这将显示删除节点池对话框,确认您要删除此节点池。

  7. 点击删除。删除节点池需要几分钟时间。

  8. 删除旧节点池后,请检查您的集群是否有足够的资源和访问权限从 Google Cloud Marketplace 安装 Kubeflow Pipelines

配置对 Google Cloud API 具有精细访问权限的 GKE 集群

按照以下说明为 GKE 集群配置服务账号,并将集群的节点池替换为使用该服务账号的节点池。通过创建服务账号,您可以精细地管理集群中的工作负载可以访问的 Google Cloud 资源。在更改 GKE 集群之前,请与您的 GKE 管理员讨论这些更改。

  1. 打开 Cloud Shell 会话。

    打开 Cloud Shell

    Cloud Shell 在 Google Cloud Console 底部的框架中打开。

  2. 在 Cloud Shell 中运行以下命令,以创建服务账号并向其授予足够的权限来运行 AI Platform Pipelines。详细了解使用用户代管式服务账号运行 AI Platform Pipelines 所需的角色

    export PROJECT=PROJECT_ID
    export SERVICE_ACCOUNT=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $SERVICE_ACCOUNT \
      --display-name=$SERVICE_ACCOUNT \
      --project=$PROJECT
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding $PROJECT \
      --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT.iam.gserviceaccount.com" \
      --role=roles/storage.objectViewer

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:要创建的服务账号的名称。
    • PROJECT_ID:在其中创建服务账号的 Google Cloud 项目。
  3. 向服务账号授予对 ML Pipelines 所需的任何 Google Cloud 资源或 API 的访问权限。详细了解 Identity and Access Management 角色管理服务账号的方式。

  4. 向服务账号授予用户账号的 Service Account User (iam.serviceAccountUser) 角色。

    gcloud iam service-accounts add-iam-policy-binding \
      "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      --member=user:USERNAME \
      --role=roles/iam.serviceAccountUser
    

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:您的服务账号的名称。
    • PROJECT_ID:您的 Google Cloud 项目。
    • USERNAME:您在 Google Cloud 上的用户名。
  5. 在 Google Cloud Console 中打开 Google Kubernetes Engine 集群。

    转到 GKE 集群

  6. 点击您的集群名称。这将显示集群的详细信息。

  7. 在 GKE 工具栏中,点击添加节点池。系统将打开添加新节点池表单。

  8. 添加新节点池表单中提供以下信息。

    • 节点数:指定节点池中的节点数。 您的集群必须具有 3 个或以上节点才能使用 Google Cloud Marketplace 安装 Kubeflow Pipelines。
    • 机器类型:指定要用于节点池中实例的 Compute Engine 机器类型。选择具有至少 2 个 CPU 和 4 GB 内存的机器类型,例如 n1-standard-2

    • 服务账号:选择您在较早的步骤中创建的服务账号。

    您也可以根据需要配置节点池。详细了解如何将节点池添加到集群

  9. 点击创建节点池。创建节点池需要几分钟才能完成。

  10. 对于节点池部分中的每个节点池(您在上一步中创建的节点池除外),请点击 删除。这将显示删除节点池对话框,确认您要删除此节点池。

  11. 点击删除。删除节点池需要几分钟时间。

  12. 删除旧节点池后,请检查您的集群是否有足够的资源和访问权限从 Google Cloud Marketplace 安装 Kubeflow Pipelines

使用 Kubernetes Secret 向集群授予对 Google Cloud 资源和 API 的访问权限

借助 Kubeflow 流水线 SDK 中的 use_gcp_secret 运算符开发的流水线使用 Kubernetes Secret 向 Google Cloud 资源进行身份验证。

按照以下说明创建服务账号,向该账号授予对流水线使用的资源的访问权限,然后将服务账号作为 Kubernetes Secret 添加到您的集群中。

  1. 在 Google Cloud Console 中打开 Google Kubernetes Engine 集群。

    转到 GKE 集群

  2. 在您的集群的行中,找到集群名称和地区。

  3. 打开 Cloud Shell 会话。

    打开 Cloud Shell

    Cloud Shell 在 Google Cloud 控制台底部的框架中打开。使用 Cloud Shell 完成此过程的其余部分。

  4. 设置以下环境变量。

    export PROJECT_ID=PROJECT_ID
    export ZONE=ZONE
    export CLUSTER=CLUSTER_NAME
    export NAMESPACE=NAMESPACE
    export SA_NAME=SERVICE_ACCOUNT_NAME
    

    替换以下内容:

    • PROJECT_ID:在其中创建 GKE 集群的 Google Cloud 项目。
    • ZONE:在其中创建 GKE 集群的 Google Cloud 区域。
    • CLUSTER_NAME:GKE 集群的名称。
    • NAMESPACE:GKE 集群中安装了 Kubeflow Pipelines 的命名空间。

      命名空间用于管理大型 Kubernetes 集群中的资源。如果您的集群不使用命名空间,请输入默认作为 kubernetes-namespace

    • SERVICE_ACCOUNT_NAME:要为您的 Kubeflow Pipelines 集群创建的服务账号名称,用于访问 Google Cloud 资源和 API。

  5. 为您的集群创建服务账号。

    gcloud iam service-accounts create $SA_NAME \
      --display-name $SA_NAME --project "$PROJECT_ID"
    
  6. 如需向您的服务账号授予对 Google Cloud 资源的访问权限,请将 Identity and Access Management 角色绑定到该服务账号。按照以下说明向您的服务账号授予 IAM 角色。针对您要向服务账号授予的每个角色,调用此命令一次。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member=serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
      --role=iam-role
    
    • iam-role:要授予服务账号的 IAM 角色。例如,roles/storage.admin 可以完全控制项目中的 Cloud Storage 存储分区和对象。

      如需详细了解 IAM 角色,请阅读了解 IAM 角色指南。

  7. 在当前目录中为您的服务账号创建私钥文件。

    gcloud iam service-accounts keys create ./service-account-key.json \
    --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  8. 配置 kubectl 以关联到您的集群,然后创建 user-gcp-sa Kubernetes Secret。

    gcloud container clusters get-credentials "$CLUSTER" --zone "$ZONE" \
      --project "$PROJECT_ID"
    
    kubectl create secret generic user-gcp-sa \
      --from-file=user-gcp-sa.json=./service-account-key.json \
      -n $NAMESPACE --dry-run -o yaml  |  kubectl apply -f -
    
  9. 清理服务账号私钥文件。

    rm ./service-account-key.json