はじめに
今回は、AWS上にTerraformを利用してRancher HA構成を構築する方法をご紹介します。
RancherはRancher serverコンテナを起動するだけで簡単に使い始めることができますが、何かしらの理由により停止してしまった場合は利用できなくなってしまいます。
本格的に利用する際はRancher Serverの冗長性を確保したいところですが、最初から完全なHighAvailabilityな構成で構築することを考えると、コスト面で躊躇してしまうことがあるのではないでしょうか。
ユースケース
将来的にHAにできるミニマム構成で立ち上げつつ、性能や冗長性が気になりだしたら簡単にスケールアウトしたい。
Terraformを利用することで、メンテナンス性を担保しつつ上記のようなケースを実現することができるのです。
Rancher HA
まずは、Rancher HAの要件を確認してみましょう。
詳細は公式ドキュメントをご確認ください。
- HAを構成するノードについて
-
- DockerがサポートされているモダンなLinux
- ノード間通信用に9345, 8080のポートが開いていること
- 1GB RAM
- MySQLデータベースについて
-
- 少なくとも1GB RAM以上
- Rancher serverノード毎に50コネクション
- その他MySQLの設定
- ロードバランサーについて
-
- ロードバランサーとノード間の通信は8080ポート
- 大規模構成のための奨励要件
-
- サーバノード毎に4GB/8GBのヒープサイズ。つまり8GB/16GBのRAM
- データベースには速いディスクIOを用意する
- データベースはレプリケーションされ、適切にバックアップされること
AWSでどのように実現するか?
上記の要件を踏まえつつ、今回は下記のような構成をとりたいと思います。
- 全体
-
- 提供されている
RancherOSのAMI
を利用する 新規VPC
を作成して構築する- MySQLの代わりに
Amazon Aurora
を利用する - HA構成時のEC2インスタンス配置は
AZに分散
する - ロードバランサーは
ELB
を利用する - ロードバランサーの
TLS証明書はACMで事前取得したもの
を利用する
- 提供されている
- ミニマム構成
-
- EC2インスタンスは
t2.smallを1つ
- DBインスタンス
db.t2.smallを1つ
- EC2インスタンスは
- HA構成
-
- EC2インスタンスは
t2.smallを3つ
- DBインスタンス
db.t2.smallを2つ
- EC2インスタンスは
サンプル
今回の構築のサンプル定義はこちらにあります。
sample-rancher-terraform
各定義内容の詳細な説明は割愛しますが、ポイントは以下になります。ご自身の環境に合わせて調整してください。
variables.tf
で変数宣言とデフォルト値設定を行なっているterraform.tfvars
でデフォルト値を上書きしている
実行
それでは早速、このような設定で実行してみましょう。
環境変数等にAWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
を設定し、$ terraform apply
を実行すると構築が始まります。構築完了までおよそ10分程度かかります。
構築が完了するとELBのDNS名が最後に表示されますので、Route53などでドメインと紐づけてください。(今回はTerraformによるRoute53の変更は組み込んでいません)
アクセスすると無事、初期画面が表示されました。
スケールアウトできることを確認するため、エージェントホストを1つ追加しておきます。
terraform.tfvars
でインスタンス数を修正し、再び$ terafform apply
を実行します。
これでHA構成になりました!
変更前に追加したエージェントホストもちゃんと見れていますね!
おわりに
TerraformによりRancher HAを「ミニマムな構成で立ち上げつつ、状況に応じてHA構成にスケールアウトする」ということをコードとして実現することができました。
コードとして実現することのメリットは、”HA構成にスケールアウトする”という作業をシンプルな手順で誰にでもできるようになる点です。複数人で同じ環境を触る際、バックエンド定義により状態を共有&ロックする必要がありますが、「当初はミニマムで構成したけれど、半年後にスケールアウトしたくなった」という場合でも、ゼロから環境を見直して思い返す必要がなくなります。
みなさんも是非、環境をコードとして残し、安心&安全な運用につなげてみてはいかがでしょうか!