(本当は30分で立ち上げると書きたかったところでしたが、OpenShiftのインストーラーが走ってる時間が30分くらいあったので。。。)
OpenShiftをHA構成で立ち上げるterraformモジュールを公開したので紹介します。
OpenShiftはピュアなKubernetesクラスタの上に構築されるので、Kubernetesクラスタを構築できるということでもあります。
OpenShift自体はopenshift-ansibleでインストールするのですが、
AWSのASGやLB、SecurityGroupを設定するのがなかなか面倒なのでその作業を省力化するものです。
この記事ではOpenShift Originを使用しますが、このモジュールは商用版のOCP(OpenShift Container Platform)にも対応しているので、サブスクリプションがあればOCPのクラスタを立てることも可能です。
作成されるOpenShiftの構成は以下のような形になります。
前提条件
この記事の手順では、AWSの上に新規のVPCとサブネット、ゲートウェイなどのネットワーク設定の他、
m4.large
のEC2インスタンス2〜4個(master x1〜3、node x1)やLB、セキュリティグループなどが作成されます。
terraform
が使用するAWSのプロファイルに適切な権限を設定してください。
export AWS_PROFILE=openshift_administrator
また、独自ドメインを運用できることを前提にしていますが、この記事ではfreenomの無料ドメインの取得とその設定方法を紹介します。
Terraformモジュールの使用準備
terraform
コマンドが入っていない場合は、以下を参考に導入します。
terraform-aws-openshiftを、適当なディレクトリにクローンしてください。
git clone https://github.com/literalice/terraform-aws-openshift
cd terraform-aws-openshift
このプロジェクトは、Terraformモジュールの標準ディレクトリ構成に従い、examples
ディレクトリに実際にOpenShiftを構築するためのプロジェクトが入っています。
OpenShift Originで構築するorigin
ディレクトリと、OCPで構築するocp
ディレクトリがありますが、ここではOriginを利用するのでこのディレクトリに移動します。
cd examples/origin
移動したら、このプロジェクトを以下のように初期化してください。
terraform init
OpenShiftをインストールするためのインフラを構築する
OpenShiftをインストールする対象のマシン、EC2インスタンスやセキュリティグループ、LBを作成します。
export AWS_DEFAULT_REGION=ap-northeast-1 # クラスタを作成するリージョン
export TF_VAR_platform_name=platform1 # 任意のクラスタID
export TF_VAR_platform_default_subdomain=openshift-example-xxxx.tk # クラスタにアクセスするためのドメイン
export TF_VAR_master_count=3 # Masterノードの数。HA構成って題しているので3にしていますが、別に1でもいいです
# OpenShiftの管理機能にアクセスできるIP帯のリスト。
# https://www.cman.jp/network/support/go_access.cgi あたりから自分のIPをセットしてください。
export TF_VAR_operator_cidrs='["0.0.0.0/0"]'
make
OpenShiftクラスタにアクセスできるようドメインを設定する
上記コマンドを実行した際、以下のようにドメイン一覧が出力されるはずです。
public_dns_nameservers = [
ns-xxx.awsdns-xx.org,
ns-xxx.awsdns-xx.co.uk,
ns-xxx.awsdns-xx.com,
ns-xxx.awsdns-xx.net
]
これは、これから構築するOpenShiftクラスタのドメイン解決を委譲するために使うネームサーバーのリストです。
すでにお名前.comなどでドメインの運用を行なっている場合は、このネームサーバーをOpenShiftドメイン(ここでは openshift-example-xxx.tk
)のNSレコードに設定することで以下のようなドメイン名を解決できるようになります。
-
master.openshift-example-xxx.tk
# OpenShiftの管理コンソール -
bastion.openshift-example-xxx.tk
# OpenShiftの管理用踏み台サーバー -
*.openshift-example-xxx.tk
# OpenShiftにデプロイされたアプリケーションにアクセスするためのワイルドカードドメイン
ここでは、freenomでドメインを無料で取得し、必要なOpenShiftドメインが解決できるよう設定します。
freenomの無料ドメインを取得する
まず、 freenomにサインアップしていない場合はサインアップしてログインしてください。
「Services」->「Register a New Domain」からOpenShiftクラスタのドメイン(ここでは openshift-example-xxx.tk
)を取得します。
「Check Availability」を押下します。
「CheckOut」を選択します。
Route53のネームサーバーをfreenomに設定する
Nameserverの欄に、makeを実行した際に出力された以下のドメインから、適当に二つ設定し、「Continue」を押下します。
public_dns_nameservers = [
ns-xxx.awsdns-xx.org,
ns-xxx.awsdns-xx.co.uk,
ns-xxx.awsdns-xx.com,
ns-xxx.awsdns-xx.net
]
次の画面、「Your Details」のところは、何も変更せず「I have read and agree to the Terms & Conditions」にチェックを入れるだけで大丈夫でした。
ドメインが設定されたことを確認する
dig master.openshift-example-xxx.tk
上記でOpenShift管理コンソールのLBのIPが解決されることを確認します。
なお、まだOpenShiftをインストールしていないので、この時点ではURLにアクセスできません。
OpenShiftのインストール
上記で設定したドメインが使用できるようになったら、make install
コマンドでOpenShiftを作成したインフラにインストールします。
make install
エラーが発生した場合は、少し間を置いて再実行してください。
処理内容としては、踏み台にあるinventoryとOpenShiftをインストールするための公式ansible playbookを、Terraformのremote-exec
で使用しているだけです。
確認
インスールのansible-playbook
実行が終わると、OpenShiftのクラスタにアクセスできるようになっているはずです。
masterのアクセス先URLはmake install
コマンドの実行結果として出力されています。
bastion_public_dns = bastion.openshift-sample-xxx.tk
master_url = https://master.openshift-sample-xxx.tk:8443
任意のユーザー名/パスワードでログインできるので、一通り機能を確認してみてください。
(近いうちに、任意の認証方法を設定できるようにする予定です。)
後片付け
make destroy
コマンドで、作成した全てのAWSリソースが削除されます。
make destroy
まとめ
この記事では、OpenShiftのクラスタ構築をTerraformで自動化しました。
OpenShiftの環境が簡単に構築できるので、いろいろと遊んでみていただければと思います。
OpenShiftやKubernetesのクラスタを運用する際は、この記事で行ったように、再現性を高めるため構築を自動化しておくのがいいですね。