AI Platform Pipelines를 위한 Google Kubernetes Engine 클러스터 구성

AI Platform Pipelines는 다음 작업의 어려움을 덜어줌으로써 Google Kubernetes Engine에서 TensorFlow Extended로 Kubeflow Pipelines를 쉽게 시작할 수 있게 해 줍니다.

  • GKE 클러스터 만들기
  • GKE 클러스터에 Kubeflow Pipelines 배포
  • 파이프라인 아티팩트 저장에 사용할 Cloud Storage 버킷 만들기

필요에 따라 Kubeflow Pipelines가 아직 설치되지 않은 기존 클러스터에서 AI Platform Pipelines를 사용하여 Kubeflow Pipelines를 배포할 수 있습니다. 이 가이드에 따라 Kubeflow Pipelines 배포 및 실행을 위해 클러스터가 올바르게 구성되었는지 확인할 수 있습니다.

GKE 클러스터에 AI Platform Pipelines를 위한 리소스가 충분한지 확인합니다.

GKE 클러스터에서 Google Cloud Marketplace를 사용하여 Kubeflow Pipelines를 배포하려면 다음 조건을 충족해야 합니다.

  • 클러스터에 노드가 3개 이상 있어야 합니다. 각 노드에는 최소 2개의 CPU와 4GB의 메모리가 있어야 합니다.
  • 클러스터의 액세스 범위는 모든 Cloud APIs에 대한 전체 액세스 권한이 부여되거나 클러스터가 커스텀 서비스 계정을 사용해야 합니다.
  • 클러스터에 아직 Kubeflow Pipelines가 설치되지 않은 상태여야 합니다.

다음 안내에 따라 클러스터에 AI Platform 파이프라인을 설치하기 위한 리소스가 충분한지 확인하세요.

  1. Google Cloud Console에서 AI Platform 파이프라인을 엽니다.

    AI Platform 파이프라인으로 이동

  2. AI Platform Pipelines 툴바에서 새 인스턴스를 클릭합니다. Google Cloud Marketplace에서 Kubeflow Pipelines가 열립니다.

  3. 구성을 클릭합니다. Kubeflow Pipelines 배포 양식이 열립니다.

  4. 클러스터를 클릭하여 목록을 펼칩니다. 리소스 또는 권한이 부족한 GKE 클러스터는 부적격 클러스터로 나열됩니다. 각 부적격 클러스터에는 다음과 같이 Kubeflow Pipelines를 설치할 수 없는 이유에 대한 설명이 포함되어 있습니다.

GKE 클러스터에 리소스 추가 할당

Google Cloud Marketplace에서 기존 GKE 클러스터로 Kubeflow Pipelines를 설치하려면 2개의 CPU와 4GB의 메모리를 사용할 수 있는 3개 이상의 노드가 클러스터에 있어야 합니다.

다음 안내에 따라 클러스터의 노드 풀을 AI Platform 파이프라인에 충분한 CPU 및 메모리 리소스가 있는 노드 풀로 바꾸세요.

  1. Google Cloud Console에서 Google Kubernetes Engine 클러스터를 엽니다.

    GKE 클러스터로 이동

  2. 클러스터 이름을 클릭합니다. 클러스터 세부정보가 표시됩니다.

  3. GKE 툴바에서 노드 풀 추가를 클릭합니다. 새 노드 풀 추가 양식이 열립니다.

  4. 새 노드 풀 추가 양식에 다음 정보를 입력합니다.

    • 노드 수: 노드 풀에 있는 노드 수를 지정합니다. Google Cloud Marketplace를 사용하여 Kubeflow Pipelines를 설치하려면 클러스터에 노드가 3개 이상 있어야 합니다.
    • 머신 유형: 노드 풀의 인스턴스에 사용할 Compute Engine 머신 유형을 지정합니다. CPU 2개 이상 메모리 4GB 이상이 포함된 머신 유형을 선택합니다(예: n1-standard-2).

    • 액세스 범위: 액세스 범위에서 모든 Cloud API에 대한 전체 액세스 허용을 클릭합니다.

    그렇지 않으면 원하는 대로 노드 풀을 구성합니다. 클러스터에 노드 풀 추가에 대해 자세히 알아보세요.

  5. 노드 풀 만들기를 클릭합니다. 노드 풀을 만들려면 몇 분 정도 걸립니다.

  6. 이전 단계에서 만든 노드 풀을 제외하고 노드 풀 섹션의 각 노드 풀에 대해 삭제를 클릭합니다. 이 노드 풀 삭제를 확인하는 노드 풀 삭제 대화상자가 표시됩니다.

  7. 삭제를 클릭합니다. 노드 풀을 삭제하려면 몇 분 정도 걸립니다.

  8. 이전 노드 풀이 삭제되었으면 Google Cloud Marketplace에서 Kubeflow Pipelines를 설치하기 위한 충분한 리소스 및 액세스 권한이 클러스터에 있는지 확인합니다.

GKE 클러스터에 Google Cloud 리소스 및 API에 대한 액세스 권한 부여

ML 파이프라인에 Google Cloud 리소스 및 API에 대한 액세스 권한을 부여하는 방법은 세 가지입니다.

AI Platform 파이프라인을 배포하는 경우 GKE 클러스터에 Google Cloud 리소스 및 API에 대한 전체 액세스 권한을 부여하거나, 서비스 계정을 사용하여 클러스터에 Google Cloud에 대한 액세스 권한을 부여해야 합니다.

Google Cloud API에 대한 전체 액세스 권한으로 GKE 클러스터 구성

ML 파이프라인 및 다른 GKE 클러스터 워크로드가 프로젝트의 Google Cloud 리소스에 더 쉽게 액세스할 수 있도록 클러스터를 https://www.googleapis.com/auth/cloud-platform 액세스 범위로 구성합니다. 이 액세스 범위는 프로젝트에서 사용 설정한 Google Cloud 리소스 및 API에 대한 전체 액세스 권한을 제공합니다. 권한을 부여하는 이 액세스 범위가 Google Cloud에 과도한 액세스 권한을 제공하는 경우 서비스 계정을 사용하여 세분화된 액세스를 구성합니다.

다음 안내에 따라 클러스터의 노드 풀을 이 클러스터의 모든 워크로드가 프로젝트에 사용 설정된 모든 Google Cloud API에 액세스할 수 있도록 하는 노드 풀로 바꿉니다. GKE 클러스터를 변경하기 전에 변경사항을 GKE 관리자와 상의합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 클러스터를 엽니다.

    GKE 클러스터로 이동

  2. 클러스터 이름을 클릭합니다. 클러스터 세부정보가 표시됩니다.

  3. GKE 툴바에서 노드 풀 추가를 클릭합니다. 새 노드 풀 추가 양식이 열립니다.

  4. 새 노드 풀 추가 양식에 다음 정보를 입력합니다.

    • 노드 수: 노드 풀에 있는 노드 수를 지정합니다. Google Cloud Marketplace를 사용하여 Kubeflow Pipelines를 설치하려면 클러스터에 노드가 3개 이상 있어야 합니다.
    • 머신 유형: 노드 풀의 인스턴스에 사용할 Compute Engine 머신 유형을 지정합니다. CPU 2개 이상 메모리 4GB 이상이 포함된 머신 유형을 선택합니다(예: n1-standard-2).

    • 액세스 범위: 액세스 범위에서 모든 Cloud API에 대한 전체 액세스 허용을 클릭합니다.

    그렇지 않으면 원하는 대로 노드 풀을 구성합니다. 클러스터에 노드 풀 추가에 대해 자세히 알아보세요.

  5. 노드 풀 만들기를 클릭합니다. 노드 풀을 만들려면 몇 분 정도 걸립니다.

  6. 이전 단계에서 만든 노드 풀을 제외하고 노드 풀 섹션의 각 노드 풀에 대해 삭제를 클릭합니다. 이 노드 풀 삭제를 확인하는 노드 풀 삭제 대화상자가 표시됩니다.

  7. 삭제를 클릭합니다. 노드 풀을 삭제하려면 몇 분 정도 걸립니다.

  8. 이전 노드 풀이 삭제되었으면 Google Cloud Marketplace에서 Kubeflow Pipelines를 설치하기 위한 충분한 리소스 및 액세스 권한이 클러스터에 있는지 확인합니다.

Google Cloud API에 대한 세분화된 액세스 권한으로 GKE 클러스터 구성

다음 안내에 따라 GKE 클러스터의 서비스 계정을 구성하고 클러스터의 노드 풀을 서비스 계정을 사용하는 노드 풀로 바꿉니다. 서비스 계정을 만들면 클러스터의 워크로드가 액세스할 수 있는 Google Cloud 리소스를 세부적으로 관리할 수 있습니다. GKE 클러스터를 변경하기 전에 변경사항을 GKE 관리자와 상의합니다.

  1. Cloud Shell 세션을 엽니다.

    Cloud Shell 열기

    Cloud Shell이 Google Cloud Console 하단의 프레임에 열립니다.

  2. Cloud Shell에서 다음 명령어를 실행하여 서비스 계정을 만들고 AI Platform 파이프라인을 실행할 수 있는 충분한 액세스 권한을 부여합니다. 사용자 관리형 서비스 계정으로 AI Platform 파이프라인을 실행하는 데 필요한 역할을 자세히 알아보세요.

    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

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 만들 서비스 계정의 이름입니다.
    • PROJECT_ID: 서비스 계정이 생성된 Google Cloud 프로젝트입니다.
  3. ML 파이프라인에 필요한 모든 Google Cloud 리소스 또는 API에 대한 액세스 권한을 서비스 계정에 부여합니다. ID 및 액세스 관리 역할서비스 계정 관리에 대해 자세히 알아보세요.

  4. 사용자 계정에 서비스 계정에 대한 서비스 계정 사용자(iam.serviceAccountUser) 역할을 부여합니다.

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

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.
    • PROJECT_ID: Google Cloud 프로젝트입니다.
    • USERNAME: Google Cloud의 사용자 이름입니다.
  5. Google Cloud Console에서 Google Kubernetes Engine 클러스터를 엽니다.

    GKE 클러스터로 이동

  6. 클러스터 이름을 클릭합니다. 클러스터 세부정보가 표시됩니다.

  7. GKE 툴바에서 노드 풀 추가를 클릭합니다. 새 노드 풀 추가 양식이 열립니다.

  8. 새 노드 풀 추가 양식에 다음 정보를 입력합니다.

    • 노드 수: 노드 풀에 있는 노드 수를 지정합니다. Google Cloud Marketplace를 사용하여 Kubeflow Pipelines를 설치하려면 클러스터에 노드가 3개 이상 있어야 합니다.
    • 머신 유형: 노드 풀의 인스턴스에 사용할 Compute Engine 머신 유형을 지정합니다. CPU 2개 이상 메모리 4GB 이상이 포함된 머신 유형을 선택합니다(예: n1-standard-2).

    • 서비스 계정: 이전 단계에서 만든 서비스 계정을 선택합니다.

    그렇지 않으면 원하는 대로 노드 풀을 구성합니다. 클러스터에 노드 풀 추가에 대해 자세히 알아보세요.

  9. 노드 풀 만들기를 클릭합니다. 노드 풀을 만들려면 몇 분 정도 걸립니다.

  10. 이전 단계에서 만든 노드 풀을 제외하고 노드 풀 섹션의 각 노드 풀에 대해 삭제를 클릭합니다. 이 노드 풀 삭제를 확인하는 노드 풀 삭제 대화상자가 표시됩니다.

  11. 삭제를 클릭합니다. 노드 풀을 삭제하려면 몇 분 정도 걸립니다.

  12. 이전 노드 풀이 삭제되었으면 Google Cloud Marketplace에서 Kubeflow Pipelines를 설치하기 위한 충분한 리소스 및 액세스 권한이 클러스터에 있는지 확인합니다.

Kubernetes 보안 비밀을 사용하여 클러스터에 Google Cloud 리소스 및 API에 대한 액세스 권한을 부여합니다.

Kubeflow Pipelines SDK의 use_gcp_secret 연산자를 사용하여 개발된 파이프라인은 Kubernetes 보안 비밀을 사용하여 Google Cloud 리소스에 인증됩니다.

이 안내에 따라 서비스 계정을 만들고, 파이프라인에 사용되는 리소스 액세스 권한을 계정에 부여하고, 서비스 계정을 클러스터에 Kubernetes 보안 비밀로 추가합니다.

  1. Google Cloud Console에서 Google Kubernetes Engine 클러스터를 엽니다.

    GKE 클러스터로 이동

  2. 클러스터 행에서 클러스터 이름과 영역을 찾습니다.

  3. Cloud Shell 세션을 엽니다.

    Cloud Shell 열기

    Cloud Shell이 Google Cloud Console 하단의 프레임에 열립니다. Cloud Shell을 사용하여 이 프로세스의 나머지를 완료합니다.

  4. 다음 환경 변수를 설정합니다.

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

    다음을 바꿉니다.

    • PROJECT_ID: GKE 클러스터가 생성된 Google Cloud 프로젝트입니다.
    • ZONE: GKE 클러스터가 생성된 Google Cloud 영역입니다.
    • CLUSTER_NAME: GKE 클러스터의 이름입니다.
    • NAMESPACE: Kubeflow Pipelines가 설치된 GKE 클러스터의 네임스페이스입니다.

      네임스페이스는 대규모 Kubernetes 클러스터에서 리소스 관리를 위해 사용됩니다. 클러스터에 네임스페이스가 사용되지 않으면 kubernetes-namespacedefault를 입력합니다.

    • SERVICE_ACCOUNT_NAME: Kubeflow Pipelines 클러스터가 Google Cloud 리소스 및 API에 액세스할 수 있도록 만드는 서비스 계정의 이름입니다.

  5. 클러스터의 서비스 계정을 만듭니다.

    gcloud iam service-accounts create $SA_NAME \
      --display-name $SA_NAME --project "$PROJECT_ID"
    
  6. 서비스 계정에 Google Cloud 리소스에 대한 액세스 권한을 부여하려면 ID 및 액세스 관리 역할을 서비스 계정에 결합합니다. 다음 안내에 따라 서비스 계정에 IAM 역할을 부여합니다. 서비스 계정에 부여하려는 역할마다 다음 명령어를 한 번씩 호출합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member=serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
      --role=iam-role
    
    • iam-role: 서비스 계정에 부여할 IAM 역할입니다. 예를 들어 roles/storage.admin은 프로젝트에서 Cloud Storage 버킷 및 객체에 대한 모든 제어 권한을 부여합니다.

      IAM 역할에 대해 자세히 알아보려면 IAM 역할 이해 가이드를 참조하세요.

  7. 현재 디렉터리에서 서비스 계정의 비공개 키를 만듭니다.

    gcloud iam service-accounts keys create ./service-account-key.json \
    --iam-account $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  8. 클러스터에 연결하도록 kubectl을 구성한 다음 user-gcp-sa Kubernetes 보안 비밀을 만듭니다.

    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. 서비스 계정의 비공개 키를 삭제합니다.

    rm ./service-account-key.json