首页 > 解决方案 > Terraform dataproc 集群设置问题

问题描述

我正在尝试通过 terraform 在 GCP 中启动一个私有数据处理集群(1m,2w)。它还应该需要可选组件,例如 docker、anaconda 和 jupyter。以下是我的担忧,

  1. 我正在尝试在 software_config 下添加 image_version 和 optional_components,如下所示,这可行吗?
    software_config {

      image_version = "1.4.21-debian9"
      override_properties = {
        "dataproc:dataproc.allow.zero.workers"          = "true"
      }
      optional_components = [ "DOCKER", "ANACONDA", "JUPYTER" ]
    }       
  1. 如果以上不可行,使用 initialize_actions 是我唯一的选择,如下所示?
    initialization_action {
      script      = "gs://dataproc-initialization-actions/conda/install-conda-env.sh"
      timeout_sec = 500
      }
  1. 如何将权限/密钥分配给通过 terraform 启动的节点。因此用户可以在配置后使用它访问节点。我尝试如下使用,
    gce_cluster_config {
      tags    = ["env", "test"]
      network = "${google_compute_network.dp-network.name}"
      internal_ip_only = true
      service_account = "name@name.iam.gserviceaccount.com"
    }

感谢您的投入,

谢谢!

更新:我可以在没有在 software_config 中指定的可选组件的情况下启动一个集群。但是如果我这样做了,那么它会因错误而失败,并要求我将其报告给错误。

gce_cluster_config {
      network               = "${google_compute_network.dataproc-network.name}"
      internal_ip_only      = true
      tags                  = ["env", "staging"]
      zone                  = "${var.zone}"
      service_account       = "${var.service_account}"
      service_account_scopes= [
        "https://www.googleapis.com/auth/monitoring",
        "useraccounts-ro",
        "storage-rw",
        "logging-write",
      ]
    }

    # We can define multiple initialization_action blocks    
    initialization_action {
      script      = "gs://dataproc-initialization-actions/stackdriver/stackdriver.sh"
      timeout_sec = 500
    }
    initialization_action {
      script      = "gs://dataproc-initialization-actions/jupyter/jupyter.sh"
      timeout_sec = 500 
    }

标签: google-cloud-dataprocservice-accountsterraform-provider-gcp

解决方案


1或2应该没问题。可能发生的情况是 Dataproc 的 Terraform 提供程序与 API 不同步,因此请按照错误提示提交错误。

对于 3,这里有点混乱 - 让我试着澄清一下。当您授予用户 IAM 绑定时,用户将有权访问资源(集群)。这与您如何创建集群无关。或EditorDataproc Editor自定义角色将允许他们与集群交互。

这是一个很好的设置internal_ip_only,因为这使得集群无法从公共互联网访问,但这也意味着gcloud compute ssh单个节点将无法工作。

最后,任何有权与集群交互的用户都具有与服务帐户基本相同的权限。本文对此进行了解释 https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals


推荐阅读