Como configurar um cluster do Google Kubernetes Engine para pipelines da AI Platform

Os pipelines da AI Platform facilitam o uso dos pipelines do Kubeflow com o TensorFlow Extended no Google Kubernetes Engine, evitando que você:

  • crie um cluster do GKE;
  • implante pipelines do Kubeflow no cluster do GKE;
  • crie um intervalo do Cloud Storage para armazenar artefatos de pipeline.

Se preferir, é possível usar os pipelines da AI Platform para implantar pipelines do Kubeflow em um cluster existente que ainda não tem pipelines do Kubeflow instalados. Use este guia para garantir que o cluster seja configurado corretamente para implantar e executar pipelines do Kubeflow.

Verifique se o cluster do GKE tem recursos suficientes para os pipelines da IA Platform

Para usar o Google Cloud Marketplace na implantação de pipelines do Kubeflow em um cluster do GKE, os critérios a seguir precisam ser atendidos:

  • Seu cluster precisa ter pelo menos três nós. Cada nó precisa ter pelo menos duas CPUs e quatro GB de memória disponíveis.
  • O escopo de acesso do cluster precisa conceder acesso total a todas as APIs do Cloud ou o cluster precisa usar uma conta de serviço personalizada.
  • O cluster ainda não pode ter o Kubeflow Pipelines instalado.
  • O cluster precisa estar na versão 1.18 ou anterior do Google Kubernetes Engine.

Use as instruções a seguir para verificar se o cluster tem recursos suficientes para instalar os pipelines da AI Platform.

  1. Abra o AI Platform Pipelines no Console do Google Cloud.

    Acesse o AI Platform Pipelines

  2. Na barra de ferramentas dos pipelines do AI Platform, clique em Nova instância. Os pipelines do Kubeflow serão abertos no Google Cloud Marketplace.

  3. Clique em Configurar. O formulário Implantar pipelines do Kuberflow (em inglês) será aberto.

  4. Clique em Cluster para expandir a lista. Os clusters do GKE que não têm recursos ou permissões suficientes são listados como Clusters não qualificados. Cada cluster não qualificado inclui uma descrição do motivo pelo qual os pipelines do Kubeflow não podem ser instalados, como:

Alocar mais recursos ao cluster do GKE

Para instalar pipelines do Kubeflow do Google Cloud Marketplace em um cluster existente do GKE, o cluster precisa ter pelo menos três nós com 2 CPUs e 4 GB disponíveis.

Use as instruções a seguir para substituir o pool de nós em seu cluster por um que tenha CPU e recursos de memória suficientes para os pipelines da AI Platform.

  1. Abra os clusters do Google Kubernetes Engine no Console do Google Cloud.

    Acesse os clusters do GKE

  2. Clique no nome do cluster. Os detalhes do cluster serão exibidos.

  3. Na barra de ferramentas do GKE, clique em Adicionar pool de nós. O formulário Adicionar um novo pool de nós será aberto.

  4. Forneça as seguintes informações no formulário Adicionar um novo pool de nós.

    • Número de nós: especifique o número de nós no seu pool de nós. O cluster precisa ter três ou mais nós para instalar pipelines do Kubeflow usando o Google Cloud Marketplace.
    • Tipo de máquina: especifique o tipo de máquina do Compute Engine para usar em instâncias no pool de nós. Selecione um tipo de máquina com pelo menos 2 CPUs e 4 GB de memória, como n1-standard-2.

    • Escopos de acessos: clique em Permitir acesso total a todas as APIs do Cloud nos Escopos de acesso.

    Caso contrário, configure o pool de nós conforme preferir. Saiba mais sobre como adicionar pools de nós a um cluster (em inglês).

  5. Clique em Criar pool de nós. A criação do pool de nós leva vários minutos.

  6. Para cada pool de nós na seção Pool de nós, exceto para o pool de nós criado na etapa anterior, clique em excluir. A caixa de diálogo Excluir um pool de nós será exibida para confirmar se você quer excluir este pool de nós.

  7. Clique em Delete. A exclusão do pool de nós leva vários minutos.

  8. Depois de excluir os pools de nós antigos, verifique se o cluster tem recursos e acesso suficientes para instalar os pipelines do Kubeflow a partir do Google Cloud Marketplace.

Conceda ao cluster do GKE acesso aos recursos e APIs do Google Cloud

Existem três maneiras de conceder acesso aos recursos e às APIs do Google Cloud aos seus pipelines de ML:

Ao implantar o AI Platform Pipelines, você precisa conceder ao cluster do GKE acesso total aos recursos e APIs do Google Cloud ou conceder ao cluster acesso ao Google Cloud usando uma conta de serviço.

Como configurar o cluster do GKE com acesso total às APIs do Google Cloud

Para facilitar o acesso dos recursos do Google Cloud do projeto aos pipelines de ML e a outras cargas de trabalho do cluster do GKE, configure o cluster para o escopo de acesso https://www.googleapis.com/auth/cloud-platform. Esse escopo de acesso fornece acesso total aos recursos e às APIs do Google Cloud que você ativou no projeto. Se a concessão desse escopo de acesso fornecer acesso excessivo ao Google Cloud, configure o acesso granular usando uma conta de serviço.

Use as instruções a seguir para substituir o pool de nós do cluster por um que permita que todas as cargas de trabalho nesse cluster acessem todas as APIs do Google Cloud ativadas no projeto. Antes de alterar o cluster do GKE, discuta essas alterações com o administrador do GKE.

  1. Abra os clusters do Google Kubernetes Engine no Console do Google Cloud.

    Acesse os clusters do GKE

  2. Clique no nome do cluster. Os detalhes do cluster serão exibidos.

  3. Na barra de ferramentas do GKE, clique em Adicionar pool de nós. O formulário Adicionar um novo pool de nós será aberto.

  4. Forneça as seguintes informações no formulário Adicionar um novo pool de nós.

    • Número de nós: especifique o número de nós no seu pool de nós. O cluster precisa ter três ou mais nós para instalar pipelines do Kubeflow usando o Google Cloud Marketplace.
    • Tipo de máquina: especifique o tipo de máquina do Compute Engine para usar em instâncias no pool de nós. Selecione um tipo de máquina com pelo menos 2 CPUs e 4 GB de memória, como n1-standard-2.

    • Escopos de acessos: clique em Permitir acesso total a todas as APIs do Cloud nos Escopos de acesso.

    Caso contrário, configure o pool de nós conforme preferir. Saiba mais sobre como adicionar pools de nós a um cluster (em inglês).

  5. Clique em Criar pool de nós. A criação do pool de nós leva vários minutos.

  6. Para cada pool de nós na seção Pool de nós, exceto para o pool de nós criado na etapa anterior, clique em excluir. A caixa de diálogo Excluir um pool de nós será exibida para confirmar se você quer excluir este pool de nós.

  7. Clique em Delete. A exclusão do pool de nós leva vários minutos.

  8. Depois de excluir os pools de nós antigos, verifique se o cluster tem recursos e acesso suficientes para instalar os pipelines do Kubeflow a partir do Google Cloud Marketplace.

Como configurar o cluster do GKE com acesso granular às APIs do Google Cloud

Use as instruções a seguir para configurar uma conta de serviço do cluster do GKE e substituir o pool de nós do cluster por um que use a conta de serviço. Ao criar uma conta de serviço, você pode gerenciar de forma granular quais recursos do Google Cloud podem acessar as cargas de trabalho no cluster. Antes de alterar o cluster do GKE, discuta essas alterações com o administrador do GKE.

  1. Abra uma sessão do Cloud Shell.

    Abra o Cloud Shell

    O Cloud Shell é aberto em um frame na parte inferior do Console do Google Cloud.

  2. Execute os comandos a seguir no Cloud Shell para criar sua conta de serviço e conceder a ela acesso suficiente para executar o AI Platform Pipelines. Saiba mais sobre os papéis necessários para executar o AI Platform Pipelines com uma conta de serviço gerenciada pelo usuário.

    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

    Substitua:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço a ser criada
    • PROJECT_ID: o projeto do Google Cloud onde a conta de serviço é criada
  3. Conceda à conta de serviço acesso a todos os recursos ou APIs do Google Cloud que os pipelines de ML exigem. Saiba mais sobre os papéis de Gerenciamento de identidade e acesso e gerenciamento de contas de serviço.

  4. Conceda à conta de usuário o papel "Usuário da conta de serviço" (iam.serviceAccountUser) na conta de serviço.

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

    Substitua:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço
    • PROJECT_ID: o projeto do Google Cloud
    • USERNAME: seu nome de usuário no Google Cloud
  5. Abra os clusters do Google Kubernetes Engine no Console do Google Cloud.

    Acesse os clusters do GKE

  6. Clique no nome do cluster. Os detalhes do cluster serão exibidos.

  7. Na barra de ferramentas do GKE, clique em Adicionar pool de nós. O formulário Adicionar um novo pool de nós será aberto.

  8. Forneça as seguintes informações no formulário Adicionar um novo pool de nós.

    • Número de nós: especifique o número de nós no seu pool de nós. O cluster precisa ter três ou mais nós para instalar pipelines do Kubeflow usando o Google Cloud Marketplace.
    • Tipo de máquina: especifique o tipo de máquina do Compute Engine para usar em instâncias no pool de nós. Selecione um tipo de máquina com pelo menos 2 CPUs e 4 GB de memória, como n1-standard-2.

    • Conta de serviço: selecione a conta de serviço que você criou em uma etapa anterior.

    Caso contrário, configure o pool de nós conforme preferir. Saiba mais sobre como adicionar pools de nós a um cluster (em inglês).

  9. Clique em Criar pool de nós. A criação do pool de nós leva vários minutos.

  10. Para cada pool de nós na seção Pool de nós, exceto para o pool de nós criado na etapa anterior, clique em excluir. A caixa de diálogo Excluir um pool de nós será exibida para confirmar se você quer excluir este pool de nós.

  11. Clique em Delete. A exclusão do pool de nós leva vários minutos.

  12. Depois de excluir os pools de nós antigos, verifique se o cluster tem recursos e acesso suficientes para instalar os pipelines do Kubeflow a partir do Google Cloud Marketplace.

Use um secret do Kubernetes para conceder ao cluster acesso aos recursos e APIs do Google Cloud

Os pipelines desenvolvidos usando o operador use_gcp_secret no SDK de pipelines do Kubeflow são autenticados para recursos do Google Cloud usando um secret do Kubernetes.

Use estas instruções para criar uma conta de serviço, conceder a ela acesso aos recursos usados pelos pipelines e adicioná-la ao cluster como um secret do Kubernetes.

  1. Abra os clusters do Google Kubernetes Engine no Console do Google Cloud.

    Acesse os clusters do GKE

  2. Na linha do cluster, localize o nome e a zona do cluster.

  3. Abra uma sessão do Cloud Shell.

    Abra o Cloud Shell

    O Cloud Shell é aberto em um frame na parte inferior do Console do Google Cloud. Use o Cloud Shell para concluir o restante deste processo.

  4. Defina as seguintes variáveis de ambiente.

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

    Substitua:

    • PROJECT_ID: o projeto do Google Cloud onde o cluster do GKE foi criado
    • ZONE: a zona do Google Cloud em que o cluster do GKE foi criado
    • CLUSTER_NAME: o nome do cluster do GKE
    • NAMESPACE: o namespace no cluster do GKE onde o Kubeflow Pipelines está instalado.

      Os namespaces são usados para gerenciar recursos em grandes clusters do Kubernetes. Se o cluster não usar namespaces, insira default como kubernetes-namespace.

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço a ser criada para o cluster de pipelines do Kubeflow acessar os recursos e as APIs do Google Cloud.

  5. Crie uma conta de serviço para o cluster.

    gcloud iam service-accounts create $SA_NAME \
      --display-name $SA_NAME --project "$PROJECT_ID"
    
  6. Para conceder à sua conta de serviço acesso aos recursos do Google Cloud, vincule os papéis do gerenciamento de identidade e acesso à conta de serviço. Use as instruções a seguir para conceder papéis do IAM à sua conta de serviço. Execute esse comando uma vez para cada papel que quer conceder à conta de serviço.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member=serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
      --role=iam-role
    
    • iam-role: o papel do IAM a ser concedido à conta de serviço. Por exemplo, roles/storage.admin concede controle total dos intervalos e objetos do Cloud Storage no seu projeto.

      Para saber mais sobre papéis do IAM, leia o guia para entender os papéis do IAM.

  7. Crie uma chave privada para sua conta de serviço no diretório atual.

    gcloud iam service-accounts keys create ./service-account-key.json \
    --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  8. Configure kubectl para se conectar ao cluster. Em seguida, crie o secret do 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. Apague a chave privada da conta de serviço.

    rm ./service-account-key.json