Configurazione di un cluster Google Kubernetes Engine per AI Platform Pipelines

AI Platform Pipelines semplifica l'uso di Kubeflow Pipelines con TensorFlow Extended su Google Kubernetes Engine risparmiandoti la difficoltà di:

  • Crea un cluster GKE
  • Deployment di pipeline Kubeflow nel cluster GKE
  • Creazione di un bucket Cloud Storage da utilizzare per archiviare gli artefatti della pipeline

Se preferisci, puoi utilizzare AI Platform Pipelines per eseguire il deployment di Kubeflow Pipelines su un cluster esistente in cui non è ancora installato Kubeflow Pipelines. Usa questa guida per assicurarti che il cluster sia configurato correttamente per eseguire il deployment e le pipeline di Kubeflow.

Assicurati che il cluster GKE abbia risorse sufficienti per AI Platform Pipelines

Per utilizzare Google Cloud Marketplace per eseguire il deployment delle pipeline di Kubeflow su un cluster GKE, devi soddisfare quanto segue:

  • Il cluster deve avere almeno 3 nodi. Ogni nodo deve avere almeno 2 CPU e 4 GB di memoria disponibili.
  • L'ambito di accesso del cluster deve concedere l'accesso completo a tutte le API Cloud oppure il cluster deve utilizzare un account di servizio personalizzato.
  • Nel cluster non deve essere già installato Kubeflow Pipelines.

Utilizza le istruzioni seguenti per verificare se il cluster dispone di risorse sufficienti per installare AI Platform Pipelines.

  1. Apri AI Platform Pipelines nella console Google Cloud.

    Vai ad AI Platform Pipelines

  2. Nella barra degli strumenti di AI Platform Pipelines, fai clic su Nuova istanza. Kubeflow Pipelines si apre in Google Cloud Marketplace.

  3. Fai clic su Configura. Si apre il modulo Esegui il deployment delle pipeline di Kubeflow.

  4. Fai clic su Cluster per espandere l'elenco. I cluster GKE che non dispongono di risorse o autorizzazioni sufficienti sono elencati come Cluster non idonei. Ogni cluster non idoneo include una descrizione del motivo per cui non è possibile installare le pipeline Kubeflow, ad esempio:

Alloca più risorse al tuo cluster GKE

Per installare Kubeflow Pipelines da Google Cloud Marketplace a un cluster GKE esistente, il cluster deve avere almeno 3 nodi con 2 CPU e 4 GB disponibili.

Segui le istruzioni riportate di seguito per sostituire il pool di nodi nel cluster con uno che disponga di CPU e memoria sufficienti per AI Platform Pipelines.

  1. Apri i cluster Google Kubernetes Engine nella console Google Cloud.

    Vai ai cluster GKE

  2. Fai clic sul nome del cluster. Vengono visualizzati i dettagli del cluster.

  3. Nella barra degli strumenti di GKE, fai clic su Aggiungi pool di nodi. Si apre il modulo Aggiungi un nuovo pool di nodi.

  4. Fornisci le seguenti informazioni al modulo Aggiungi un nuovo pool di nodi.

    • Numero di nodi: specifica il numero di nodi nel pool di nodi. Il cluster deve avere 3 o più nodi per installare le pipeline di Kubeflow utilizzando Google Cloud Marketplace.
    • Tipo di macchina: specifica il tipo di macchina di Compute Engine da utilizzare per le istanze nel pool di nodi. Seleziona un tipo di macchina con almeno 2 CPU e 4 GB di memoria, ad esempio n1-standard-2.

    • Ambiti di accesso: fai clic su Consenti l'accesso completo a tutte le API Cloud in Ambiti di accesso.

    In caso contrario, configura il pool di nodi come preferisci. Scopri di più sull'aggiunta di pool di nodi a un cluster.

  5. Fai clic su Crea pool di nodi. La creazione del pool di nodi richiede diversi minuti.

  6. Per ogni pool di nodi nella sezione Pool di nodi, tranne per il pool di nodi creato nel passaggio precedente, fai clic su elimina. Viene visualizzata la finestra di dialogo Elimina un pool di nodi per confermare che vuoi eliminare questo pool di nodi.

  7. Fai clic su Elimina. L'eliminazione del pool di nodi richiede alcuni minuti.

  8. Dopo aver eliminato i vecchi pool di nodi, verifica che il cluster disponga di risorse e accesso sufficienti per installare le pipeline Kubeflow da Google Cloud Marketplace.

Concedi al tuo cluster GKE l'accesso alle risorse e alle API Google Cloud

Esistono tre modi per concedere alle tue pipeline ML l'accesso alle risorse e alle API di Google Cloud:

Quando esegui il deployment di AI Platform Pipelines, devi concedere al tuo cluster GKE l'accesso completo alle risorse e alle API Google Cloud o concedere al tuo cluster l'accesso a Google Cloud utilizzando un account di servizio.

Configurazione del cluster GKE con accesso completo alle API Google Cloud

Per consentire alle pipeline ML e ad altri carichi di lavoro dei cluster GKE di accedere più facilmente alle risorse Google Cloud del tuo progetto, configura il cluster nell'ambito di accesso https://www.googleapis.com/auth/cloud-platform. Questo ambito di accesso fornisce l'accesso completo alle risorse e alle API Google Cloud che hai abilitato nel tuo progetto. Se la concessione di questo ambito di accesso fornisce un accesso eccessivo a Google Cloud, configura l'accesso granulare utilizzando un account di servizio.

Segui le istruzioni riportate di seguito per sostituire il pool di nodi del cluster con uno che consente a tutti i carichi di lavoro in questo cluster di accedere a tutte le API Google Cloud abilitate nel progetto. Prima di cambiare il tuo cluster GKE, discuti di queste modifiche con l'amministratore GKE.

  1. Apri i cluster Google Kubernetes Engine nella console Google Cloud.

    Vai ai cluster GKE

  2. Fai clic sul nome del cluster. Vengono visualizzati i dettagli del cluster.

  3. Nella barra degli strumenti di GKE, fai clic su Aggiungi pool di nodi. Si apre il modulo Aggiungi un nuovo pool di nodi.

  4. Fornisci le seguenti informazioni al modulo Aggiungi un nuovo pool di nodi.

    • Numero di nodi: specifica il numero di nodi nel pool di nodi. Il cluster deve avere 3 o più nodi per installare le pipeline di Kubeflow utilizzando Google Cloud Marketplace.
    • Tipo di macchina: specifica il tipo di macchina di Compute Engine da utilizzare per le istanze nel pool di nodi. Seleziona un tipo di macchina con almeno 2 CPU e 4 GB di memoria, ad esempio n1-standard-2.

    • Ambiti di accesso: fai clic su Consenti l'accesso completo a tutte le API Cloud in Ambiti di accesso.

    In caso contrario, configura il pool di nodi come preferisci. Scopri di più sull'aggiunta di pool di nodi a un cluster.

  5. Fai clic su Crea pool di nodi. La creazione del pool di nodi richiede diversi minuti.

  6. Per ogni pool di nodi nella sezione Pool di nodi, tranne per il pool di nodi creato nel passaggio precedente, fai clic su elimina. Viene visualizzata la finestra di dialogo Elimina un pool di nodi per confermare che vuoi eliminare questo pool di nodi.

  7. Fai clic su Elimina. L'eliminazione del pool di nodi richiede alcuni minuti.

  8. Dopo aver eliminato i vecchi pool di nodi, verifica che il cluster disponga di risorse e accesso sufficienti per installare le pipeline Kubeflow da Google Cloud Marketplace.

Configurazione del cluster GKE con accesso granulare alle API Google Cloud

Segui le istruzioni riportate di seguito per configurare un account di servizio per il cluster GKE e sostituire il pool di nodi del cluster con uno che utilizza il tuo account di servizio. Creando un account di servizio, puoi gestire in modo dettagliato le risorse Google Cloud a cui hanno accesso i carichi di lavoro sul tuo cluster. Prima di cambiare il cluster GKE, discuti queste modifiche con il tuo amministratore GKE.

  1. Apri una sessione di Cloud Shell.

    Apri Cloud Shell

    Cloud Shell si apre in un frame nella parte inferiore della console Google Cloud.

  2. Esegui i comandi seguenti in Cloud Shell per creare l'account di servizio e concedergli un livello di accesso sufficiente per eseguire AI Platform Pipelines. Scopri di più sui ruoli richiesti per eseguire AI Platform Pipelines con un account di servizio gestito dall'utente.

    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

    Sostituisci quanto segue:

    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio da creare.
    • PROJECT_ID: il progetto Google Cloud in cui è stato creato l'account di servizio.
  3. Concedi al tuo account di servizio l'accesso a tutte le risorse o le API Google Cloud richieste dalle tue pipeline ML. Scopri di più sui ruoli di Identity and Access Management e sulla gestione degli account di servizio.

  4. Concedi al tuo account di servizio il ruolo Utente account di servizio (iam.serviceAccountUser) nel tuo account di servizio.

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

    Sostituisci quanto segue:

    • SERVICE_ACCOUNT_NAME: il nome del tuo account di servizio.
    • PROJECT_ID: il tuo progetto Google Cloud.
    • USERNAME: il tuo nome utente su Google Cloud.
  5. Apri i cluster Google Kubernetes Engine nella console Google Cloud.

    Vai ai cluster GKE

  6. Fai clic sul nome del cluster. Vengono visualizzati i dettagli del cluster.

  7. Nella barra degli strumenti di GKE, fai clic su Aggiungi pool di nodi. Si apre il modulo Aggiungi un nuovo pool di nodi.

  8. Fornisci le seguenti informazioni al modulo Aggiungi un nuovo pool di nodi.

    • Numero di nodi: specifica il numero di nodi nel pool di nodi. Il cluster deve avere 3 o più nodi per installare le pipeline di Kubeflow utilizzando Google Cloud Marketplace.
    • Tipo di macchina: specifica il tipo di macchina di Compute Engine da utilizzare per le istanze nel pool di nodi. Seleziona un tipo di macchina con almeno 2 CPU e 4 GB di memoria, ad esempio n1-standard-2.

    • Account di servizio: seleziona l'account di servizio creato in un passaggio precedente.

    In caso contrario, configura il pool di nodi come preferisci. Scopri di più sull'aggiunta di pool di nodi a un cluster.

  9. Fai clic su Crea pool di nodi. La creazione del pool di nodi richiede diversi minuti.

  10. Per ogni pool di nodi nella sezione Pool di nodi, tranne per il pool di nodi creato nel passaggio precedente, fai clic su elimina. Viene visualizzata la finestra di dialogo Elimina un pool di nodi per confermare che vuoi eliminare questo pool di nodi.

  11. Fai clic su Elimina. L'eliminazione del pool di nodi richiede alcuni minuti.

  12. Dopo aver eliminato i vecchi pool di nodi, verifica che il cluster disponga di risorse e accesso sufficienti per installare le pipeline Kubeflow da Google Cloud Marketplace.

Utilizza un secret Kubernetes per concedere al tuo cluster l'accesso alle risorse e alle API Google Cloud

Le pipeline sviluppate utilizzando l'operatore use_gcp_secret nell'SDK Kubeflow Pipelines vengono autenticate nelle risorse Google Cloud utilizzando un secret di Kubernetes.

Utilizza queste istruzioni per creare un account di servizio, concedergli l'accesso alle risorse utilizzate dalle tue pipeline e poi aggiungerlo al cluster come secret di Kubernetes.

  1. Apri i cluster Google Kubernetes Engine nella console Google Cloud.

    Vai ai cluster GKE

  2. Nella riga relativa al cluster, individua il nome e la zona del cluster.

  3. Apri una sessione di Cloud Shell.

    Apri Cloud Shell

    Cloud Shell si apre in un frame nella parte inferiore della console Google Cloud. Utilizza Cloud Shell per completare il resto del processo.

  4. Imposta le seguenti variabili di ambiente.

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

    Sostituisci quanto segue:

    • PROJECT_ID: il progetto Google Cloud in cui è stato creato il cluster GKE.
    • ZONE: la zona Google Cloud in cui è stato creato il cluster GKE.
    • CLUSTER_NAME: il nome del tuo cluster GKE.
    • NAMESPACE: lo spazio dei nomi nel cluster GKE in cui è installata la pipeline Kubeflow.

      Gli spazi dei nomi vengono utilizzati per gestire le risorse in cluster Kubernetes di grandi dimensioni. Se il cluster non utilizza gli spazi dei nomi, inserisci default come kubernetes-namespace.

    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio da creare affinché il cluster Kubeflow Pipelines possa accedere alle risorse e alle API di Google Cloud.

  5. Crea un account di servizio per il cluster.

    gcloud iam service-accounts create $SA_NAME \
      --display-name $SA_NAME --project "$PROJECT_ID"
    
  6. Per concedere al tuo account di servizio l'accesso alle risorse Google Cloud, associa i ruoli Identity and Access Management all'account di servizio. Utilizza le seguenti istruzioni per concedere i ruoli IAM al tuo account di servizio. Richiama questo comando una volta per ogni ruolo che vuoi concedere al tuo account di servizio.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member=serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
      --role=iam-role
    
    • iam-role: il ruolo IAM da concedere all'account di servizio. Ad esempio, roles/storage.admin concede il controllo completo dei bucket e degli oggetti Cloud Storage nel progetto.

      Per saperne di più sui ruoli IAM, leggi la guida per comprendere i ruoli IAM.

  7. Crea una chiave privata per il tuo account di servizio nella directory attuale.

    gcloud iam service-accounts keys create ./service-account-key.json \
    --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  8. Configura kubectl per la connessione al cluster, quindi crea il secret di Kubernetes user-gcp-sa.

    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. Pulisci la chiave privata dell'account di servizio.

    rm ./service-account-key.json