Terraform dataproc 集群设置问题

Terraform dataproc cluster setup issues

我正在尝试通过 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. 如何将 permissions/keys 分配给正在通过 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 
    }

1 或 2 都可以。可能发生的情况是 Dataproc 的 Terraform 提供程序与 API 不同步,因此请按照错误建议提交错误。

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

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

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