##はじめに
本記事では、AzureでフルマネージドなRed Hat OpenShiftのKubernetesクラスターを利用できるサービスであるAzure Red Hat OpenShift(ARO)のクラスター作成と、アプリのデプロイ方法についてご紹介したいと思います。
現在、AROではOpenShiftのバージョン4を利用できます。もちろんOpenShiftが提供している様々な機能もそもまま活用できます。特にWebコンソールでクラスター上の様々なリソースやオブジェクトの管理・運用がGUIベースで操作できるので、一度利用するとその便利さを実感できるのではと思います。OpenShiftを利用したことがある方にも、AROではクラウド上にすぐにOpenShiftのクラスターを作成でき、必要な時にすぐにリソースの拡張ができる点、さらにもしもの時にもAzureで一元的なサポートを受けられるなど、Azureと統合されたOpenShiftの利点を感じる方も多いのではと思います。
AROは日本では東日本と西日本の両方のリージョンで利用可能となっており、マルチAZにも対応しています。
この記事を読んでいただき、ぜひ実際にAROに触れてみてください!
##AROクラスターの作成
###前提条件
AROクラスターを作成するための前提条件は下記になります。
(1)Azureのアカウントを保有している
(2)Azure CLIバージョン2.6.0 以降を利用できる
ここから入手できます。AzureのCloud Shellを利用する場合はすぐに使えます。
(3)Azureリソースクォータの制限を引き上げる
AROクラスターの作成には最低でも合計36のVMコア数が必要ですが、個人アカウントの場合は既定のリソースクォータに引っかかってしまいます。VMのリソースクォータの引き上げを、こちらに記載の手順で実施してください。途中でVMシリーズを選択する必要があります。少なくともDSv3シリーズ(マスターノードで利用)のクォータ変更が必要です。(少しハードルが高そうに感じるかもしれませんが、申請をポータルから入力するだけです。私の場合はDSv3とワーカーノード用にDasv4シリーズのvCPU数を40に設定して申請し、約2分後にApproveの連絡が届きました。時間がかかる場合もありますのでご注意ください)
###Azure CLIでAROクラスターを作成するための準備
ここからはAzure CLIでの操作となります。まず、Azure CLIでリソースを操作する場合、操作対象のリソースによっては、リソースプロバイダーの登録が必要となるものがあります。一度登録すればそれ以降は不要です。AROではRedHatOpenShift, Compute, Storageの3つのリソースプロバイダーを登録する必要があります。Azure CLIで、下記の3つのコマンドを実行することで登録できます。
az provider register -n Microsoft.RedHatOpenShift --wait
az provider register -n Microsoft.Compute --wait
az provider register -n Microsoft.Storage --wait
###ARO用のリソースグループの作成
次に、AROの所属先となるリソースグループを作成します。まず、何度も利用するパラメータを次のようにシェルの変数に設定します。ARO用に仮想ネットワークも作成するので、そのための値も設定しておきます。下記の値の内容は適宜変更しても問題ありません。
LOCATION=japaneast #リソースを配置するリージョン
RESOURCEGROUP=aro-rg #AROクラスターを配置するリソースグループ名
CLUSTER=cluster #AROクラスター名
VNET=aro-vnet #AROクラスターを接続する仮想ネットワーク名
次に、リソースグループを作成します。このリソースグループにAROと仮想ネットワークを作成していきます。
az group create \
--name $RESOURCEGROUP \
--location $LOCATION
###ARO用の仮想ネットワークの作成
AROクラスターを接続する仮想ネットワークを作成します。AROクラスターでは、マスターノード用とワーカーノード用の2つのサブネットを持つ仮想ネットワークが必要です。
まず、仮想ネットワークを作成します。
az network vnet create \
--resource-group $RESOURCEGROUP \
--name $VNET \
--address-prefixes 10.0.0.0/22
次にマスターノード用、ワーカーノード用のサブネットをそれぞれ作成します。
az network vnet subnet create \
--resource-group $RESOURCEGROUP \
--vnet-name $VNET \
--name master-subnet \
--address-prefixes 10.0.0.0/23 \
--service-endpoints Microsoft.ContainerRegistry
az network vnet subnet create \
--resource-group $RESOURCEGROUP \
--vnet-name $VNET \
--name worker-subnet \
--address-prefixes 10.0.2.0/23 \
--service-endpoints Microsoft.ContainerRegistry
マスターノードのサブネットにはサービス用のプライベートリンクサービスが接続されるので、下記のコマンドでそのためのポリシー設定変更が必要となります。
az network vnet subnet update \
--name master-subnet \
--resource-group $RESOURCEGROUP \
--vnet-name $VNET \
--disable-private-link-service-network-policies true
アドレス空間は変更しても問題ありませんが、ワーカーノードとマスターノード用には最小/27
の空間が必要ですのでご注意ください
###Red Hatプルシークレットを取得する
Red Hatコンテナーレジストリにアクセスするためのプルシークレット設定用のファイルを取得します。後ほどAROクラスターの作成時にコマンドの引数として受け渡します。作成後に更新することもできます。
こちらのRed Hat社のポータルにログインします。ログインにはRed Hatアカウントが必要となりますので、アカウントが無い場合は新規登録が必要です。ログイン後に画面中央に表示される[Download pull secret]をクリックして、プルシークレット用ファイルpull-secret.txt
をダウンロードします。
2020/2/8追記
Red HatプルシークレットはAROクラスター作成には必須ではありませんが、S2Iを用いたアプリのデプロイで利用します
###AROクラスターを作成する
いよいよAROクラスターを作成します。といっても、次のコマンドを実行するだけです。前の手順でダウンロードしたプルシークレット用ファイルpull-secret.txt
を格納したディレクトリで下記コマンドを実行してください。
az aro create \
--resource-group $RESOURCEGROUP \
--name $CLUSTER \
--vnet $VNET \
--master-subnet master-subnet \
--worker-subnet worker-subnet \
--pull-secret @pull-secret.txt
他の引数を指定して、ワーカーノードのVM数やサイズ変更、クラスターのプライベート化など様々なカスタマイズできるのですが、今回は必要最低限のものだけを指定しています。他の引数についてはこちらを参照ください。
##AROクラスターへの接続
###Webコンソールへの接続
AROクラスターが作成できたら、早速作成したAROクラスターのWebコンソールに接続してみましょう。まずは、Webコンソールにログインに必要なユーザ名とパスワードを下記のコマンドで出力します。
az aro list-credentials \
--name $CLUSTER \
--resource-group $RESOURCEGROUP
上記の結果、出力されたユーザ名とパスワードを安全な場所にメモしておいてください。
次に、WebコンソールのURLを下記のコマンドで確認します。
az aro show \
--name $CLUSTER \
--resource-group $RESOURCEGROUP \
--query "consoleProfile.url" -o tsv
上記のコマンドの結果、https://console-openshift-console.apps.<random>.<region>.aroapp.io/
のような形式で出力されます。(AROクラスター作成時にカスタムドメインを指定した場合は指定したドメインに対応するURLになります)
ブラウザーで上記URLに接続し、メモしておいたユーザ名とパスワードでログインしてください。
###OpenShift CLIを利用して接続[オプション]
OpenShiftではkubectlでの操作ももちろん可能ですが、OpenShift用に様々な拡張が実施されたOpenShift CLIが利用できます。Webコンソールにログイン後、右上あたりの[?]をクリックすると表示される[Command Line Tools]をクリックし、表示される画面からダウンロードできます。
OpenShift CLIをインストールできたら、クラスターに接続してみましょう。Webコンソールの右上のユーザ名(既定ではkube:admin)をクリックすると表示される[Copy Login Command]をクリックし、その後画面に表示される[Display Token]をクリックすると表示されるLog in with this tokenの下に表示されるOpenShift CLIのログインコマンドをコピーして、コンソールで実行してください。
ログインに成功すると、AROクラスターをOpenShift CLIで操作可能です。
##AROクラスターへのアプリのデプロイ
###GitHub上のソースコードからアプリを直接デプロイできるS2I(Source to Image)機能
AROクラスターに接続できたところで、AROクラスターにアプリをデプロイしてみましょう。OpenShiftではS2I(Source to Image)という機能で、GitHubなどのリポジトリのソースコードから直接コンテナイメージをビルドして、クラスターにデプロイできます。ソースコードから自動的に言語を検出して、適切なビルド処理を自動的に実行してくれます。開発者はコードを書くだけで、すぐにコンテナイメージを作成してデプロイできます。今回はこの機能を利用してアプリをデプロイしてみます。
[参考]
S2I(Source to Image)
###Webコンソールからのアプリのデプロイ
では、先ほど接続したWebコンソールからアプリをデプロイしていきます。Webコンソールの左上の[Administrator]と書かれている部分をクリックし、メニューに表示されたDeveloperをクリックして、Webコンソールを開発者モードに切り替えましょう。すると次のような画面が表示されます。
中央のメニューに様々なアプリのデプロイ方法が並んでいますが、今回はFrom Git(Gitリポジトリからのアプリデプロイ)をクリックします。すると画面に切り替わりますので、[Git Repo URL]の下のボックスにGitリポジトリのURLを入力します。
今回は下記のGitHubにあるサンプルコード(Djangoフレームワークでテストページを表示するWebアプリ)を用いてデプロイしてみます。
https://github.com/sclorg/django-ex.git
入力すると、画面が次のように更新され、自動的にソースコードの言語としてPythonが検出されているのが分かります。
他の入力項目は自動的に既定値が入力されるので、そのままスクロールダウンして[Create]ボタンをクリックして、アプリをデプロイしてみましょう。すると次の図ようなPythonアプリのアイコンが画面中央に現れます。クリックすると、右側に詳細が表示され、自動的にアプリに対してpod(Deployment)、Serviceやイングレス(Route)などのオブジェクトが作成されているのが分かります。ここで真ん中あたりに[Builds]と書かれた部分に注目してください。自動的にBuild Configというオブジェクトが作成され、"Build #1 Running"と記載されているように、先ほど指定したGitHubのソースコードからコンテナイメージを自動的にビルドしています。
このBuild Configオブジェクトをクリックして詳細を表示すると、次の画面のようにコンテナをビルドしている様子が確認できます。
ビルドが完了すると、自動的にpodが立ち上がります。では、実際に接続してみましょう。先ほど表示したアプリの詳細画面で表示されていた[Routes]の下に記載されているURLからアプリに接続できます。ブラウザで接続すると、次の画面が表示され、無事にアプリがデプロイできていることが確認できました!
なお、今回はアプリのデプロイをWebコンソールから実施しましたが、OpenShift CLIからもoc new-appコマンドの引数にGitHubのURLを指定することで、同じようにアプリをソースコードからデプロイすることが可能です。
##終わりに
今回の記事では、Azure Red Hat OpenShift(ARO)のクラスター作成から、GitHubソースコードをからアプリをデプロイする流れをご紹介しました。すぐにOpenShiftをAzure上で使い始めることができ、簡単にアプリを動かすことができるのを感じていただけたかと思います。他にもAzureのサービスとの連携による便利な機能もまだまだありますので、また記事にできればと思います。
[ご参考]
AROの概要説明ドキュメント