Azure Container RegistryからAzure Container Service(AKS)へのデプロイ

前回「Azure Container Registryの作成からDockerイメージのプッシュまで」でした。
今回はAzure Container Service(AKS)にて、Azure Container Registryからのデプロイを試してみます。

Azure Container Registry とは

AKSとは、マネージド型のKubernetesです。

AKSは、Kubernetesを用いたアプリケーションのスケーリング及びオーケストレーションが可能で、Kubernetesクラスタの管理の複雑さと運用上のオーバーヘッドを軽減します。料金については、マスターノードへの課金は無く、利用したリソース(エージェントノードのVM やストレージ等)に対しての課金のみです。

AKS は、2018/04/10現在、プレビュー版のみの提供で、対応リージョンに日本は無く、以下のみになります。

  • 米国東部
  • 西ヨーロッパ
  • 米国中央部
  • カナダ中部
  • カナダ東部

主な特徴は以下になります。

  • 自動的なKubernetes のバージョンのアップグレードと修正プログラムの適用
  • 簡単なクラスタースケーリング
  • ホストされているコントロール プレーン (マスター) の自己修復
  • 実行しているエージェント プール ノードのみの課金によるコストの削減
  • 標準のKubernetes API エンドポイントの公開で、kubectl、helm、draft などのKubernetes クラスタと通信できる任意のソフトウェアで通信可能
  • AKS の使用には、Azure CLI、または、ポータル(Marketplace で Azure Container Service を検索)を経由することで、AKS クラスタをデプロイ可能

詳細は以下をご覧頂ければと思います。
https://docs.microsoft.com/ja-jp/azure/aks/intro-kubernetes

今回構築する環境

構築後の環境のイメージを図にすると以下になります。Azure Container RegistryとクライアントPCの環境については、前回をそのまま使用します。
input

各環境については、以下になります。

環境 説明
Azure Container Service(AKS) AKSは、Azure Container RegistryからDockerイメージをPullしてNode上にコンテナをデプロイします。
Azure Container Registry(ACR) Docker のPrivate Registry。
開発PC Dockerイメージを作成して、Azure Container RegistryにPushします。

Azure Container Service(AKS)クラスタの作成

AKS がプレビューである間、新しいクラスタを作成するには、サブスクリプションに機能を要求するための機能フラグが必要です。

az provider register コマンドの実行で、AKSプロバイダの登録や、AKSクラスタ作成時にタイムアウトしないようにするためのプロバイダを登録します。コマンドは、次のとおりになります。

前回の記事で作成したAzure Container Registryと同じリソースグループのrgAcrTestに、myAKSClusterという名前でAKSクラスタをノード1つで作成します。コマンドは次のとおりです。完了するまでしばらく待ちます。

以上で、AKSクラスタの作成は完了です。

kubectl CLIの構成

開発PCから、Kubernetesクラスタに接続するには、kubectl(Kubernetesコマンドラインクライアント)を使用します。

開発PCローカルにインストールするには、次のコマンドでインストールします。

Kubernetesクラスタに接続するように kubectlを構成するには、次のコマンドを実行します。

次のとおり、クラスタへの接続を確認するには、kubectl get nodesコマンドを実行します。
クラスタ作成コマンドで、ノード1個の指定で作成しているため、実行結果に、STATUS 欄がReady、ROLES 欄にagent と表示される行が1行あることを確認します。

以上で、kubectl CLIの構成は完了です。

Azure Container Registry(ACR)認証の構成

AKS クラスタとACR レジストリとの間で認証が構成されている必要があります。その際、ACRレジストリからイメージをプルするための適切な権限をAKSのIDに付与します。

まず、次のとおり、AKSに対して構成されているサービスプリンシパルのIDを取得します。

それから、次のとおり、ACRレジストリのリソースIDを取得します。

最後に、適切なアクセス権を付与するロールの割り当てを、次のコマンドで作成します。

以上で、ACR認証の構成は完了です。

AKSクラスタにデプロイするコンテナイメージの作成

AKSにデプロイ後、Webブラウザで表示確認できるよう、PHPモジュールが動作するサーバーのIPアドレスを画面表示する以下のPHPモジュールを「test.php」のファイル名で作成します。srcディレクトリに格納します。

デプロイ用のイメージを作成します。srcディレクトリがあるディレクトリに、以下のDockerfileを作成します。

こちらのDockerfileからデプロイ用のイメージをビルドし、Azure Container RegistryにPushします。

デプロイ用のイメージに、1.0というタグを付けました。

本番用イメージに1.0が、ACRレジストリにプッシュされていることを、次のとおり、確認します。

AKSクラスタへのコンテナイメージのデプロイ

作成したコンテナイメージをAKSにデプロイします。

AKSにデプロイするために、Kubernetesのマニフェストファイルを作成します。開発PCの任意のディレクトリに、次の内容で、ファイル名deploy.ymlとして作成します。

次のとおり、kubectl createコマンドを実行すると、作成したマニフェストファイルに従って、AKSにリソースの作成とデプロイを行います。

アプリケーションをインターネットに公開するAKSのServiceが作成されます。これにはしばらく時間がかかります。
次のとおり、進行状況を監視するには、kubectl get service コマンドに–watch 引数を指定して実行します。

webサービスのEXTERNAL-IP欄は”保留中”で表示されます。しばらくすると、EXTERNAL-IP欄が「保留中」から「IPアドレス」に変わったら、CTRL-C を使用して kubectl ウォッチ プロセスを停止します。

さらに、次のとおり、kubectl get podsコマンドで、Podが1個作成されていて、Status欄が「Running」となっていることを確認します。

EXTERNAL-IP欄にIPアドレスが表示されたら、そのIPアドレスでブラウザから表示確認します。
次の画面が表示されれば、デプロイが正常に実行されています。
input
画面が表示されなかった場合は、AKSクラスタとACRレジストリとの認証に関する構成が原因になっている可能性があります。

まとめ

以上のように、Azure Container Service(AKS)から、Azure Container RegistryにプッシュしたDockerイメージをプルできるので、デプロイ作業が簡単にできます。
コンテナーイメージを保存できるAzure Container Registryを使用すれば、各開発者の環境はもとより、テスト環境や本番環境でも同一の環境にでき、アプリケーションの継続的なビルドとデプロイが大幅に簡単になると考えられます。

斎藤@SSTD

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

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

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

コメント投稿

メールアドレスは表示されません。


*