初めてAKS(Azure Kubernetes サービス)を触ってみた
初めてAKS(Azure Kubernetes サービス)を触ってみました。
公式サイトに初心者向けチュートリアルが用意されているのですが、その前段が記載されていないのでそのチュートリアルですらやってもエラー連発で一苦労でした。
今回はこのチュートリアルを実行する為の環境準備から実際にチュートリアル(アプリケーションを実行する)までの手順を纏めてみました。
- 1. Azure Portalを使ってAKS(Azure Kubernetes サービス)を作成する
- 2. Azure Portalを使ってコンテナーレジストリを作成する
- 3. チュートリアルに必要なAzure CLIコマンドやDocker開発環境を準備する
- 4. Azure Kubernetes Service (AKS)のチュートリアルをやってみる
- 5. Azure Kubernetes Service (AKS)のチュートリアル後に出来ていたアイテムや設定
Azure Portalを使ってAKS(Azure Kubernetes サービス)を作成する
チュートリアルを見ると、Azure CLIを使ってKubernetesクラスターを作成しています。Azure CLIを使って作った時に何が出来てるのか分からなくて困ったので、今回はAzure Portalを使ってやってみました。
Azure Portalを使ってAKSを作成
Azure PortalでKubernetesサービスのメニューを開きます。追加にあるKubernetesクラスターの追加を選択します。
Kubernetesクラスターの作成画面が表示されます。
今回はKubernetesクラスター名をtest-aks-20210130として作成します。
試験環境という事で最小構成にしています。可用性ゾーンを1、ノードサイズをStandard B2S、ノード数を1としました。
ノードプールの設定は変更せず、そのまま認証に進みます。
認証の設定ですが変更せずにそのままネットワークに進みます。
ネットワークの設定も変更せずにそのまま次に進みます。
統合の設定ですが、今回はチュートリアルを実行するだけなのでコンテナの監視を無効にします。タグを設定しない場合はそのまま確認および作成を選択します。
確認画面が表示されるので内容確認して作成をクリックします。これでAzure Kubernetesクラスター(AKS)の作成は完了です。
AKS作成後に出来ているものを確認してみる
Azure Kubernetesクラスター自体は作成時に指定したリソースグループに出来るのですが、それ以外の関連する機能は一緒に作成されるリソースグループ内に作成されます。
-
-
- リソースグループ名
- MC_”AKSを作ったリソースグループ名”_”AKS名”_”AKSを作成したリージョン名”
- リソースグループ名
-
このリソースグループを開くと以下のものが一緒に作成されている事が分かります。
-
-
- AKSと一緒に作成されるもの
- Azure ロードバランサー
- 仮想ネットーワーク
- ネットワークセキュリティグループ
- 仮想マシンスケールセット
- マネージドID(今回はマネージドIDを選択しているので一緒に作成される)
- AKSと一緒に作成されるもの
-
Azure Portalを使ってコンテナーレジストリを作成する
チュートリアルではKubernetesクラスター以外にもコンテナーレジストリをAzure CLIを使って作成しています。同様にAzure Portalを使ってやってみました。
コンテナーレジストリーのメニューで新規を選択します。
コンテナーレジストリの作成画面が表示されます。今回はレジストリ名をtestaks20210130として作成します。今回はチュートリアルだけなのでSKUはBasicを選択します。
ネットワークの設定はそのままで暗号化へ進みます。
暗号化の設定もそのままで確認および作成に進みます。
確認画面が 表示されますので、内容を確認して問題が無ければ作成に進みます。これでコンテナーレジストリの作成は終了です。
チュートリアルに必要なAzure CLIコマンドやDocker開発環境を準備する
チュートリアルを実行する為にはDockerの開発環境やAzure CLIコマンド等が必要になりますのでその準備をします。
事前にCent OS 7のAzure VMを用意する
今回はCent OS 7の環境上に作成します。これは色々やってみたのですが、結果これが一番楽だったという事でCent OS上に作成しました。Cent OS 7のAzure VMは作成済みの前提で進めます。rootユーザーで実行する前提で進めています。自身の環境でのアカウントに合わせて適時sudoを利用して実行して下さい。
Azure CLIのインストール
Azureの実行環境を作る為に、Azure CLIをインストールします。公式サイトを参考に実施します。
Azure CLIをダウンロードする為にyumリポジトリを作成します。以下のコマンドをすべてコピペします。コピーの時に"が全角になっている場合は半角に修正して下さい。
echo -e “[azure-cli] |
コマンド実行後にリポジトリが作成されているかを確認します。
cat /etc/yum.repos.d/azure-cli.repo name=Azure CLI |
Azure CLIをインストールします。
yum -y install azure-cli |
gitコマンドのインストール
サンプルアプリをgitから複製する為に、gitコマンドをインストールします。
yum -y install git |
Dockerのインストール
チュートリアルではDocker関連のコマンドが出てきますのでDockerをインストールします。インストールは公式サイトを参考に行いました。
yum-utilsをインストールします。
yum -y install yum-utils |
Dockerのリポジトリを追加します。
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo |
コマンド実行後にリポジトリが作成されているかを確認します。
cat /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] ~以下略~ |
Dockerをインストールします。
yum install -y docker-ce docker-ce-cli containerd.io |
Docker-Composeのインストール
チュートリアルではDocker-Composeのコマンドが出てきますのでDocker-Composeをインストールします。
最新バージョンを確認しインストールします。
Curlコマンドでダウンロードします。
curl -L “https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
chmodコマンドで権限付与を行います。
chmod +x /usr/local/bin/docker-compose |
最後に、lnコマンドでシンボリックリンクを作成します。
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose |
aksコマンドのインストール
aksコマンドのインストールはチュートリアルの途中で出てきます。今回は整理もかねて必要なものはすべて最初にインストールしています。
azコマンドでaksコマンドのインストールを行います。
az aks install-cli |
これでチュートリアルを実施する為の事前準備は完了です。
Azure Kubernetes Service (AKS)のチュートリアルをやってみる
アプリケーションの準備のページからやってみる
Azure Kubernetes Service (AKS) のチュートリアルをやってみます。最初のアプリケーションの準備ではローカル(環境を作ったCent OS)のDocker環境でコンテナーイメージの作成をしています。
チュートリアル: Azure Kubernetes Service (AKS) 用のアプリケーションの準備
Dockerをスタートする
チュートリアルを実施する為にはDockerが起動している必要があります。公式サイトの手順にはありませんが最初にローカル環境(Cent OS)のDockerをスタートします。
systemctl start docker |
サンプルアプリケーションを実行する
ここからはチュートリアル通りに沿ってやっていきます。
gitコマンドでアプリケーションをダウンロード
gitコマンドを使ってサンプルアプリケーションをダウンロードします。
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git |
docker-compose up -dコマンドでローカル環境にイメージの作成、コンテナの作成
ダウンロードした、ディレクトリへ移動します。
cd azure-voting-app-redis |
docker-compose up -dコマンドでローカル環境にイメージの作成、コンテナの作成を行います。
docker-compose up -d Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/ |
docker imageコマンドで確認すると、azure-vote-front v1という今回作成したイメージが出来ている事が分かります。
docker images docker images |
docker ps コマンドでコンテナの動作状況を確認すると、azure-vote-front v1というプロセスが起動している事が分かります。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
ブラウザで動作確認
ブラウザで”http://Docker開発環境を作ったVMのIPアドレス:8080”へアクセスするとブラウザに以下の通り表示されます。
ブラウザでアクセスできない場合はCurlコマンドでも確認出来ます。
curl http://172.16.1.66:8080 <!DOCTYPE html> |
docker-compose down コマンドでコンテナー インスタンスとリソースを停止
最後にdocker-compose down コマンドを使用して、コンテナー インスタンスとリソースを停止して削除します。
docker-compose down |
ここまでが出来てないと、アプリケーションの実行までたどりつけないので失敗している場合は確認します。
Azure Container Registry をデプロイして使用するをやってみる
事前にコンテナを作成しているのでコンテナー レジストリへのログインから手順は実施します。
チュートリアル: Azure Container Registry をデプロイして使用する(コンテナー レジストリにログインする)
チュートリアルの手順に沿って実施していきます。systemctl status dockerでdockerが起動している事を確認してから作業して下さい。
az loginコマンドでAzureへログイン
az loginコマンドでAzureへログインします。ブラウザでhttps://microsoft.com/deviceloginへアクセスし、codeに表示されている値を入力します。
az login |
コンテナーレジストリへログイン
az acr loginコマンドでコンテナーレジストリへログインします。ログインに成功するとLogin Succeedと表示されます。
az acr login -n acr名(今回の場合はtestaks2021030) Login Succeed |
dockerイメージにタグを付与
az acr listコマンドでコンテナーレジストリのServer名を確認します。コピペするとqueryの前の–(2個)が-(1個)になってエラーになったりするのでその場合は修正下さい。
az acr list -g リソースグループ名 –query “[].{acrLoginServer:loginServer}" -o table AcrLoginServer |
docker tagコマンドでイメージにタグを付与します。AcrLoginServer名にはaz acr listで確認したAcrLoginServerを設定します。
docker tag mcr.microsoft.com/azuredocs/azure-vote-front:v1 AcrLoginServer名(今回の場合はtestaks20210130.azurecr.io)/azure-vote-front:v1 |
docker imageコマンドで確認すると、testaks20210130.azurecr.io/azure-vote-frontという付与したタグが設定出来ている事が分かります。IDが3e5752969869とmcr.microsoft.com/azuredocs/azure-vote-front v1であることが分かります。
docker images REPOSITORY TAG IMAGE ID CREATED SIZE |
コンテナーレジストリへイメージをプッシュ
docker pushコマンドで、コンテナーレジストリへイメージをプッシュします。
docker push testaks20210130.azurecr.io/azure-vote-front:v1 The push refers to repository [testaks20210130.azurecr.io/azure-vote-front] |
daz acr repository listコマンドで確認すると、azure-vote-frontが出来ている事が分かります。
az acr repository list -n testaks20210130 -o table Result |
Azure Portalで見てみると、コンテナーレジストリのリポジトリに表示されている事が確認出来ます。
Azure Kubernetes Service (AKS) クラスターのデプロイをやってみる
事前にKubernetes クラスターの作成、aks cliのインストールに済ませているので、kubectl を使用したクラスターへの接続から手順は実施します。
チュートリアル:Azure Kubernetes Service (AKS) クラスターのデプロイ(kubectl を使用したクラスターへの接続)
チュートリアルの手順に沿ってやっていきます。
kubectl を使用したクラスターへの接続
az aks get-credentialsコマンドでAKSクラスターへ接続します。
az aks get-credentials –g リソースグループ名 -n AKS名(今回の場合はtest-aks-20210130) |
2 つの Azure サービス間の認証を構成する
Azure PortalでAzure Kubernetes ServiceとAzure Container Registry構成した場合、2つのサービス間で認証が通ってません。手順にはありませんが追加で構成します。
Azure Kubernetes Service から Azure Container Registry の認証を受ける
既存の AKS クラスターに対してACR 統合を構成します。az aks updateコマンドを利用します。完了するとメッセージが表示されます。attach-acrの前の-が2つである点は注意願います。
az aks update -n AKS名(今回の場合はtest-aks-20210130) -g リソースグループ名 –attach-acr コンテナーレジストリ名(今回の場合はtestaks20210130) |
※公式サイトの手順ではAzure CLIでAKSを作成するときにアタッチしているので本手順は必要ありません。またAKS作成時に統合という項目があります。ここでコンテナーレジストリを指定しておけばこの手順は必要ありません。
アプリケーションの実行をやってみる
チュートリアルにあるアプリケーションの実行をやってみます。
チュートリアル: Azure Kubernetes Service (AKS) でのアプリケーションの実行
チュートリアルの手順に沿ってやっていきます。
マニフェスト ファイルを更新
az acr listコマンドでコンテナーレジストリのServer名を確認します。コピペするとqueryの前の–(2個)が-(1個)になってエラーになったりするのでその場合は修正下さい。
az acr list -g リソースグループ名 –query “[].{acrLoginServer:loginServer}" -o table AcrLoginServer |
マニュフェストファイル(60行目あたり)を修正します。修正時の注意点としてはazure-vote-frontとazure-vote-backがあるので間違わない事と/azuredocs/のパスを消す事になります。
vi azure-vote-all-in-one-redis.yaml 【修正前】 containers: 【修正後】 containers: |
AKSへアプリケーションを配置する
kubectl applyコマンドでAKSへアプリケーションを配置します。kubectl applyコマンドはクラスター内のリソースを作成および更新するコマンドになります。
kubectl apply -f azure-vote-all-in-one-redis.yaml deployment.apps/azure-vote-back created |
アプリケーションを確認する
kubectl get serviceコマンドでデプロイ状況を確認します。デプロイされるとグローバルIPが確認出来ます。
kubectl get service azure-vote-front -w NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
kubectl get podsコマンドで実行状況を確認します。StatusがRunningになっていればOKです。
kubectl get pods NAME READY STATUS RESTARTS AGE |
kubectl get serviceコマンドで確認したグローバルIPにブラウザでアクセスすると動作確認が出来ます。
これでチュートリアルの実行が出来ている事が確認出来ました。
Azure Kubernetes Service (AKS)のチュートリアル後に出来ていたアイテムや設定
AKSのリソースグループにグローバルIPが出来ていた
MCで始まるAKSのリソースグループ内に外部からサンプルアプリケーションを実行する際に利用されるグローバルIPが作成されていました。
Azure ロードバランサーやNSGにルールが作成されている
AKSと一緒に作成されたAzure ロードバランサーに、外部からサンプルアプリケーションにアクセスする為の負荷分散規則が作成されていました。
同様にNetwork Security Groupにも受信のセキュリティ規則が作成されていました。
AKSを削除すると関連アイテムも自動的に削除される
一緒に作成された関連アイテムですが、AKSを削除すると一緒に削除されました。