【OCI_11_02】オートスケーリングの検証(カスタム・イメージをベースにインスタンス構成を作成した場合)

前回記事では、インスタンスをベースにインスタンス構成を作成してオートスケーリングを検証しました。インスタンスをベースにするとApacheなどのアプリなどが構成に含まれていませんでした。Apacheなどのアプリも含める場合は、カスタム・イメージをベースにインスタンス構成を作成する必要がありましたので、今回はそれを検証してみたいと思います。
目次
ベースとなるインスタンスの作成
ベースとなるインスタンスとしてWEBサーバを作成し、それをもとにカスタム・イメージを作成します。
インスタンスは、ApacheのWEBページでホスト名やIPアドレスを動的に表示するよう設定しています。
インスタンスとカスタム・イメージの作成は、以下の記事を参考にしてください。
ネットワーク・セキュリティ・グループの作成と適用
今回の検証では、パブリック・サブネットのセキュリティ・リストの中身(イングレス、エグレス)は空にして利用していません。
セキュリティは、インスタンスにアタッチするネットワーク・セキュリティ・グループで制御します。
ここではネットワーク・セキュリティ・グループを作成し、必要なルールを設定して、インスタンスへアタッチしたいと思います。
※ネットワーク・セキュリティ・グループの作成と適用は、必須ではありません。検証では、セキュリティ・リストでも問題ありません。
ネットワーク・セキュリティ・グループの作成
左上ハンバーガーメニューから ネットワーキング > 仮想クラウド・ネットワーク を選択し、Webサーバーが存在するVCN名のリンクをクリックします。
「セキュリティ」タブを選択、ネットワーク・セキュリティ・グループの「ネットワーク・セキュリティ・グループの作成」をクリックします。

ネットワーク・セキュリティ・グループの作成画面で以下入力、選択します。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
タグ:何もしない

セキュリティ・ルールの追加でセキュリティ・リストで控えたイングレス・ルール、エグレス・ルールと同じルールを設定して、右下の「作成」をクリックします。




ネットワーク・セキュリティ・グループが作成されました。

ネットワーク・セキュリティ・グループの適用
作成したネットワーク・セキュリティ・グループをインスタンスへ適用します。
WEBサーバ2台の両方で同じネットワーク・セキュリティ・グループを適用します。
左上ハンバーガーメニューから コンピュート > インスタンス を選択し、該当のインスタンスをクリックします。
「ネットワーキング」タブを選択、ネットワーク・セキュリティ・グループの「編集」をクリックします。

ネットワーク・セキュリティ・グループの編集画面で作成したネットワーク・セキュリティ・グループを選択し、右下の「変更の保存」をクリックします。

WEBサーバ2台へネットワーク・セキュリティ・グループが適用されました。


パブリック・サブネットのセキュリティ・リストの中身を空にする
パブリック・サブネットで利用しているセキュリティ・リストのイングレス・ルール、エグレス・ルールをすべて削除します。
これでパブリック・サブネットで利用しているセキュリティ・リストは、利用されてない状態になりました。


インスタンス構成の作成
ベースになるカスタム・イメージからインスタンス構成を作成します。
インスタンス構成は、オートスケーリング用インスタンスを起動する元になり、イメージ、シェイプ、sshキー情報、ブロックボリューム、ネットワーク情報などが定義されています。
左上ハンバーガーメニューから コンピュート > インスタンス構成 を選択し、インスタンス構成の作成 をクリックします。

インスタンス構成の作成画面で以下を入力、選択します。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
インスタンスの作成先のコンパートメント:自身の権限のあるコンパートメント

配置の可用性ドメインは、デフォルトのままにします。

イメージとシェイプのイメージで「イメージの変更」をクリックします。
「イメージの選択」で「マイ・イメージ」を選択します。

画面を下へスクロールし、「カスタム・イメージ」を選択、事前に作成したカスタム・イメージを選択し、「イメージの選択」をクリックします。

カスタム・イメージが選択されました。

必要な場合、シェイプを変更します。
今回は変更するのでシェイプの変更から変更します。
VM.Standard3.Flex

セキュリティは、デフォルトのままで「次」をクリックします。

ネットワーキングは、以下入力、選択します。
VNIC名:空白(デフォルト)
プライマリ・ネットワーク:既存の仮想クラウド・ネットワークを選択
仮想クラウド・ネットワークコンパートメント:自身の権限のあるコンパートメント
仮想クラウド・ネットワーク:サブネットを作成したVCN
サブネットコンパートメント:自身の権限のあるコンパートメント
サブネット:事前に作成したパブリック・サブネット

プライマリVNIC IPアドレスは、以下入力、選択します。
「プライベートIPv4アドレス」は、「プライベートIPv4アドレスの自動割当て」を選択します。
「パブリックIPv4アドレスの自動割当て」は、デフォルトのままONにします。
「IPv6アドレス」は、デフォルトのままOFFにします。

拡張オプション を展開します。
今回の検証では、パブリック・サブネットのセキュリティ・リストの中身(イングレス、エグレス)は空にして利用していません。
セキュリティは、インスタンスにアタッチするネットワーク・セキュリティ・グループで制御したいので事前に作成しておいたネットワーク・セキュリティ・グループを選択します。
「ネットワーク・セキュリティ・グループを使用してトラフィックを制御」をONにして、事前に作成しておいたネットワーク・セキュリティ・グループを選択します。

「SSHキーの追加」は、「キー・ペアを自動で生成」を選択し、「秘密キーのダウンロード」、「公開キーのダウンロード」をクリックし、ダウンロードしておきます。
「次」をクリックします。

ブート・ボリュームは、公式ドキュメントに従って以下のとおり設定します。
「カスタム・ブート・ボリューム・サイズを指定します」は、デフォルトのままOFFとします。
「転送中暗号化の使用」は、デフォルトのままONとします。
「自分が管理するキーでこのボリュームを暗号化」は、デフォルトのままOFFとします。
「次」をクリックします。

確認画面で設定内容を確認し、「作成」をクリックします。
※表示が長いので割愛します

インスタンス構成が作成されました。

インスタンス・プールの作成
作成したインスタンス構成をもとに、インスタンス・プールを作成します。
インスタンス・プールを作成すると、インスタンス構成で設定したインスタンスがインスタンス・プールで設定した数だけ起動します。
サイズを「0」で作成し、あとでスケーリングしてこの数を増やしてみたいと思います。
左上ハンバーガーメニューから コンピュート > インスタンス構成 を選択し、作成したインスタンスの構成のリンクをクリックします。
右上の「アクション」> インスタンス・プールの作成 をクリックします。

インスタンス・プールの作成画面で以下を入力、選択し、「次」をクリックします。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
インスタンス数:0 (※ここを1にするとインスタンス・プールを作成した時点で1台インスタンスが起動します)
インスタンス構成コンパートメント:自身の権限のあるコンパートメント
インスタンス構成:作成したインスタンス構成
インスタンス表示名フォーマッタ:何もしない(デフォルト)
インスタンス・ホスト名フォーマッタ:何もしない(デフォルト)
インスタンス構成詳細、タグも何もしない

プール配置の構成画面で以下を入力、選択し、「次」をクリックします。
可用性ドメイン:可用性ドメイン1(大阪リージョンは可用性ドメインが1つしかないため)
フォルト・ドメイン:何もしない(デフォルト)※任意のフォルト・ドメインを選択することもできます
仮想クラウド・ネットワークの選択コンパートメント:自身の権限のあるコンパートメント
仮想クラウド・ネットワークの選択:自身のVCNを選択
サブネットの選択コンパートメント:自身の権限のあるコンパートメント
サブネットの選択:インスタンスを展開したいサブネットを選択(今回はパブリック・サブネット)
ロード・バランサのアタッチ:OFF(デフォルト)

設定内容を確認し、右下の「送信」をクリックします。

インスタンス・プールが作成されました。

オートスケーリングの設定
作成したインスタンス・プールを元にオートスケーリングを作成します。
公式チュートリアルに習い、インスタンス・プール内の平均CPU使用率が70%を上回ったら1インスタンス増やす、30%未満になったら1インスタンス減らす、というポリシーを設定します。
スケーリングするインスタンス数は、最小1インスタンス、最大3インスタンスに設定します。
左上ハンバーガーメニューから コンピュート > インスタンス・プール を選択し、作成したインスタンス・プールのリンクをクリックします。
右上の「アクション」> 自動スケーリング構成の作成 をクリックします。

自動スケーリング構成の作成画面で以下を入力、選択し、「次」をクリックします。
名前:任意名
コンパートメントに作成:自身の権限のあるコンパートメント
インスタンス・プール:作成したインスタンス・プール

自動スケーリング・ポリシーの構成で以下を入力、選択します。
メトリックベースの自動スケーリング

続いて、以下を入力、選択します。
自動スケーリング・ポリシーの構成
自動スケーリング・ポリシー名:任意名
クールダウン(秒):300(デフォルト)
パフォーマンス・メトリック:CPU使用率

続いて、以下を入力、選択します。
スケールアウト・ルール
スケールアウト演算子:次より大きい(>)
しきい値パーセンテージのスケールアウト:70
追加するインスタンスの数:1

続いて、以下を入力、選択します。
スケールイン・ルール
スケールイン演算子:次より小さい(<)
しきい値パーセンテージのスケールアウト:30
削除するインスタンスの数:1

続いて、以下を入力、選択し、「次」をクリックします。
スケーリング制限
インスタンスの最小数:1
インスタンスの最大数:3
インスタンスの初期数:1

確認画面で内容を確認し、「作成」をクリックします。

自動スケーリング構成が作成できました。

インスタンスの確認
インスタンス画面でオートスケーリングで設定した「インスタンスの初期数」の1台が起動して「実行中」になりました。

パブリックIPアドレスを指定してブラウザから「http://パブリックIPアドレス」へ接続してみます。
WEBページが正常に表示されたことでインスタンスは、カスタム・イメージから正常に起動して動作していることが確認できました。

CPU負荷を上げてスケールアウトを確認する
オートスケーリングで起動してきたインスタンスにOS上からCPU負荷をかけてCPU使用率が閾値(ここでは70%)を上回るように設定し、インスタンスが1台増えることを確認します。
インスタンスへログインします。
stressパッケージを含むEPELリポジトリが有効になっているか確認します。
おそらく「disabled」となっているのでyum-config-managerコマンドでenabledにします。
sudo yum repolist all | grep -i epel

利用しているイメージのバージョンを確認し、有効化のためのコマンドを実行します。
あらためて有効化されたことを確認します。
sudo yum-config-manager –enable ol9_developer_EPEL
sudo yum repolist all | grep -i epel

stressパッケージをインストールします。「Complete!」が表示されればインストール完了です。
sudo yum -y install stress
stressコマンドでCPUに負荷をかけます。該当インスタンスは「VM.Standard3.Flex」のシェイプを利用しています。
stress -c 2 &
topコマンドで確認してみます。
公式チュートリアルとシェイプは違いますが、下記コマンドでCPU負荷が100%になりました。(※タイミングによって 100 でない時もあります)
top

作成したインスタンス・プールをクリック、「モニタリング」タブを選択、「CPU使用率」をCPU使用率が急上昇していることが確認できます。

上記状態で、クールダウン期間で指定した300秒が過ぎると、スケーリングします。
作成したインスタンス・プールをクリック、「詳細」タブを選択し、「アタッチされたインスタンス」を確認すると2台目のインスタンスが起動していました。

次にインスタンス・プールをクリック、「モニタリング」タブを選択し、「CPU使用率」を確認します。
2台の平均CPU使用率が、だいたい50%になっていることが確認できます。
もし、2台目のインスタンスでもCPU使用率を100%にすれば、2台の平均CPU使用率は100%となり、3台目のインスタンスが起動することになります。
今回は2台目までにしておきます。
1台目のインスタンスのCPU使用率:100%
2台目のインスタンスのCPU使用率:0%
2台の平均CPU使用率:50%

CPU負荷を下げてスケールインを確認する
次は、CPU使用率を下げてスケールインすることを確認します。
バックグラウンドで動いているすべての stress プロセスを一括停止する場合、pkill stressを実行します。
pkill stress

topコマンドで確認してみます。
CPU使用率は、0 % になりました。
top

この状態で、クールダウン期間で指定した300秒が過ぎると、スケーリングします。
作成したインスタンス・プールをクリック、「詳細」タブを選択し、「アタッチされたインスタンス」を確認するとインスタンスが1台「終了中」⇒「終了済」になっており、スケールインしていることが確認できます。

まとめ
画像はないのですが「自動スケーリング構成」を「無効化」しただけでは、オートスケーリングから起動したインスタンスはそのまま起動したままでした。
「インスタンス・プール」を「停止」すると起動していたインスタンスは「停止済」になりました。
以下、他の記事をまとめた一覧です。OCI以外にAWSもまとめています。