Kubeflow를 GCP로 설계해 보세요.

개요


로컬 환경에서Multipus(MicroK8s) on Mac로 Kubeflow 환경 구축 해봤어요.
노트북과 아티팩트 스토어가 안 나와서 눈물이 났어요.😫
GCP를 디자인하고 다양한 게임을 시도해 봤습니다.
기본적으로 아래 문서에 따라 실행하기만 하면 된다
3일 후에 확실히 잊어버릴 수 있으니 자신의 이해를 기억해 주십시오
https://www.kubeflow.org/docs/gke/deploy/management-setup/

GCP별 구현


대충 쓰면 5가지 시행감이 있어요.
  • GCP의 필수 API 주변의 유효성
  • OAuth의 CentID for IAP
  • 관리 클러스터 생성
  • Kubeflow 클러스터 생성
  • Kubeflow UI 액세스 준비
  • GCP에 필요한 API 주위에서 유효화


    $ gcloud services enable \
      compute.googleapis.com \
      container.googleapis.com \
      iam.googleapis.com \
      servicemanagement.googleapis.com \
      cloudresourcemanager.googleapis.com \
      ml.googleapis.com \
      meshconfig.googleapis.com \
      cloudbuild.googleapis.com
    $
    $ PROJECT_ID=<gcp project id>
    $
    $ curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize
    

    인증을 위한 OAuth 설정


    OAuth는 화면 제작에 동의합니다.


    OAuth 동의화면에 필요한 정보를 입력하고 생성
  • UserType
  • 내부
  • 애플리케이션 이름
  • 적합한 이름
  • 사용자 지원 메시지
  • Google 계정의 이메일 주소
  • 승인된 도메인
  • .cloud.goog
  • (왠지 문서가 goo라서 w
  • 를 직접 설정합니다.
  • 개발자의 연락처 정보
  • 적절한 메일 주소
  • 특별히 scope을 설정하지 않았습니다.

    인증 정보 작성


    OAuth Client ID에 필요한 정보를 입력하고 생성
  • 어플리케이션 종류
  • 웹 응용 프로그램
  • 명칭
  • 적합한 이름
  • 승인된 리디렉션 URI
  • https://iap.googleapis.com/v1/oauth/clientIds/<OAuth Client ID>.apps.googleusercontent.com:handleRedirect
  • 생성된 중심 ID
  • 를 입력합니다.

    관리 클러스터 생성


    kpt라는 Kubernetes의 선언 관리 도구를 사용하여 환경을 구축하는 느낌kpt pkg get [GitHub Repository] [target local directory]처럼 실행하면GiitHub에서push한 디렉터리를 봉인할 수 있습니다kpt cfg set -R . [key] [value]처럼 지정하면
    포획된 매크로 패키지 변수에 수치를 설정할 수 있기 때문에
    자신이 적용하고 싶은 GCP 프로젝트id 등을 함께 설정하여 각자의 환경을 만들 수 있을 것 같아요.
    그리고 Makefile을 준비했습니다.
    지시에 따라 실행하면 GKE 클러스터 등 기타 필요한 정보가 생성됩니다.
    (뒤에 Anthos 지령선도 움직이는 것 같아
    $ # gcloud関連のコマンドインストール
    $ gcloud components install kubectl kpt anthoscli beta
    $ gcloud components update
    $
    $ # Kustomizeインストール
    $ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
    $ sudo mv ./kustomize /usr/local/bin/kustomize
    $
    $ # 以降処理を進めるために変数をセット
    $ MGMT_PROJECT=<GCP project id>
    $ ## Kubeflow管理したいリポジトリ指定するとmanagementディレクトリが作成されてそこで各種ファイルが管理される
    $ MGMT_DIR=<GitHubの指定したいリポジトリ>
    $ MGMT_NAME=<適当な名前>
    $ LOCATION=<適当なzone指定>
    $
    $ # managementクラスタデプロイのためのkptパッケージ取得
    $ kpt pkg get https://github.com/kubeflow/gcp-blueprints.git/[email protected] "${MGMT_DIR}"
    $ cd "${MGMT_DIR}/management"
    $ make get-pkg
    $
    $ # 自分の環境の変数セット
    $ kpt cfg set -R . name "${MGMT_NAME}"
    $ kpt cfg set -R . gcloud.core.project "${MGMT_PROJECT}"
    $ kpt cfg set -R . location "${LOCATION}"
    $
    $ # GKE作成
    $ make apply-cluster
    $
    $ # kubectl context 作成。クラスタを切り替えることができるみたい
    $ make create-context
    $
    $ # K8sからGCPリソースに接続が可能なCloud Config Connectorを適用
    $ make apply-kcc
    $
    $ # ./instance/managed-project/iam.yamlにある通りOwner roleが適用される
    $ MGMT_PROJECT=<gcp project id>
    $ kpt cfg set ./instance managed-project "${MANAGED_PROJECT}"
    $ gcloud beta anthos apply ./instance/managed-project/iam.yaml
    
    이렇게 해서 MGMT_NAME에 설치된 이름의 GKE 클러스터가 완성되었습니다!
    자세한 설명이 있어요../upstream 디렉토리에 포함된 리소스 유형./instance 디렉토리에 변수 등 설정된 각 환경에 대한 실제 정보 포함./build 디렉터리에hydrate에서 실행하기 전에 검증된 파일이 생성된 것 같습니다

    Kubeflow 클러스터 만들기


    아직 매니지먼트용 클러스터와 Kubeflow용 클러스터의 용도는 잘 모르겠지만.
    다음은 Kubeflow용 그룹을 만듭니다!
    중간 단계에서 필요하므로 단계별로 설치Anthos Service Mesh
    다음 명령을 실행합니다
    # 必要な環境変数の設定
    $ KF_NAME=<managementとは違うkubeflow用のクラスタ名指定>
    $ KF_PROJECT=<GCP project id>
    $ KF_DIR=<GitHubの指定したいリポジトリ>
    $ MGMT_NAME=<作成したManagementクラスタの名前>
    $ MGMTCTXT="${MGMT_NAME}"
    $ 
    $ gcloud auth login
    $
    $ # kubeflowクラスタデプロイのためのkptパッケージ取得
    $ kpt pkg get https://github.com/kubeflow/gcp-blueprints.git/[email protected] "${KF_DIR}"
    $ cd "${KF_DIR}/kubeflow"
    $
    $ make get-pkg
    $ 
    $ # Makefile内の.PHONY: set-valuesで
    $ # <xxx>に記載された箇所を必要な情報で書き換え
    $
    $ kubectl config use-context "${MGMTCTXT}"
    $ kubectl create namespace "${KF_PROJECT}"
    $ kubectl config set-context --current --namespace "${KF_PROJECT}"
    $ kubectl config set-context --current --namespace "${KF_PROJECT}"
    $
    $ export CLIENT_ID=<作成したOAuthのCLIENT_ID>
    $ export CLIENT_SECRET=<作成したOAuthのCLIENT_SECRET>
    $ make set-values
    $
    $ # クラスタをデプロイ。ここしばらく時間かかる
    $ make apply
    
    k8s에서pod 또는 서비스를 잘했는지 확인
    $ # ZONE設定した記憶がないので設定
    $ ZONE=asia-northeast1-a
    $ gcloud container clusters get-credentials "${KF_NAME}" --zone "${ZONE}" --project "${KF_PROJECT}"
    $
    $ kubectl -n kubeflow get all
    

    Kubeflow UI 액세스


    다음은 Kubeflow의 UI에 대한 권한입니다.
    표시된 호스트에 접근하기 (SSL에서 DNS 반영까지 30분 정도 걸리며 구글의 404페이지를 잠시 표시합니다)http://kubeflow-test.endpoints.<gcp project id>.cloud.goog
    # アクセス許可したいアカウントのメールアドレスを指定
    # (ちゃんとやる場合メールアドレスのグループ指定したい
    $ gcloud projects add-iam-policy-binding "${KF_PROJECT}" --member=user:<EMAIL> --role=roles/iap.httpsResourceAccessor
    $ kubectl -n istio-system get ingress
    NAME            HOSTS                                                 ADDRESS         PORTS   AGE
    envoy-ingress   kubeflow-test.endpoints.<gcp project id>.cloud.goog   xxx   80      8h
    
    URL을 방문하면 이런 느낌으로 IAP 소스와 함께 움직여 인증 효과가 좋다

    로컬에서 안 나오는 노트북도 나왔어요.🏋️

    하지만 Artifact Store(metadata)는 표시되지 않습니다.🤔

    총결산


    기본적으로 Makefile만 실행하기 때문에 뒷면에서 이동하는 k8s자원의 느낌을 정확하게 이해할 수 없습니다
    어쨌든 놀이터가 생겼으니 다음엔 만들어진 Kubflow Cluster를 Private GKE로 만들어
    드디어 노트북, 피플라인 결성🕹

    좋은 웹페이지 즐겨찾기