排查集群创建问题

使用 gcpdiag 工具

gcpdiag 是一种开源工具,不是由官方提供支持的 Google Cloud 产品。您可以使用 gcpdiag 工具来帮助识别和修复 Google Cloud 项目问题。如需了解详情,请参阅 GitHub 上的 gcpdiag 项目

gcpdiag 工具会执行以下检查,帮助您发现以下 Dataproc 集群创建问题:

  • 缺货错误:评估 Logs Explorer 日志,以发现地区和区域中的缺货情况。
  • 配额不足:检查 Dataproc 集群项目中的配额可用情况。
  • 网络配置不完整:执行网络连接性测试,包括检查必要的防火墙规则以及外部和内部 IP 配置。如果集群已被删除,gcpdiag 工具将无法执行网络连接性检查。
  • 跨项目配置不正确:检查跨项目服务账号,并审核其他角色和组织政策的强制执行情况。
  • 缺少共享 VPC IAM 角色:如果 Dataproc 集群使用共享 VPC 网络,请检查是否已添加所需的服务账号角色。
  • 初始化操作失败:评估 Logs Explorer 日志,以发现初始化操作脚本失败和超时问题。

如需查看 gcpdiag 集群创建步骤的列表,请参阅可能的步骤

运行 gcpdiag 命令

您可以在 Google Cloud 控制台的 Cloud Shell 中或 Docker 容器中运行 gcpdiag 命令。

Google Cloud 控制台

  1. 完成然后复制以下命令。
  2. gcpdiag runbook dataproc/cluster-creation \
        --parameter project_id=PROJECT_ID \
        --parameter cluster_name=CLUSTER_NAME \
        --parameter OPTIONAL_FLAGS
  3. 打开 Google Cloud 控制台并激活 Cloud Shell。
  4. 打开 Cloud 控制台
  5. 粘贴复制的命令。
  6. 运行 gcpdiag 命令以下载 gcpdiag Docker 映像,然后执行诊断检查。如果适用,请按照输出说明修复失败的检查。

Docker

您可以使用封装容器运行 gcpdiag,以在 Docker 容器中启动 gcpdiag。必须安装 Docker 或 Podman

  1. 在本地工作站上复制并运行以下命令。
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. 执行 gcpdiag 命令:
    ./gcpdiag runbook dataproc/cluster-creation \
        --parameter project_id=PROJECT_ID \
        --parameter cluster_name=CLUSTER_NAME \
        --parameter OPTIONAL_FLAGS

查看此 Runbook 的可用参数

替换以下内容:

    • PROJECT_ID:资源所在项目的 ID
    • CLUSTER_NAME:项目中目标 Dataproc 集群的名称
    • OPTIONAL_PARAMETERS:添加以下一个或多个可选参数。如果集群已被删除,则必须提供这些参数。
      • cluster_uuid:项目中目标 Dataproc 集群的 UUID
      • service_account:Dataproc 集群虚拟机服务账号
      • subnetwork:Dataproc 集群子网的完整 URI 路径
      • internal_ip_only:true 或 false
      • cross_project:如果 Dataproc 集群使用其他项目中的虚拟机服务账号,则为跨项目 ID

实用标志:

如需查看所有 gcpdiag 工具标志的列表和说明,请参阅 gcpdiag 使用说明

了解并修复集群创建错误

本部分列出了 Dataproc 错误消息及其常见原因和解决方案。

  • 操作超时:仅运行 2 个必需的数据节点/节点管理器中的 0 个。

    原因:主节点无法创建集群,因为它不能与工作器节点通信。

    解决方案:

    • 检查防火墙规则警告。
    • 确保正确的防火墙规则已到位。如需了解详情,请参阅默认 Dataproc 防火墙规则概览
    • 在 Google Cloud 控制台中执行连接测试,以确定阻塞主节点和工作器节点之间通信的内容。
  • projects/{projectId}/regions/{region}/subnetworks/{subnetwork} 所需的 compute.subnetworks.use 权限

    原因:当您尝试使用另一个项目中的 VPC 网络设置 Dataproc 集群并且 Dataproc 服务代理服务账号对托管该网络的共享 VPC 项目没有必要的权限时,可能会发生此错误。

    解决方案:按照创建使用另一个项目中的 VPC 网络的集群中列出的步骤。

  • 可用区 projects/zones/{zone} 没有足够的资源来处理请求 (resource type:compute)

    原因:用于创建集群的可用区没有足够的资源。

    解决方案:

  • 已超出配额错误

    CPUS/CPUS_ALL_REGIONS 配额不足
    “DISKS_TOTAL_GB”配额不足
    “IN_USE_ADDRESSES”配额不足

    原因:您的 CPU磁盘IP 地址请求超出了您的可用配额。

    解决方案:通过 Google Cloud 控制台申请更多配额。

  • 初始化操作失败

    原因:创建集群期间提供的初始化操作安装失败。

    解决方案:

  • 未能初始化节点“{cluster-name}”:{component}

    原因:Dataproc 组件未能初始化。

    解决方案:请参阅:

  • 集群创建失败:IP 地址空间已用尽

    原因:无法获取预配请求的集群节点所需的 IP 地址空间。

    解决方案:

    • 在其他子网或网络上创建集群。
    • 减少网络使用量以释放 IP 地址空间。
    • 等待网络上有足够的 IP 空间可用。
  • 初始化脚本错误消息:代码库 REPO_NAME 不再包含“Release”文件

    原因:Debian oldstable 向后移植代码库已被清除。

    解决方案:

    在初始化脚本中运行 apt-get 的代码之前添加以下代码。

    oldstable=$(curl -s https://deb.debian.org/debian/dists/oldstable/Release | awk '/^Codename/ {print $2}');
    stable=$(curl -s https://deb.debian.org/debian/dists/stable/Release | awk '/^Codename/ {print $2}');
    
    matched_files="$(grep -rsil '\-backports' /etc/apt/sources.list*)"
    if [[ -n "$matched_files" ]]; then
      for filename in "$matched_files"; do
        grep -e "$oldstable-backports" -e "$stable-backports" "$filename" || \
          sed -i -e 's/^.*-backports.*$//' "$filename"
      done
    fi
    
  • 无法访问网络:dataproccontrol-REGION.googleapis.com/...*

    原因:Dataproc 集群 VPC 网络可能没有必需的到互联网的路由。在集群虚拟机上运行的 Dataproc 代理需要有通往互联网的路线,才能访问 Dataproc 控制 API 以获取作业和报告状态。通向互联网的系统生成的默认路由可能已被删除。

    解决方案:

    将路由到互联网添加到集群 VPC 网络:使用 --next-hop-gateway=default-internet-gateway 添加 IPv4 的 0.0.0.0/0IPv6 的 ::/0。添加用于访问控制的防火墙规则