KubernetesでApp Serviceを動かす!!

★★★ Live配信告知 ★★★

Azureでクラウドネイティブな開発をするための方法について、世界一わかりみ深く説明致します!!複数回シリーズでお届けしている第5回目は、「Application Insightsでアプリケーションパフォーマンス管理に全集中!!」と題しまして、Azureに関するお役立ちノウハウをたくさんお届けします!!
【2021/8/25(水) 12:00〜12:30】

こんにちは、サイオステクノロジー武井です。今回は、KubernetesでApp Serviceを動かすということをしてみたいと思います。

Azure Arcとは?

Azure以外のクラウドやオンプレミスで動作する仮想マシンその他のリソースを統合的に運用監視しましょうというサービスです。AWSで動作する仮想マシンであるEC2を管理する場合はCloud Watchを使いますし、GCPであればCloud Monitoring、AzureであればAzure Monitorといったところになります。マルチクラウドを考えた場合、Cloud Watch、Cloud Monitoring、Azure Monitorの3つのツールを使いこなすのはちょっと大変です。

Azure Arcを使うと、Azure以外(他のクラウドやオンプレミス)のリソースに専用のエージェントを入れることにより、Azure上のリソースとして登録し、Azure側で一括管理できてしまいます。先の例で言えば、AWSのEC2もGCPの仮想マシンも全て、Azure上のリソースとして見えるようになるのでAzure Monitorで管理出来るようになります。

Azure Arc enabled Kubernetes

Azure Arcは、Azure以外のKubernetes(他のクラウドやオンプレミスのKubernetes)をAzureのリソースとして管理することができます。私はAzure Arcの機能の中でこれが最もすごいと思っております。

今回ご紹介するApp ServiceをKubernetesで動かすぞという技術のベースには、このAzure Arc enabled Kubernetesが使われております。これはApp Serviceをコンテナ化(もしくはApp Serviceがそもそもコンテナベースで動いている???)して、Azure Arcによって、Kubernetesリソースとして登録されている別クラウド上のKubernetesにデプロイが可能になる技術です。

これは何がいいかというと、私個人の考えになりますが、クラウドネイティブかつマルチクラウドという相反するテクノロジーが共存出来るのかなと思っております。

例えばAzure FunctionsといったFaaSサービスを使うと、OSやアプリケーションフレームワークといったレイヤーの面倒を見なくてよく、簡単にアプリケーションを構築出来る反面、それはAzureネイティブな技術なので、他のクラウドに移植することが困難になります。つまりAzure Functionsで作ったアプリをマルチクラウドで展開する場合、そのアプリはほぼ作り直しになるのです。AWSでAzure Functionsはもちろん動きませんから、Lambdaあたりで再開発といったところになります。もちろんある程度の部品の流用はできると思いますが。

でも、Azure Arc enabled Kubernetesを使えば、App ServiceというAzureマネージドなクラウドネイティブな機能を他クラウドのKubernetes上で動作させることができ、そして万が一Azureが大規模障害で利用不能のになったとしても、他のクラウドでApp Serviceが動作するということが出来るのです。

ちなみに、この機能はMicrosoft Build2021でプレビューとなり、App Serviceだけではなく、Azure Functions、Logic Apps、Event Gridなどもその対象となります。

早速動かしてみよう!!

ということで、やってみましょう。といっても、すでにその方法は以下URLのMicrosoft Learnに掲載されており、その方法をベースにしております。

https://docs.microsoft.com/ja-jp/learn/modules/configure-application-kubernetes-arc/

Microsoft LearnではAzure Kubernetes Service上にApp Serviceをデプロイする方法が記載されていましたので、それに準拠します。オンプレミスや他のクラウドのKubernetesでも、、、動くのかしら?

ちなみにこの検証に必要なリソースは以下のリソースグループとリージョンに配置することとします。

  • リソースグループ:appservicewazurearc
  • リージョン:East US

作業は全てAzure Cloud Shellで行います。

事前準備

まずApp ServiceをKubernetes上で動作するためのリソースプロバイダーと機能を有効にします。

 

次のコマンドを実行して、最新のAzure CLI拡張機能をインストールします。

 

次のコマンドを実行して、connectedk8s および customlocation Azure CLI 拡張機能をインストールします。

 

az -vコマンドを実行して、以下のモジュールが表示されることを確認します。バージョンは違うかもしれません。

AKSクラスターの作成

AKSクラスターを作成するリソースグループ、クラスター名、リージョンなどを変数に定義します。

 

AKSクラスターを作成します。ちょっと時間かかります。

 

クラスターから管理者資格情報を取得します。以下のNamespaceが取得できればOKです。

 

AKSクラスターをAzure Arcに接続する

Azure  Arcのクラスターを作成するリソースグループとクラスター名を変数に定義します。

 

AKSクラスターをAzure Arcに接続します。2分程度かかります。出力結果のprovisioningState プロパティの値が Succeeded となっていることを確認します。

 

クラスター上に作成された Azure Arc ポッドを一覧表示します。clusterconnect-agent ポッドが含まれていることを確認してください。

Azure Arc上のAKSクラスターでApp Serviceを使えるようにする

AKSクラスターやAzure Arcのリソースグループ名などを変数に定義します。

 

パブリックIPアドレスのリソースを作成して、その値を変数に格納します。

 

カスタムロケーションを定義します。カスタムロケーションはAzure Arcで管理されているリソースの場所を定義する仮想的な場所のことです。App ServiceをAzure Arcで管理されたKubernetes上に作成するときに、このカスタムロケーションの指定が必要になります。

 

Azure Arc に接続されたクラスターと、対応する Kubernetes 環境にインストールする拡張機能の名前を指定する変数の値を設定します。

 

App ServiceのPodが作成されるNamespace名を変数に格納します。

 

App Serviceのアプリケーションログを格納するLog Analyticsを作成します。

 

Log Analyticsの色々な設定情報を変数に格納します。

 

App Service拡張機能をインストールします。

 

正常にインストールされたかどうかを確認します。以下のコマンドを実行して、installState プロパティの値が Installedに変わることを確認します。変わるまで何度も実行してください。ちょっと時間かかります。

 

拡張機能のIDを変数に格納します。

 

Azure Arc上で動作するKubernetesクラスターにカスタムの場所を作成します。これを行うことにより、App Serviceの作成場所として、このカスタムの場所を指定すると、Azure Arc上で動作するKubernetes上にApp Serviceが作成されます。

接続されているクラスターの id プロパティの値を変数に格納します。

 

カスタムの場所を作成します。

 

カスタムの場所のIDを変数に格納します。

 

App Service Kubernetes 環境を作成します。

 

ちゃんとできているかどうかを以下のコマンドで確認します。ちょっと時間かかるので、provisioningState プロパティの値が Succeeded に変わるまでコマンドを何度も再実行します。

Azure Arc上のAKSクラスターでApp Serviceをデプロイする

App Service名を変数に格納します。

 

App Serviceを作成します。このとき先程作成したカスタムの場所を–custom-locationの値として指定します。これが重要です。

 

以下のPHPファイルを作成します。

 

先のPHPファイルを含むZIPアーカイブを作成します。

 

App Serviceにデプロイします。

 

しばらくしてApp Serivceのリソースの「概要」ブレードに表示される[URL]を確認して、「[URL]/test.php」にアクセスすると、ブラウザ上に「hoge」と表示されると思います。

AKS上にデプロイしたApp Serviceがちゃんと動きましたね!!ゴイスー。

Podを見てみましょう。一番下の「k8sarcwebapp264457290-7f95d7bf9d-cv2kq」っていう名前のPodがApp Serivceが稼働するPodです。

 

さっきのPodに入ってみましょう。

 

確かにtest.phpをデプロイしたApp SerivceのPodですね!!

ここでAzureポータルのApp Serivceの画面からスケールアウトしてみましょう。「最大インスタンス数」を2にしてみます。

 

Podの数を確認してみるとたしかに2つに増えてます!!「k8sarcwebapp・・・」っていう名称のPodが2つありますよね!!スケールアウトされました。

まとめ

Kubernetes上でApp Serivceが動きましたね!!なんかとっても未来を感じます。ドラえもんはすぐそこまで来ているって感じです。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*