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 InfrastructureDC/OSは、Apache Mesos分散システムカーネルをベースにしたオープンソースの分散データセンターオペレーティングシステムです。単一のインタフェースから複数のシステムを管理し、これらのシステムにコンテナ、分散サービス、アプリケーションを展開することができます。
https://cloud.oracle.com/cloud-infrastructure
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エージェントノード
Deploy DC/OS Cluster
Prerequisites
- Terraform(v0.10.3以後)をダウンロードし、インストール
Terraform
https://terraform.io/ - Oracle Cloud Infrastructure Terraform Provider (v2.0.0以後)をダウンロードし、インストール
Terraform provider for Oracle Cloud Infrastructure
https://github.com/oracle/terraform-provider-oci/releases - Terraform DC/OS Installer for Oracle Cloud Infrastructureをダウンロード
Terraform DC/OS Installer for Oracle Cloud Infrastructure
https://github.com/cgong-github/terraform-provider-oci/tree/dcos-oci/docs/solutions/terraform_dcos_installer
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
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"
0 件のコメント:
コメントを投稿