AppRunではじめるコンテナ実行環境入門(2)AppRun専有型のプライベート環境でコンテナを起動する

はじめに

前回の記事でAppRun共用型を紹介しウェブサーバを起動しました。今日はAppRun専有型を触っていきます。

AppRun専有型とは

AppRun専有型は、さくらのクラウドが提供するコンテナ実行サービスのひとつで、アプリケーションを専用の仮想サーバ(ワーカーノード)上で実行できる点が大きな特徴です。いわゆる共用型のサーバレス/コンテナサービスとは異なり、実行基盤が他ユーザーと分離されているため、性能の安定性やセキュリティ要件を重視するシステムに向いた構成となっています。

共用型と異なり、共用セグメントの他にスイッチやルータ+スイッチと接続が可能となっており、プライベートセグメントを構築可能になっています。

サービスエンドポイントゲートウェイとの連携

サービスエンドポイントゲートウェイ(SEG: Service Endpoint Gateway) は、さくらのクラウドで新しく提供開始された ネットワーク機能の拡張サービス です。プライベートネットワーク内のサーバーから、さくらのクラウドが提供するマネージドサービスへ安全に接続できるようにする ための仕組みとして提供されています。

SEGと連携を行うことで、AppRun専有型内蔵のワーカーノードやロードバランサが、AppRun専有型の管理サーバーやさくらのコンテナレジストリと通信が可能となります。

さっそくやってみる

以下の環境をこの記事では作成してみます。

1. スイッチの起動とSEGの有効化

まずはワーカーノードと連携させるスイッチを起動し、SEGを有効化します。

適当な名前を付け、設定項目はすべてデフォルトのまま 作成 をクリックします。

起動が完了したら詳細画面の サービスエンドポイントゲートウェイ タブから、SEGの有効化を行います。

IPアドレスは 192.168.0.3 、ネットマスクは24を付与します。

編集 から コンテナレジストリ のURLと AppRun専有型コントロールプレーン を有効化します。コンテナレジストリは前回作成したAppRun共用型と同じもので問題ありません。

2. コンテナイメージの準備

AppRun専有型は共用型と異なり、AppRun専有型内部でコンテナを実行するユーザの権限で起動しているため、アプリケーションがroot権限を必要とするパスに書き込みを行う場合は正常に実行できません。このため、前回の記事で用いたnginxのコンテナイメージは起動に失敗します。同じく特権ポートである80番ではなく、8080番などの別ポートでサービスを起動させる必要があります。このため、 unprivileged:latest を利用します。手順は前回と同じなので割愛します。

なお今後新しいモードの提供もロードマップに入っていますので、また追ってご紹介させていただく予定です。

3. サービスプリンシパルの作成

AppRun専有型では、ワーカーノードなどの作成で サービスプリンシパル という権限を利用します。サービスプリンシパルについては以下でまとめていますので参考にしてください。

さくらのクラウド ホーム画面の左ペインから サービスプリンシパル を選択し、サービスプリンシパルの追加 をクリックします。

適当な名前を付けて作成します。

次に左ペイン IAMポリシー を選択し、アクセス権の付与 をクリックします。

以下の様に さくらのクラウド 作成・削除 権限を付与します。間違えやすい点として、AppRun という権限が別に存在していますが、そちらではないので注意してください。

4. AppRun 専有型 でクラスターを起動

ではいよいよAppRun専有型を操作していきます。まずはクラスターの起動を行います。

クラスタを追加 をクリックします。

先ほど作成したサービスプリンシパルを指定し、適当な名前を付けます。

ロードバランサをポート80で設定し、作成する をクリックします。

5. オートスケーリンググループ / ワーカーノード /ロードバランサの起動

5.1. オートスケーリンググループ / ワーカーノード の作成

オートスケーリンググループはワーカーノードやロードバランサのクラスタを管理する概念です。オートスケーリンググループをまず作成すると、その中にワーカーノードが自動で起動します。その後ロードバランサの設定を行います。

作成されたクラスタの詳細画面から オートスケーリンググループ のタブをクリックし、オートスケーリンググループを追加 をクリックします。

適当な名前を付けゾーンを指定します。このシナリオでは 石狩第3 で作成します。

構成は以下の様に最小にしておきます。

NIC設定は注意が必要です。SEGが有効化されたスイッチに接続を行います。

IPアドレスは SEGが 192.168.0.3/24 で起動していますので重複しないように指定します。次の手順で行うロードバランサも同じサブネットのIPアドレスを使用しますので、IPアドレスを使い切らないように注意してください。

今設定を行ったeth0をロードバランサに接続します。

ネームサーバはSEGが提供していますので 192.168.0.3 を指定します。

作成する をクリックしてしばらく待つと、ワーカーノードが1台無事に起動します。

5.2. ロードバランサの作成

次にロードバランサタブをクリックし、ロードバランサを追加 をクリックします。

NICですが eth0共有セグメントeth1SEG を有効化したスイッチ とし、スイッチ側のIPアドレスとワーカーノードと重複しないような範囲で指定します。

ロードバランサはインターネットに面しますので、ネームサーバはSEGではなくデフォルトのまま 作成する をクリックします。

しばらく待つと無事ロードバランサが起動します。

6. ロードバランサの起動

今までの手順でアプリケーションを起動させるための基盤が整いましたので、いよいよコンテナを起動します。

クラスタの詳細画面から アプリケーション タブを選択し、アプリケーションを追加 をクリックします。

適当な名前を付けて 作成する をクリックします。

アプリケーションにはバージョンという概念があり、このバージョンはデプロイごとに増えていく数字になります。コンテナイメージがアプリケーション更改に伴い刷新されるたびに、デプロイが行われバージョンが増えていきます。

バージョンを追加 をクリックします。

手順2で作成したコンテナイメージを指定します。

リソース設定には少し注釈が必要です。

mCPUは主に Kubernetes関係 で使われる用語で、CPUをミリ秒で計測する数値です。1000 mCPU= 1v CPUとして計算されますので、ワーカーノードを1vCPUとしたのであれば、起動されるコンテナの合計値(1個のコンテナではなくオートスケールで起動するコンテナ総数の合計値)は1000 mCPU を越えることはできません。

次にオートスケールの条件を指定します。

コンテナ内部のnginxは 8080 で起動します。これをロードバランサが外部80ポートに開放させるための設定を行います。

ホスト名(DNS名)を指定します。TCPと異なり、ロードバランサをHTTP(s)で設定した場合、ロードバランサのIPアドレスに直接アクセスすることは行えません。必ずここで指定したホスト名でアクセスを行う必要があります。ただしAppRun専有型はDNSサービスではありませんので、別のDNSサービスでロードバランサのIPアドレスとここで指定するDNS名を紐づけるAレコードを提供する必要があります。この手順は後程触れます。

設定したら 作成する をクリックします。作成直後は 非アクティブ 状態ですのでアクティブに変更してしばらく待ちます。

以下の様にしばらく待つと作成が完了します。

先ほど作成したワーカーノードの詳細画面を見ると、アプリケーションが無事ワーカーノードに乗っていることがわかります。

6. ロードバランサのIPアドレス取得とDNS設定

起動したロードバランサの詳細画面から、ロードバランサの外向けIPアドレスを取得します。

この画像の例だと 133.125.225.95 がそれにあたります。これを外部の任意のDNSサービスで 先ほど設定したホスト名とAレコードで紐づけます。

その後ブラウザでアクセスすれば完了です!

まとめ

2回連載でAppRun 共用型 / 専有型 をご紹介しました。オプションが豊富で強力なサービスですので是非お試しください!