[Cloud] Deploying Highly Available DC/OS on Oracle Cloud Infrastructure with Terraform

原文はこちら。
https://blogs.oracle.com/cloud-infrastructure/deploying-highly-available-dcos-on-oracle-cloud-infrastructure-with-terraform

Introduction

この記事では、Oracle Cloud InfrastructureにDC/OSを自動的にデプロイするためのTerraformテンプレートを紹介します。
Oracle Cloud Infrastructure
https://cloud.oracle.com/cloud-infrastructure
DC/OSは、Apache Mesos分散システムカーネルをベースにしたオープンソースの分散データセンターオペレーティングシステムです。単一のインタフェースから複数のシステムを管理し、これらのシステムにコンテナ、分散サービス、アプリケーションを展開することができます。

DC/OSは、クラスターを形成するマスター・ノードとエージェント・ノードのグループで構成されています。

Terraformテンプレートは、Oracle Cloud InfrastructureにこのDC/OSクラスタを自動的にデプロイします。テンプレートは、Terraformモジュールのセットと、Oracle Cloud Infrastructureで高可用性および構成可能なDC/OSクラスタを実行するために必要なリソースのプロビジョニングおよび構成に使用される基本構成の例で構成されています。

Oracle Cloud Infrastructure Environment

DC/OSクラスタをOracle Cloud Infrastructure内の任意のリージョンにデプロイできます。高可用性が必要な場合は、DC/OSマスタとエージェントノードをOracle Cloud Infrastructureのリージョンにある複数のアベイラビリティ・ドメインにデプロイすることを推奨します。

下図は、マスタ、パブリック・エージェント、GPUエージェント、通常のプライベートエージェントの各ノードを持つDC/OSクラスタのデプロイ例を示したものです。

Terraformテンプレートは、以下のComputeインスタンスをプロビジョニングします。
  • ブートストラップノード
  • マスターノード
  • パブリックエージェントノード
  • エージェントノード
  • GPUエージェントノード
テンプレートは、インスタンスシェイプ(GPUを含む)、これらのインスタンスの数、およびこれらのインスタンスの複数のアベイラビリティ・ドメインへの配置方法などを選択するための複数の入力変数を受け入れます。要件が基本構成を超えて拡張する場合、 関連モジュールをカスタマイズしてご自身の構成を形成することができます。

Deploy DC/OS Cluster

Prerequisites

Quick Start

  • 構成のカスタマイズ
    • プロジェクトルートにある、構成を指定するための "env-vars" ファイルを開く
    • テナント、ユーザー、コンパートメントに関連する、Oracle Cloud Infrastructureの必須入力変数を設定
      • Tenancy OCID
      • User OCID
      • API fingerprint
      • API private key
      • Compartment OCID
      • DC/OSインスタンスへSSHアクセスするための公開鍵・秘密鍵のペア
    • デフォルトの入力変数を確認し、必要に応じてアップデート
      • dcos_installer_url:   DC/OSコード入手のためのURL。デフォルト値は早期アクセスリリースに設定されているので、安定リリース(stable)に変更する場合は以下のURLを使う。https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh
      • dcos_master_ad1_count、dcos_master_ad2_count、dcos_master_ad3_count:  各アベイラビリティ・ドメインにおけるマスタノードの個数
      • dcos_agent_ad1_count、dcos_agent_ad2_count、dcos_agent_ad3_count:  各アベイラビリティ・ドメインにおけるエージェント・ノードの個数
      • dcos_public_agent_ad1_count、dcos_public_agent_ad2_count、dcos_public_agent_ad3_count:  各アベイラビリティ・ドメインにおけるパブリック・エージェント・ノードの個数
      • dcos_gpu_agent_ad1_count、dcos_gpu_agent_ad2_count、dcos_gpu_agent_ad3_count:  各アベイラビリティ・ドメインにおけるGPUエージェントの個数
  • 環境変数を設定
    . env-vars 
  • Terraformの初期化
    terraform init
  • 実際の実行前にTerraformの実行計画を確認
    terraform plan
  • DC/OSリソースをプロビジョニングし、DC/OSクラスタをOracle Cloud Infrastructureにセットアップ
    terraform apply
リソースのプロビジョニングが完了すると、Terraformテンプレートは以下のような出力を表示します。
Outputs:

master_private_ips = [
  xx.xx.xx.xx,
  xx.xx.xx.xx,
  xx.xx.xx.xx
]

master_public_ips = [
  xx.xx.xx.xx,
  xx.xx.xx.xx,
  xx.xx.xx.xx,
]

Notes:

エージェント、パブリックエージェント、およびGPUエージェントの各ノードのデプロイは、ブートストラップノードのデプロイによって変わりますが、Terraformモジュールを使えば、Terraform "resources" の依存関係で通常実施しているように、依存関係を明示的に設定する仕組みはありません。depends_onというキーワードは、Terraformモジュールでは機能しません。この問題を回避するために、変数を使用して暗黙の依存関係を使用します。
例えば、モジュール "dcos_agent_ad1"において、モジュール "dcos_bootstrap"の "dcos_bootstrap"インスタンスIDの生成に依存する変数 "dcos_bootstrap_instance_id"を定義します。
module  "dcos_agent_ad1" {
    source              = "./instances/agent"
    count               = "${var.dcos_agent_ad1_count}"
    availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[0],"name")}"
    compartment_ocid    = "${var.compartment_ocid}"
    tenancy_ocid        = "${var.compartment_ocid}"
    dcos_cluster_name   = "${var.dcos_cluster_name}"
    image               = "${var.InstanceImageOCID[var.region]}"
    shape               = "${var.AgentInstanceShape}"
    subnet_id           = "${module.vcn.subnet_ad1_id}"
    ssh_public_key      = "${var.ssh_public_key}"
    ssh_private_key     = "${var.ssh_private_key}"
    display_name_prefix = "ad1"
    dcos_bootstrap_instance_id = "${module.dcos_bootstrap.instance_id}"
}

Access DC/OS Cluster

Once the DC/OSのデプロイが完了したら、DC/OSダッシュボードにhttp://<master_public_ip>/からアクセスできます。

Next Steps

入力変数を使用して、エージェント、パブリックエージェント、GPUエージェントの各ノードの数を拡大または縮小できます。たとえば、次のようにエージェントノードの数を増やすことができます。
terraform apply -var "dcos_agent_id1_count=xx"

Conclusion

Oracle Cloud Infrastructureは、DC/OSとそのサービスを実行するための高性能で柔軟な環境を提供します。このTerraform DC/OSインストーラを使用すると、OCI上へのDC/OSクラスタのデプロイを自動化できます。

0 件のコメント:

コメントを投稿