Mit der auf Dienstkonten basierenden sicheren Mehrmandantenfähigkeit von Managed Service for Apache Spark können Sie einen Cluster für mehrere Nutzer freigeben. Dabei wird eine Reihe von Nutzerkonten Dienstkonten zugeordnet, wenn der Cluster erstellt wird. Nutzer können interaktive Arbeitslasten wie Jupyter-Notebooks an die in dem mehrmandantenfähigen Cluster ausgeführten Kernel mit isolierten Nutzerumgebungen senden.
Wenn ein Nutzer einen Job an den mehrmandantenfähigen Cluster sendet, geschieht Folgendes:
Der Job wird als bestimmter Betriebssystemnutzer mit einem bestimmten Kerberos-Principal ausgeführt.
Der Job greift mithilfe eines zugeordneten Dienstkontos auf Ressourcen zu. Google Cloud
In diesem Dokument wird beschrieben, wie Sie einen mehrmandantenfähigen Cluster für Managed Service for Apache Spark erstellen und dann ein Jupyter-Notebook starten und mit einem PySpark-Kernel verbinden, der in dem Cluster ausgeführt wird.
Überlegungen und Einschränkungen
Wenn Sie einen mehrmandantenfähigen Cluster erstellen, gilt Folgendes:
Der Cluster ist nur für Google-Kontonutzer mit zugeordneten Dienstkonten verfügbar. Google-Gruppen können nicht zugeordnet werden. Nicht zugeordnete Nutzer können keine Jobs auf dem Cluster ausführen.
Kerberos ist auf dem Cluster für eine sichere Intra-Cluster-Kommunikation aktiviert und konfiguriert. Die Endnutzerauthentifizierung über Kerberos wird nicht unterstützt.
Der direkte SSH-Zugriff auf den Cluster und Compute Engine-Features wie die Möglichkeit, Startskripts auf Cluster-VMs auszuführen, wird blockiert. Außerdem können Jobs nicht mit
sudo-Berechtigungen ausgeführt werden.Managed Service for Apache Spark Workflows werden nicht unterstützt.
Mehrmandantenfähigen Cluster erstellen
Console
So erstellen Sie einen Managed Service for Apache Spark-Cluster mit der Google Cloud Console:
Rufen Sie in der Google Cloud Console die Seite Managed Service for Apache Spark Managed Service for Apache Spark-Cluster in Compute Engine erstellen auf: Managed Service for Apache Spark-Cluster in Compute Engine erstellen
Gehen Sie im Bereich Cluster einrichten so vor:
- Unter Komponenten:
- Wählen Sie unter Component Gateway die Option Component Gateway aktivieren aus.
- Wählen Sie unter Optionale Komponenten die Option Jupyter Kernel Gateway aus, damit mehrere Nutzer ihre Jupyter-Notebooks mit dem mehrmandantenfähigen Cluster verbinden können.
- Unter Komponenten:
Gehen Sie im Bereich Cluster anpassen so vor:
Unter Clusterattribute:
Wenn Sie mehrmandantenfähige Nutzer hinzufügen oder entfernen möchten, ohne den Cluster neu erstellen zu müssen (siehe Nutzer für mehrmandantenfähigen Cluster aktualisieren), klicken Sie auf Attribute hinzufügen, fügen Sie dann das Präfix
dataproc, das Attributdataproc.dynamic.multi.tenancy.enabledhinzu und legen Sie den Wert auftruefest.Empfehlung: Da YARN erhebliche Clusterressourcen für jeden Notebook-Kernel verbraucht, der in einem mehrmandantenfähigen Cluster ausgeführt wird, fügen Sie Spark- und YARN-Attribute hinzu, um die Ressourcenzuweisung zu erhöhen.
Beispiel:
Präfix Schlüssel Wert spark spark.driver.memory 5g spark spark.executor.memory 5g spark spark.executor.cores 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5
Gehen Sie im Bereich Sicherheit verwalten so vor:
- Wählen Sie unter Projektzugriff die Option Aktiviert den Bereich „cloud-platform“ für diesen Cluster aus.
- Wählen Sie unter Sichere Mehrmandantenfähigkeit die Option **Aktivieren** aus:
- Wählen Sie unter Mehrmandantenfähigkeitszuordnung die Option add Mehrmandantenfähigkeitszuordnung hinzufügen aus, um Zuordnungen von Nutzerkonten zu Dienstkonten hinzuzufügen.
- Unter Multi-tenancy Mapping:
- Klicken Sie auf Erstellen.
Bestätigen oder geben Sie andere Clustereinstellungen ein (siehe Managed Service for Apache Spark-Cluster mit der Google Cloud Console erstellen).
Klicken Sie auf Erstellen.
gcloud
Verwenden Sie den gcloud dataproc clusters create command mit dem
--secure-multi-tenancy-user-mapping
Flag, um eine Liste von Zuordnungen von Nutzerkonten zu Dienstkonten anzugeben.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \ --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \ --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/iam \ --optional-components=JUPYTER_KERNEL_GATEWAY \ --enable-component-gateway \ other args ...
Hinweise:
USER_MAPPINGS: Geben Sie eine durch Kommas getrennte Liste an, die Nutzerkonten Dienstkonten zuordnet.
YAML-Zuordnungsdatei verwenden: Anstatt das--secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--secure-multi-tenancy-user-mappingFlag zu verwenden, um die Zuordnungen von Nutzerkonten zu Dienstkonten anzugeben, können Sie das--identity-config-fileFlag verwenden, um eine lokale oder Cloud Storage-YAML-Datei anzugeben, die die Zuordnungen enthält. Jede Zeile in der Zuordnungsdatei ordnet ein Nutzerkonto einem Dienstkonto zu. Die erste Zeile enthält den Header--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:.user_service_account_mapping: UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": Mit diesem Attribut können Sie Nutzer für den mehrmandantenfähigen Cluster hinzufügen oder entfernen, ohne den Cluster neu erstellen zu müssen (siehe Nutzer für mehrmandantenfähigen Cluster aktualisieren).Empfehlung: Da YARN erhebliche Clusterressourcen für jeden Notebook-Kernel verbraucht, der in einem mehrmandantenfähigen Cluster ausgeführt wird, fügen Sie Spark- und YARN-Attribute hinzu, um die Ressourcenzuweisung zu erhöhen.
Beispiel:
--properties=" \ spark:spark.driver.memory=5g,\ spark:spark.executor.memory=5g,\ spark:spark.executor.cores=200, \ capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
CLUSTER_SERVICE_ACCOUNT (Optional): Sie können mit dem
--service-account flagein benutzerdefiniertes VM-Dienstkonto für den Cluster angeben. Wenn Sie dieses Flag weglassen, wird das Standard-VM-Dienstkonto des Clusters,PROJECT_NUMBER-compute@developer.gserviceaccount.com, verwendet.Empfehlung:Verwenden Sie unterschiedliche Cluster-Dienstkonten für verschiedene Cluster, damit jedes VM-Dienstkonto des Clusters nur die Identität einer begrenzten Gruppe zugeordneter Nutzer-Dienstkonten übernehmen kann.
--scopes=https://www.googleapis.com/auth/iamist erforderlich, damit das Cluster-Dienstkonto die Identität übernehmen kann.--enable-component-gatewayund--optional-components=JUPYTER_KERNEL_GATEWAY: Wenn Sie das Managed Service for Apache Spark-Component Gateway und das Jupyter Kernel Gateway aktivieren, können mehrere Nutzer ihre Jupyter-Notebooks mit dem mehrmandantenfähigen Cluster verbinden.
API
Verwenden Sie das SecurityConfig.IdentityConfig.userServiceAccountMapping field
, um eine Liste von Zuordnungen von Nutzerkonten zu Dienstkonten anzugeben.
IAM-Berechtigungen (Identity and Access Management) erteilen
Wenn Sie Nutzer-Notebooks mit Notebook-Kerneln verbinden möchten, die in einem mehrmandantenfähigen Cluster ausgeführt werden, müssen zugeordnete Nutzer, zugeordnete Dienstkonten und das VM-Dienstkonto des Clusters die IAM-Berechtigungen haben, die für den Zugriff auf Ressourcen erforderlich sind.
Berechtigungen für zugeordnete Nutzer
Jeder zugeordnete Nutzer muss die Berechtigungen dataproc.clusters.get und dataproc.clusters.use haben, die erforderlich sind, damit der Nutzer auf Notebook-Kernel zugreifen und eine Verbindung zu ihnen herstellen kann, die in dem mehrmandantenfähigen Cluster ausgeführt werden. Sie können die
Managed Service for Apache Spark-Bearbeiter Rolle (roles/dataproc.editor),
die diese Berechtigungen enthält (siehe Einzelne IAM-Rolle zuweisen),
oder eine benutzerdefinierte Rolle erstellen mit diesen
Berechtigungen zuweisen.
Berechtigungen für zugeordnete Dienstkonten
Jedes zugeordnete Dienstkonto muss die Berechtigungen haben, die für die Notebook-Anwendung des zugeordneten Nutzers erforderlich sind, z. B. Zugriff auf einen Cloud Storage-Bucket oder Zugriff auf eine BigQuery-Tabelle (siehe Zugriff auf Dienstkonten verwalten).
Berechtigungen für VM-Dienstkonten
Das mehrmandantenfähige Cluster
VM-Dienstkonto
muss die iam.serviceAccounts.getAccessToken Berechtigung
für jedes zugeordnete Dienstkonto haben. Sie können die
Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zuweisen, die diese Berechtigung enthält (siehe Zugriff auf Dienstkonten verwalten),
oder eine benutzerdefinierte Rolle mit dieser Berechtigung erstellen.
Informationen zu anderen VM-Dienstkontorollen finden Sie unter VM-Dienstkonto für Managed Service for Apache Spark.
Jupyter-Notebooks mit einem Kernel für mehrmandantenfähige Cluster verbinden
Zugeordnete Nutzer von mehrmandantenfähigen Clustern können ihr Vertex AI Workbench- oder nutzerverwaltetes Jupyter-Notebook mit den Kerneln verbinden, die in dem mehrmandantenfähigen Cluster installiert sind.
Vertex AI-Notebook
So erstellen Sie ein Jupyter-Notebook und verbinden es mit dem mehrmandantenfähigen Cluster:
- Vertex AI Workbench-Instanz erstellen.
- Klicken Sie auf dem Tab „Workbench-Instanzen“ für Ihre Instanz auf den Link „JupyterLab öffnen“.
- Klicken Sie unter Dataproc-Cluster-Notebooks auf die
PySpark (YARN-Cluster) auf
MULTI_TENANCY_CLUSTER_NAMEKarte, um eine Verbindung zu einem neuen Jupyter PySpark-Notebook herzustellen und es zu starten.
Nutzerverwaltetes Notebook
Wenn Sie ein nutzerverwaltetes Jupyter-Notebook erstellen und mit Ihrem mehrmandantenfähigen Managed Service for Apache Spark -Cluster verbinden möchten, folgen Sie der Anleitung unter JupyterLab-Erweiterung auf Ihrer nutzerverwalteten VM installieren.
Nutzer für mehrmandantenfähigen Cluster aktualisieren (Vorschau)
Wenn Sie das dataproc:dataproc.dynamic.multi.tenancy.enabled Clusterattribut
auf true setzen, wenn Sie einen mehrmandantenfähigen Cluster erstellt haben, können Sie nach der Clustererstellung Nutzer für den mehrmandantenfähigen Cluster hinzufügen, entfernen oder ersetzen.
Nutzer hinzufügen
Mit dem folgenden Aktualisierungsbefehl werden mit dem Flag --add-user-mappings zwei neue Zuordnungen von Nutzerkonten zu Dienstkonten zum sicheren mehrmandantenfähigen Cluster hinzugefügt.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com
Nutzer entfernen
Mit dem folgenden Aktualisierungsbefehl werden mit dem Flag --remove-user-mappings zwei Nutzer aus dem mehrmandantenfähigen Cluster entfernt. Das Flag akzeptiert die Nutzerkonten der zu entfernenden Nutzer.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
Nutzer ersetzen
Sie können den Befehl „update“ mit dem Flag --identity-config-file verwenden, um die vorhandene Gruppe von Nutzern durch eine neue Gruppe zu ersetzen. Mit diesem Flag können Sie mit einem einzigen Aktualisierungsbefehl Nutzer hinzufügen und entfernen.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
Hinweise:
--identity-config-file: Geben Sie eine lokale oder Cloud Storage-YAML-Datei an, die die neuen Zuordnungen von Nutzerkonten zu Dienstkonten enthält. Jede Zeile in der Zuordnungsdatei ordnet ein Nutzerkonto einem Dienstkonto zu. Die erste Zeile enthält den Header--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:.user_service_account_mapping: new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com