Batch on GKE クラスタの管理

このページでは、Batch on GKE クラスタを作成し、管理する方法を説明します。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project project-id
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone compute-zone
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region compute-region
  • gcloud を最新バージョンに更新します。
    gcloud components update

ベータ版では、Batch on GKE(Batch)はリージョン クラスタのみをサポートします。リージョン クラスタを作成し、Workload Identity を有効にする必要があります。

次のコマンドを実行して、Batch on GKE と互換性のあるクラスタを作成します。

gcloud container clusters create cluster-name \
  --region compute-region \
  --node-locations compute-zone \
  --num-nodes 1 \
  --machine-type n1-standard-8 \
  --release-channel regular \
  --enable-stackdriver-kubernetes \
  --identity-namespace=project-id.svc.id.goog \
  --enable-ip-alias

Identity and Access Management を構成する

  1. アカウントをプロジェクト オーナーとしてバインドする

    gcloud projects add-iam-policy-binding project-id \
      --member user:email --role=roles/owner
    

    ここで

    • project-id はプロジェクト ID です。
    • email はアカウントのメールアドレスです。
  2. GKE クラスタで読み取り権限を持つカスタムロールを作成します。

    gcloud iam roles create BatchUser --project project-id \
      --title GKEClusterReader --permissions container.clusters.get --stage BETA 2>&1
    

    ここで

    • project-id はプロジェクト ID です。
    • GKEClusterReader はロールのタイトルです。
  3. クラスタで ClusterRoleBinding を作成し、Batch が Kubernetes のロールを作成できるようにします。

    kubectl create clusterrolebinding cluster-admin-binding-email \
      --clusterrole=cluster-admin --user email
    

    ここで、email はアカウントのメールアドレスです。

  4. Google サービス アカウントを作成します。

    gcloud iam service-accounts create kbatch-controllers-gcloud-sa \
      --display-name kbatch-controllers-gcloud-service-account
    
  5. Kubernetes サービス アカウントを作成します。

    kubectl create serviceaccount --namespace kube-system kbatch-controllers-k8s-sa
    
  6. 次の Identity and Access Management(IAM)ポリシー バインディングを追加します。project-id はプロジェクト ID です。

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/container.clusterAdmin
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/compute.admin
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:project-id.svc.id.goog[kube-system/kbatch-controllers-k8s-sa]" kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com
    
  7. Kubernetes サービス アカウントに iam.gke.io/gcp-service-account アノテーションを追加します。

    kubectl annotate serviceaccount --namespace kube-system kbatch-controllers-k8s-sa \
       iam.gke.io/gcp-service-account=kbatch-controllers-gcloud-sa@project-id.iam.gserviceaccount.com
    

GPU の有効化

GPU ジョブを実行する場合は、NVIDIA のデバイス ドライバをノードにインストールする必要があります。Google では、クラスタ内にノードが作成されたときに自動的にドライバをインストールする DaemonSet を提供しています。

インストール手順については、NVIDIA GPU デバイス ドライバのインストールのセクションをご覧ください。

Batch on GKE のインストール

Batch をインストールするには、次の手順を実行します。

  1. GitHub から Batch リリースをダウンロードします。

  2. tar ファイルを解凍します。

    tar zxvf kbatch-version.tar.gz
    
  3. kbatch ディレクトリに移動します。

    cd kbatch_dist
    
  4. 構成ファイルに情報を追加します。

    vi config/kbatch-config.yaml
    
    ...
    ClusterName: cluster-name
     ClusterLocation : compute-region
     ProjectID: project-id
     Recommender:
       Locations:
       # Note: Only one zone is supported in the Locations list here.
       - compute-zone
    Actuator:
    ...
    
  5. configmap を作成します。

    kubectl create configmap --from-file config/kbatch-config.yaml -n kube-system kbatch-config
    
  6. Batch のカスタム リソース定義とコンポーネントをインストールします。

    kubectl apply -f install/
    

Batch インストールの確認

  1. kbatch-admission Pod が実行中であることを確認します。

    kubectl get pods -n kube-system --selector=app=kbatch-admission
    

    出力は次のようになります。

    NAME                                READY   STATUS    RESTARTS   AGE
    kbatch-admission-799b776795-xxvmh   1/1     Running   0          1m
    
  2. kbatch-controllers Pod が実行中であることを確認します。

    kubectl get pods -n kube-system --selector=control-plane=kbatch-controllers
    

    出力は次のようになります。

    NAME                   READY   STATUS    RESTARTS   AGE
    kbatch-controllers-0   1/1     Running   0          1m
    
  3. Batch インストールを確認したら、サンプルジョブを実行します。

Batch on GKE のバージョンを管理する

Batch をアップグレード、ダウングレード、アンインストールできます。

Batch のアップグレード

新しいマイナー バージョンまたはパッチ バージョンにアップグレードするには、次のコマンドを実行します。

  1. 現在の admission.yaml ファイルと controllers.yaml ファイルを削除します。

    kubectl delete -f kbatch-current-version/install/02-admission.yaml \
    kubectl delete -f kbatch-current-version/install/03-controllers.yaml
    
  2. 新しい admission.yaml ファイルと controllers.yaml ファイルを適用します。

    kubectl apply -f kbatch-new-version/install/02-admission.yaml \
    kubectl apply -f kbatch-new-version/install/03-controllers.yaml
    

新しいメジャー バージョンにアップグレードするには、新しいバージョンを新しいクラスタにインストールするか、Batch のアンインストールの手順を行ってから新しいメジャー バージョンをインストールします。

Batch のダウングレード

以前のマイナー バージョンまたはパッチ バージョンにのみロールバックできます。

以前のバージョンにロールバックするには、次のコマンドを実行します。

  1. 現在の admission.yaml ファイルと controllers.yaml ファイルを削除します。

    kubectl delete -f kbatch-current-version/install/02-admission.yaml \
    kubectl delete -f kbatch-current-version/install/03-controllers.yaml
    
  2. 新しい admission.yaml ファイルと controllers.yaml ファイルを適用します。

    kubectl apply -f kbatch-old-version/install/02-admission.yaml \
    kubectl apply -f kbatch-old-version/install/03-controllers.yaml
    

Batch のアンインストール

Batch をアンインストールするには、次の手順を実行します。

  1. イメージタグを確認して、実行している Batch バージョンを確認します。

    kubectl get deployment kbatch-admission -n kube-system -o jsonpath="{..image}"
    kubectl get statefulset kbatch-controllers -n kube-system -o jsonpath="{..image}"
    
  2. クラスタからインストール バンドルを削除します。

    kubectl delete -f kbatch-version/install/
    

Stackdriver を使用した Batch on GKE のデバッグ

Batch では、モニタリング ツールとして Prometheus を使用しています。kbatch-controller-service の指標は、Stackdriver Monitoring で確認できます。Batch サービスによって生成される指標は、Stackdriver の外部指標とみなされます。

カスタム指標は Stackdriver Monitoring の課金対象機能のため、カスタム指標の利用で費用が発生する場合があります。料金設定の詳細については、Stackdriver の料金をご覧ください。

始める前に

Identity and Access Management を構成する

  1. Google サービス アカウントを作成します。

    gcloud iam service-accounts create kbatch-monitoring-gcloud-sa \
      --display-name kbatch-monitoring-gcloud-service-account
    
  2. Kubernetes サービス アカウントを作成します。

    kubectl create serviceaccount --namespace kube-system kbatch-monitoring-k8s-sa
    
  3. 次の IAM ポリシー バインディングを追加します。ここで、project-id はプロジェクト ID です。

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:project-id.svc.id.goog[kube-system/kbatch-monitoring-k8s-sa]" kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com
    
  4. Kubernetes サービス アカウントに iam.gke.io/gcp-service-account アノテーションを追加します。

    kubectl annotate serviceaccount --namespace kube-system kbatch-monitoring-k8s-sa \
       iam.gke.io/gcp-service-account=kbatch-monitoring-gcloud-sa@project-id.iam.gserviceaccount.com
    
  5. 管理者ツールを入手します。

    git clone https://github.com/GoogleCloudPlatform/Kbatch.git
    
  6. モニタリングするディレクトリに移動します。

    cd admintools/monitoring
    

Prometheus サービスをデプロイする

  1. Prometheus サービスをデプロイするには、次のコマンドを実行します。

    kubectl apply -f prometheus.yaml
    
  2. Prometheus のデプロイを検証するには、次のコマンドを実行します。

    kubectl get pod -n kube-system | grep 'kbatch-prometheus'
    

    出力は次のようになります。

    kbatch-prometheus-deployment-97bc6b97b-m4q9h       1/1     Running   0          9s
    

Stackdriver コレクタのインストール

次に、サイドカー コンテナを Stackdriver コレクタとしてデプロイします。サイドカーが Prometheus の指標を Stackdriver にエクスポートします。

  1. stackdriver コレクタをデプロイするには、次のコマンドを実行します。

    sh ./setup_metrics_export_to_sd.sh
    
  2. Stackdriver コレクタのインストールを検証するには、次のコマンドを実行します。

    kubectl -n kube-system get deployment kbatch-prometheus-deployment -o=go-template='{{$output := "stackdriver-prometheus-sidecar does not exists."}}{{range .spec.template.spec.containers}}{{if eq .name "sidecar"}}{{$output = (print "sidecar exists. Image: " .image)}}{{end}}{{end}}{{printf $output}}{{"\n"}}'
    

    Prometheus サイドカーが正常にインストールされると、コンテナ レジストリから使用されたイメージの名前がスクリプトの出力に表示されます。

    sidecar exists. Image: gcr.io/kbatch-images/stackdriver-prometheus-sidecar:0.6.1
    

    そうでない場合、スクリプトの出力は次のようになります。

    stackdriver-prometheus-sidecar does not exist.
    

指標の表示

  1. Metrics Explorer に移動します。

    Metrics Explorer に移動

  2. [Resources] > [Metrics Explorer] に移動します。

  3. [Find resource type and metric] フィールドで、external/prometheus/ 接頭辞が付いているものを選択します。

    たとえば、external/prometheus/kbatch_scheduling_dep を選択します。

    1 つのワークスペースに複数の指標を追加できます。

Stackdriver コレクターを無効にする

サイドカー コンテナを無効にするには、kbatch ディレクトリから次のコマンドを実行します。

sh ./disable_metrics_export_to_sd.sh

クリーンアップ

GKE クラスタで Batch サービスを停止するには、次のコマンドを実行します。

kubectl delete deployment kbatch-admission --namespace=kube-system
kubectl delete statefulset kbatch-controllers --namespace=kube-system

Batch がインストールされている GKE クラスタを削除するには、次のコマンドを実行します。

gcloud container clusters delete cluster-name --region compute-region

Filestore インスタンスを削除するには、次のコマンドを実行します。

gcloud beta filestore instances delete filestore-instance-id \
  --project=project-id --location=filestore-zone

ここで

  • filestore-instance-id は Filestore インスタンス ID です。
  • project-id はプロジェクト ID です。
  • filestore-zone はゾーンです。

Batch がインストールされているプロジェクトを削除するには、次のコマンドを実行します。

gcloud projects delete project-id

次のステップ