初めてのAzure Kubernetes Service(AKS)
初めてのAzure Kubernetes Service(AKS)という事で、リソースの作成からサンプルアプリのコンテナーデプロイまでの手順を紹介します。
手順確認にあたってはMS社公式サイトのチュートリアルに沿って進めています。
チュートリアルに沿って、AKSとAzure Container Registry(ACR)を連携させ、ACRからアプリケーションをデプロイしています。
チュートリアルはAzure CLIなどでリソースを作成していますが、Azure Portalを利用してリソースを作成しています。
※本記事内ではAzure Kubernetes ServiceをAKSとして記載している箇所があります。
※本記事内ではAzure Container RegistryをACRとして記載している箇所があります。
- 1. Azure PortalでACRとAKSのリソースを作成
- 2. 事前準備(Azure CLI、Docker開発環境を準備)
- 3. ローカルのDocker環境でサンプルアプリを実行
- 4. ACRからサンプルアプリのイメージを取得してAKS上で実行
- 4.1. Azure CLIでサインイン
- 4.2. コンテナー イメージをACRにプッシュ
- 4.3. AKSクラスターの認証情報を取得
- 4.4. kubectlをインストール
- 4.5. kubectl get nodes実行時のエラー例
- 4.6. ACRのログインサーバー名を取得
- 4.7. マニフェストファイルの修正
- 4.8. AKSにアプリケーションをデプロイ
- 4.9. デプロイを確認
- 4.10. kubectl apply実行後のエラー例
- 4.11. フロントエンドIPアドレスの確認
- 4.12. ブラウザでアクセスして確認
- 4.13. Azure PortalでもPodの稼働状況やサービスの状態が確認できる
- 4.14. NSGやロードバランサーの設定を確認
- 4.15. リソース削除
- 5. 最後に
Azure PortalでACRとAKSのリソースを作成
作成したリソースの設定値
作成したリソースの設定内容です。
仮想マシン、リソースグループ、仮想ネットワークやサブネットは事前に準備したものを利用しています。
検証目的の設定としています。
主なACRの設定値です。
設定値 | ||
基本 | レジストリ名 | acr01 |
Pricing Tier | Basic |
主なAKSの設定値です。
設定値 | ||
基本 | リソース名 | aks-01 |
AKS価格レベル | 無料 | |
Kubernetesバージョン | 1.29.6(規定) | |
スケジュール | 毎週土曜日2時開始(日本時間) | |
ノードプール | ノードサイズ | Standard_D2as_v5 |
スケーリング方法 | 手動 | |
ノード数 | 1 | |
ネットワーク | プライベートクラスター | 有効 |
ネットワーク構成 | Azure CNI オーバーレイ | |
独自のAzure仮想ネットワークを持ち込む | 有効 | |
仮想ネットワーク | vnet-aks-01 | |
クラスターサブネット | subnet-aks-01 | |
ネットワークポリシー | Azure | |
統合 | コンテナーレジストリ | acr01 |
監視中 | Prometheusメトリックを有効にする | 無効 |
推奨されるアラートルールを有効化 | 無効 | |
詳細 | シークレットストア CSI ドライバーの有効化 | 有効 |
インフラストラクチャリソースグループ | rg-aks-02 |
※ACRは重複したレジストリ名を許可しません。適時付与下さい。
※検証目的とした設定としています。チュートリアルと異なる部分があります。
※検証コスト削減や、別の検証利用を想定して設定を変更している部分があります。
※ノード数を1にしているなど、Azureの推奨設定と異なっている部分があります。
ACRのリソースを作成
Azure Container Registry(ACR)のリソースを作成します。
ACRリソース作成手順 | |
コンテナーレジストリのメニューで作成を選択します。 | |
基本タブです。 レジストリ名やPricing Tierを選択します。 |
|
ネットワークや暗号化の設定です。 Premium Tierでしか利用できないため、そのまま進めます。 |
|
確認画面です。 内容を確認し、リソースを作成します。 |
AKSのリソースを作成
Azure Kubernetes Service(AKS)のリソースを作成します。
AKSリソース作成手順 | |
Kubernetesサービスのメニューで作成を選択します。 Kubernetes クラスターを選択します。 |
|
基本タブの設定です。 Kubernetesクラスター名、AKS価格レベル、Kubernetesバージョンなどを設定します。 |
|
AKSの自動アップグレード設定です。 有効化やアップデートスケジュールの設定ができます。 【自動アップグレードの説明】
|
|
ノードプール設定です。 ※検証コストの都合上、ノード数を1にしていますが、この設定は推奨されません。 |
|
ノードプールの設定です。 ノードサイズやスケーリング方法、ノード数を設定します。 最後に更新します。 |
|
ネットワーク設定です。 【プライベートクラスターの説明】 【ネットワーク構成(Azure CNI)の説明】 【ネットワークポリシーの説明】 |
|
統合設定です。 ACRとの接続などを設定します。 |
|
監視に関する設定です。 【マネージドPrometheusの説明】 |
|
詳細タブです。 必要に応じて修正します。 ※インフラストラクチャ リソース グループは、AKSと同時に作成されるリソースのリソースグループ名です。 |
|
レビューと作成の画面です。 内容を確認し、リソースを作成します。 |
|
AKSと同時に作成されたリソース
AKSと同時に作成されたリソースです。
関連リソースはインフラストラクチャ リソース グループとして指定したリソースグループに作成されます。
関連リソース | |
インフラストラクチャ リソース グループにノードプールとして構成された仮想マシンスケールセット、プライベートDNS、Load Balancerなどのリソースが作成されています。 ※設定内容により作成されるリソースは異なります。 |
|
ACRのアクセス制御設定
ACRのアクセス制御(IAM)の設定を確認します。
ACRのアクセス制御設定(IAM) | |
AKSのユーザー割り当てマネージドIDに対して、AcrPullのロールが割り当てされています。 |
—広告—
事前準備(Azure CLI、Docker開発環境を準備)
チュートリアルを実施するための環境を準備します。
作業環境
作業端末にはRocky Linuxの仮想マシン(Standard_B2ms(X86ベース))を利用しています。
チュートリアルに必要なアプリを仮想マシンにインストールしています。
-
- 作業環境
- Rocky Linux release 9.4 (Blue Onyx)
- Docker version 27.1.1 build 6312585
- azure-cli 2.62.0
- git version 2.43.5
- 作業環境
作業時点の最新バージョンに合わせて実施します。
kubectlのインストールは後に説明する手順内で実施しています。
Azure CLIのインストール
作業用端末にAzure CLIをインストールします。
Rocky LinuxにAzure CLIをインストールする手順についてはこちらで紹介しています。
gitのインストール
チュートリアルで利用するサンプルアプリはGitからClone(複製)します。
gitをインストールします。
[root@test-vm-01 ~]# dnf -y install git |
Dockerのインストール
チュートリアルではDocker関連のコマンドが出てきます。
Dockerをインストールします。
Dockerの公式サイトを参考にインストールします。
[root@test-vm-01 ~]# dnf install -y yum-utils |
ローカルのDocker環境でサンプルアプリを実行
ローカルのDocker環境でサンプルのアプリケーションを実行します。
AKSやACRを利用しません。
チュートリアル – Azure Kubernetes Service (AKS) 用のアプリケーションを準備する
Dockerを起動
Dockerを起動します。
[root@test-vm-01 ~]# systemctl start docker |
サンプルアプリをGitから複製
サンプルのアプリをローカル環境にダウンロードします。
[root@test-vm-01 ~]# git clone https://github.com/Azure-Samples/aks-store-demo.git |
サンプルアプリを実行
Docker Composeを利用してローカルのDocker環境にアプリケーションをデプロイします。
Docker Composeは、複数のDockerコンテナーを一括して管理・運用するためのツールです。
今回のサンプルアプリは4つのコンテナーから構成されています。
一括して立ち上げています。
[root@test-vm-01 aks-store-demo]# docker compose -f docker-compose-quickstart.yml up -d |
作成されたイメージを表示します。
[root@test-vm-01 aks-store-demo]# docker images |
実行中のコンテナーを表示します。
[root@test-vm-01 aks-store-demo]# docker ps |
Webブラウザを使って、サンプルアプリを確認します。
アクセス確認 | |
作業用の仮想マシン(http://仮想マシンのIPアドレス:8080)にアクセスして確認します。 |
ローカルDocker環境のアプリを停止
ローカルのDocker環境で動作しているサンプルアプリを停止します。
※コンテナーのイメージは削除しないようにします。
[root@test-vm-01 aks-store-demo]# docker compose down |
—広告—
ACRからサンプルアプリのイメージを取得してAKS上で実行
Azure CLIでサインイン
az loginコマンドでAzureアカウントにサインインします。
[root@test-vm-01 aks-store-demo]# az login |
Azure CLI バージョン 2.0.53 以降が必要となります。
Azure CLI バージョンを確認して、必要に応じてアップデートします。
[root@test-vm-01 aks-store-demo]# az –version core 2.62.0 Dependencies: Python location '/usr/bin/python3.9’ Python (Linux) 3.9.18 (main, Jul 3 2024, 00:00:00) |
コンテナー イメージをACRにプッシュ
サンプルアプリのコンテナー イメージをビルドしてACRにプッシュします。
az acr repository listコマンドでACRのリポジトリのリストを一覧表示しています。
[root@test-vm-01 aks-store-demo]# ACRNAME="acr01″ |
Azure Portalで確認してみます。
ACRのリポジトリを表示 | |
左側のメニューでリポジトリを選択します。 3つ作成されている事が確認できます。 |
AKSクラスターの認証情報を取得
AKSクラスターの認証情報を取得します。
認証情報を取得する事により、kubectlコマンドを使用したAKSクラスター管理ができるようになります。
[root@test-vm-01 ~]# az aks get-credentials –resource-group rg-aks-01 –name aks-01 |
kubectlをインストール
kubectlを使うと、CLIでKubernetesクラスターを管理できます。
AKSのノード取得、リソースの適用、AKS上で実行されているPodの取得などに利用しています。
[root@test-vm-01 ~]# az aks install-cli |
kubectl get nodes実行時のエラー例
作業端末でaksのリソースに対する名前解決ができない場合や、作業端末からAKSのリソースへアクセスできない場合にエラーが発生します。
名前解決できない場合には、AKSと共に作成されたプライベートDNSのゾーンが作業端末の仮想ネットワークとリンクされているかを確認します。
されていない場合はリンクさせます。
作業端末からAKSのリソースアクセスできなかった場合は、NSGの設定や仮想ネットワーク間のピアリングを確認します。
自分の場合は仮想ネットワークピアリングの設定が漏れていたために、エラーメッセージ例(2)が発生しました。
#エラーメッセージ例(1)(作業端末でaksのリソースに対する名前解決ができない場合) |
※エラーメッセージや解決方法は1つの例です。
※AKSの設定でプライベートクラスターを利用しています。
ACRのログインサーバー名を取得
ACRのログインサーバ名(リソース名.azurecr.io)を確認します。
ACRからコンテナーのイメージを取得する際に使います。
[root@test-vm-01 ~]# az acr list –resource-group rg-aks-01 –query “[].{acrLoginServer:loginServer}" –output table |
マニフェストファイルの修正
マニュフェストファイルを修正します。
コンテナーイメージ取得先をACRログインサーバー名に置き換えます。
※sedコマンドで"ghcr.io/azure-samples"を"acr01.azurecr.io(ACRログインサーバー名)"に置換しています。
[root@test-vm-01 ~]# cd aks-store-demo #マニュフェストファイルの修正箇所は3か所 #変更点を確認 |
※事前にコピーした編集前のファイル(aks-store-quickstart.yaml.bak)と、編集後のファイルを比較して変更内容を確認しています。
AKSにアプリケーションをデプロイ
kubectl applyコマンドを使用してサンプルアプリをデプロイします。
イメージファイルはACRから取得します。
[root@test-vm-01 aks-store-demo]# kubectl apply -f aks-store-quickstart.yaml |
デプロイを確認
kubectl get podsコマンドでデプロイ状況を確認します。
STATUSが"Running"となっている事が確認できます。
[root@test-vm-01 ~]# kubectl get pods |
kubectl apply実行後のエラー例
kubectl get podsで確認した時に、STATUSが"CrashLoopBackOff"になり、アプリが
自分の場合は、ARMベースの仮想マシン(スケールセット)を利用している場合に発生しました。
ノードプール作成時の仮想マシンサイズを変更、再作成してエラーを解消しました。
[root@test-vm-01 ~]# kubectl logs pod名 |
※エラーの発生事例や対応方法は1つの例です。
※作業用端末にはx86ベースの仮想マシンを利用しています。
フロントエンドIPアドレスの確認
kubectl get serviceコマンドでサービスの稼働状況を確認します。
稼働開始するとEXTERNAL-IPが表示されます。
[root@test-vm-01 ~]# kubectl get service store-front –watch |
ブラウザでアクセスして確認
確認したフロントエンドのIPアドレス(EXTERNAL-IP)にWebブラウザでアクセスします。
アクセス確認 | |
サンプルアプリの画面が表示されます。 |
Azure PortalでもPodの稼働状況やサービスの状態が確認できる
Azure PortalでもPodの稼働状況やサービスの状態が確認できます。
ワークロード、サービスの状態を確認 | |
ワークロードのメニューでPodの稼働状況が確認できます。 サービスとイングレスのメニューでサービスの状態が確認できます。 EXTERNAL-IPも確認できます。 |
|
NSGやロードバランサーの設定を確認
サンプルアプリをデプロイした後には、NSGの受信セキュリティ規則が追加されています。
またロードバランサーのフロントエンドIP構成にパブリックIPのリソースが追加されています。
このパブリックIPアドレスがEXTERNAL-IPとなります。
InternetからEXTERNAL-IPへ80番ポートのアクセスを許可する受信のセキュリティ規則が追加されています。
NSGやロードバランサーの設定確認 | |
受信セキュリティ規則が追加されています。 | |
ロードバランサーのフロントエンドIP構成にパブリックIPアドレスが追加されています。 |
リソース削除
kubectl deleteコマンドでAKS上に作成したを削除します。
実行後にNSGの受信セキュリティ規則に作成されたアクセス許可設定は削除されます。
またAKSのリソースを削除すると関連リソースも併せて削除されます。
[root@test-vm-01 ~]# kubectl delete -f aks-store-quickstart.yaml |
—広告—
最後に
チュートリアルの手順を元にAKSやACRのリソース作成からアプリのデプロイまでの手順を確認してみました。
引き続き色々試してみたいと思います。
AKSに関するAzure PowerShell、Azure CLIコマンド一覧です。
クラスターやノードプールの起動、停止、状態確認、自動スケール無効化、ノード数の変更のコマンドを紹介しています。