Elasticluster を使用した Grid Engine クラスタの作成

Grid Engine を使用して Elasticluster コンピューティング クラスタでタスクを実行する既存のツールがある場合は、このチュートリアルに沿って、Google Cloud Platform でそれらのタスクを実行するための同様の環境を作成してください。

目標

このチュートリアルを完了すると、以下のことが行えます。

  • Elasticluster が GCP プロジェクトにアクセスできるようにする
  • Elasticluster を使用して、Grid Engine を実行する Compute Engine VM のクラスタを作成する
  • ファイルをクラスタにコピーしてクラスタ インスタンスに接続する

料金

このチュートリアルでは、以下を含む GCP の課金対象コンポーネントを使用しています。

  • Compute Engine
  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。 Cloud Platform を初めて使用する方は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Platform プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. Compute Engine API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。

ローカル環境を設定する

ローカルマシンに Elasticluster をまだインストールしていない場合は、次の手順に沿って操作します。

前提条件をインストールする

  1. Python 2.7 をインストールします

    Elasticluster を実行するには Python バージョン 2.7 が必要です。システムへの pip のインストール方法など、Python 開発環境の設定の詳細については、Python 開発環境の設定ガイドをご覧ください。

  2. virtualenv がない場合は pip を使用してインストールします。

    pip install virtualenv
    

    Elasticluster を Python virtualenv にインストールすることを強くおすすめします。virtualenv は、Elasticluster と Python の依存関係を他の Python 環境から分離して保持するため、Python 環境を更新しても Elasticluster が破壊されることはありません。

Elasticluster をインストールする

  1. virtualenv を実行し、elasticluster という名前の隔離された Python 環境を作成します。次に現在のディレクトリを設定します。

    virtualenv elasticluster
    source elasticluster/bin/activate
    cd elasticluster
    
  2. 前の手順で virtualenv によって作成された elasticluster ディレクトリに、Elasticluster GitHub リポジトリのクローンを作成し、依存関係をインストールします。

    git clone git://github.com/gc3-uzh-ch/elasticluster.git src
    cd src
    pip install -e .
    pip install oauth2client
    
  3. Elasticluster のインストールが成功したことを確認します。このコマンドを実行すると ~/.elasticluster/config ファイルが生成されます。警告やエラーが生成されることがありますが、それらは無視しても問題ありません。

    elasticluster list-templates
    

Elasticluster が GCP プロジェクトにアクセスできるようにする

以下の手順に沿って、Elasticluster が GCP プロジェクトのリソースにアクセスし、Compute Engine VM のクラスタを作成できるようにします。これらの手順はローカルマシンで行ってください。

クライアント ID とクライアント シークレットを取得する

  1. [認証情報] ページに移動します。
    [認証情報] ページに移動
  2. GCP プロジェクトを選択します。
  3. [認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。

  4. [アプリケーションの種類] で [その他] を選択し、[名前] を追加して、[作成] をクリックします。

  5. 表示される [OAuth クライアント] ウィンドウで、[クライアント ID] と [クライアント シークレット] をメモします。Elasticluster 構成ファイルでこれらを使用する必要があります。

  6. [認証情報] ウィンドウに、アプリケーションにアクセスするために使用されるメイン クライアント ID とともに、新しいその他の認証情報が表示されます。

SSH 認証鍵ペアを生成する

Elasticluster には、GCP に接続して Compute Engine VM を起動するための SSH 認証鍵ペアが必要です。gcloud compute ssh コマンドを使用して Compute Engine インスタンスにまだ接続していない場合は、次のコマンドを入力します。

gcloud compute config-ssh

プロセスが完了すると、マシンに次の新しい鍵ペアが表示されます。

~/.ssh/google_compute_engine
~/.ssh/google_compute_engine.pub

クラスタの VM のディスク イメージを選択する

Compute Engine VM を起動するには、Compute Engine で利用可能ないずれかの Debian イメージを指定する必要があります。次のコマンドを実行し、返されるディスク イメージの名前を確認します。

gcloud compute images list | grep debian | cut -f 1 -d " "

複数のディスク イメージが返された場合は、リストの最初のイメージを選択します。次の出力例では、ハイライト表示されたイメージを選択します。

debian-8-jessie-v20180611
debian-9-stretch-v20180611

Elasticluster の構成

~/.elasticluster/config ファイルを開き、その内容をすべて削除します。次に、以下のテキストをコピーし、変数を置き換え、ファイルを保存します。

# Grid Engine software to be configured by Ansible
[setup/gridengine]
provider=ansible
frontend_groups=gridengine_master
compute_groups=gridengine_worker

# Create a cloud provider called "google-cloud"
[cloud/google-cloud]
provider=google
gce_project_id=PROJECT_ID
gce_client_id=CLIENT_ID
gce_client_secret=SECRET_KEY

# Create a login called "google-login"
[login/google-login]
image_user=GOOGLE_USER_ID (just the user ID, not the full email address)
image_user_sudo=root
image_sudo=True
user_key_name=elasticluster
user_key_private=~/.ssh/google_compute_engine
user_key_public=~/.ssh/google_compute_engine.pub

# Bring all of the elements together to define a cluster called "gridengine"
[cluster/gridengine]
cloud=google-cloud
login=google-login
setup=gridengine
security_group=default
image_id=IMAGE
flavor=n1-standard-1
frontend_nodes=1
compute_nodes=3
image_userdata=
ssh_to=frontend

Elasticluster 構成ファイルの詳細については、Elasticluster のドキュメントをご覧ください。

Compute Engine VM のクラスタを実行する

次の手順では、クラスタの起動、操作、停止の方法を示します。

これらの手順はローカルマシンで行ってください。初めてクラスタを起動するときは、自分の代わりに Compute Engine API リクエストを発行するための承認を Elasticluster に与える必要があります。承認フローを実行するために、クラスタを起動したマシン上でウェブブラウザが起動されます。

リモートマシンで、またはウェブブラウザを開くことができない環境で Elasticluster を実行する必要がある場合は、クラスタを起動する前に ~/.elasticluster/config を編集し、cloud/google-cloud セクションに noauth_local_webserver=true を追加します。

# Create a cloud provider
[cloud/google-cloud]
provider=google
noauth_local_webserver=true

クラスタを起動する

次のコマンドを実行してクラスタを起動します。

elasticluster start gridengine

設定プロセスには数分かかることがあります。クラスタの起動後、次のメッセージがコンソールに出力されます。

Your cluster `gridengine` is ready!

Cluster name:     gridengine
Cluster template: gridengine
Default ssh to node: frontend001
- frontend nodes: 1
- compute nodes: 4

To login on the frontend node, run the command:

    elasticluster ssh gridengine

To upload or download files to the cluster, use the command:

    elasticluster sftp gridengine

詳細な出力を得るには、-v フラグを使用します。

elasticluster start gridengine -v

クラスタ インスタンスを一覧表示する

クラスタ内のインスタンスを一覧表示するには、次のコマンドを実行します。

elasticluster list-nodes gridengine

次のようなメッセージが表示されます。

Cluster name:     gridengine
Cluster template: gridengine
Default ssh to node: frontend001
- frontend nodes: 1
- compute nodes: 4

To login on the frontend node, run the command:

    elasticluster ssh gridengine

To upload or download files to the cluster, use the command:

    elasticluster sftp gridengine

frontend nodes:

  - frontend001
    connection IP: 203.0.113.1
    IPs:    203.0.113.1
    instance id:   gridengine-frontend001
    instance flavor: n1-standard-1

compute nodes:

  - compute001
    connection IP: 198.51.100.1
    IPs:    198.51.100.1
    instance id:   gridengine-compute001
    instance flavor: n1-standard-1

...

ファイルをクラスタ インスタンスにコピーする

Elasticluster の sftp コマンドを使用して、クラスタのフロントエンド ノードに対する SFTP セッションを開くことができます。これにより、クラスタとの間でファイルをアップロードまたはダウンロードできます。Elasticluster で SFTP を使用する方法の詳細については、Elasticluster のドキュメントをご覧ください。SFTP セッションを開くには、次のコマンドを実行します。

elasticluster sftp gridengine

here ドキュメントを使って、SFTP 上でコマンドのリストを送ることができます。

elasticluster sftp gridengine << 'EOF'
put *.sh
EOF

SFTP の詳細については、SFTP のマニュアル ページをご覧ください。

クラスタ インスタンスに接続する

Elasticluster では、SSH を使用して任意のクラスタノードに接続できます。ノードを指定せずに elasticluster ssh gridengine を実行すると、Elasticluster は自動的にフロントエンド ノードに接続します。

elasticluster ssh gridengine

クラスタ内の他のノードに接続するには、-n フラグを追加してノードの名前を指定します。

elasticluster ssh gridengine -n NODE_NAME

たとえば、クラスタ インスタンスの一覧表示で出力された compute001 ノードに接続するには、次のコマンドを実行します。

elasticluster ssh gridengine -n compute001

virtualenv を終了する

virtualenv を終了するには、コマンドラインから deactivate コマンドを実行します。

deactivate

Elasticluster のコマンドを再度使用するには、source elasticluster/bin/activate コマンドを実行して virtualenv を再度アクティブにします。

クリーンアップ

このチュートリアルが終了したら、Google Cloud Platform で作成したリソースをクリーンアップして、今後料金が発生しないようにします。以下のセクションでは、このようなリソースを削除または無効にする方法を説明します。

クラスタを破棄する

クラスタを停止してすべてのクラスタ インスタンスをオフにするには、次のコマンドを実行します。

elasticluster stop gridengine

このコマンドを実行すると、本当にクラスタを停止するかどうか確認するためのプロンプトが表示されます。プロンプトを表示せずにクラスタを停止するには、コマンドに --yes フラグを追加します。

elasticluster stop --yes gridengine

プロジェクトを削除する

課金を停止する最も簡単な方法は、チュートリアル用に使用したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. GCP Console でプロジェクト ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[プロジェクトの削除] をクリックします。 プロジェクト名の横にあるチェックボックスをオンにし、[プロジェクトの削除] をクリックする
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

  • Cloud Genomics Elasticluster fork をご覧ください。この fork は、Google Cloud Platform の使用例に関連するバグ修正や追加機能を提供します。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...