初めてのAzure Kubernetes サービス(チュートリアルをやってみた)

初めてAzure Kubernetes サービスを触ってみました。

公式サイトに初心者向けチュートリアルが用意されているのですが、その前段が記載されていないのでそのチュートリアルですらやってもエラー連発で一苦労でした。

AKSチュートリアル(公式サイト)

今回はこのチュートリアルを実行する為の環境準備から実際にチュートリアル(アプリケーションを実行する)までの手順を纏めてみました。

目次 

スポンサーリンク

Azure Portalを使ってAzure Kubernetes サービス(AKS)を作成する

チュートリアルを見ると、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を選択しているので一緒に作成される)

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インストール(公式サイト)

Azure CLIをダウンロードする為にyumリポジトリを作成します。以下のコマンドをすべてコピペします。コピーの時に"が全角になっている場合は半角に修正して下さい。

echo -e “[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo

コマンド実行後にリポジトリが作成されているかを確認します。

cat /etc/yum.repos.d/azure-cli.repo

name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

Azure CLIをインストールします。

yum -y install azure-cli

gitコマンドのインストール

サンプルアプリをgitから複製する為に、gitコマンドをインストールします。

yum -y install git

Dockerのインストール

チュートリアルでは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]
name=Docker CE Stable – $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

~以下略~

Dockerをインストールします。

yum install -y docker-ce docker-ce-cli containerd.io

Docker-Composeのインストール

チュートリアルではDocker-Composeのコマンドが出てきますのでDocker-Composeをインストールします。インストールは公式サイトを参考に行いました。

Docker Composeインストール(公式サイト)

Curlコマンドでダウンロードします。

curl -L “https://github.com/docker/compose/releases/download/1.28.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/
Creating network “azure-voting-app-redis_default" with the default driver
Pulling azure-vote-back (mcr.microsoft.com/oss/bitnami/redis:6.0.8)…
6.0.8: Pulling from oss/bitnami/redis

docker imageコマンドで確認すると、azure-vote-front v1という今回作成したイメージが出来ている事が分かります。

docker images

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/azuredocs/azure-vote-front v1 3e5752969869 7 minutes ago 944MB
tiangolo/uwsgi-nginx-flask python3.6 997d8bb5f569 5 weeks ago 944MB
mcr.microsoft.com/oss/bitnami/redis 6.0.8 3a54a920bb6c 4 months ago 103MB

docker ps コマンドでコンテナの動作状況を確認すると、azure-vote-front v1というプロセスが起動している事が分かります。

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c6c458336b6 mcr.microsoft.com/azuredocs/azure-vote-front:v1 “/entrypoint.sh /sta…" 7 minutes ago Up 7 minutes 443/tcp, 0.0.0.0:8080->80/tcp azure-vote-front
6afd5bca0cfb mcr.microsoft.com/oss/bitnami/redis:6.0.8 “/opt/bitnami/script…" 7 minutes ago Up 7 minutes 0.0.0.0:6379->6379/tcp

ブラウザで動作確認

ブラウザで”http://Docker開発環境を作ったVMのIPアドレス:8080”へアクセスするとブラウザに以下の通り表示されます。

ブラウザでアクセスできない場合はCurlコマンドでも確認出来ます。

curl http://172.16.1.66:8080

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="/static/default.css">
<title>Azure Voting App</title>
<script language="JavaScript">
function send(form){
}
</script>
</head>
<body>
<div id="container">
<form id="form" name="form" action="/"" method="post"><center>
<div id="logo">Azure Voting App</div>
<div id="space"></div>
<div id="form">
<button name="vote" value="Cats" onclick="send()" class="button button1″>Cats</button>
<button name="vote" value="Dogs" onclick="send()" class="button button2″>Dogs</button>
<button name="vote" value="reset" onclick="send()" class="button button3″>Reset</button>
<div id="space"></div>
<div id="space"></div>
<div id="results"> Cats – 0 | Dogs – 0 </div>
</form>
</div>
</div>
</body></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
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXXX to authenticate.

コンテナーレジストリへログイン

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
————————–
testaks20210130.azurecr.io

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
mcr.microsoft.com/azuredocs/azure-vote-front v1 3e5752969869 6 hours ago 944MB
testaks20210130.azurecr.io/azure-vote-front v1 3e5752969869 6 hours ago 944MB
tiangolo/uwsgi-nginx-flask python3.6 997d8bb5f569 5 weeks ago 944MB
mcr.microsoft.com/oss/bitnami/redis 6.0.8 3a54a920bb6c 4 months ago 103MB

コンテナーレジストリへイメージをプッシュ

docker pushコマンドで、コンテナーレジストリへイメージをプッシュします。

docker push testaks20210130.azurecr.io/azure-vote-front:v1

The push refers to repository [testaks20210130.azurecr.io/azure-vote-front]
6656b607cf76: Preparing

daz acr repository listコマンドで確認すると、azure-vote-frontが出来ている事が分かります。

az acr repository list -n testaks20210130 -o table

Result
—————-
azure-vote-front

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)
Merged “test-aks-20210130" as current context in /root/.kube/config

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
————————–
testaks20210130.azurecr.io

マニュフェストファイル(60行目あたり)を修正します。修正時の注意点としてはazure-vote-frontとazure-vote-backがあるので間違わない事と/azuredocs/のパスを消す事になります。

vi azure-vote-all-in-one-redis.yaml

【修正前】

containers:
– name: azure-vote-front
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1

【修正後】

containers:
– name: azure-vote-front
image: acr Login Server名(今回の場合はtestaks20210130.azurecr.io)/azure-vote-front:v1

AKSへアプリケーションを配置する

kubectl applyコマンドでAKSへアプリケーションを配置します。kubectl applyコマンドはクラスター内のリソースを作成および更新するコマンドになります。

kubectl apply -f azure-vote-all-in-one-redis.yaml

deployment.apps/azure-vote-back created
service/azure-vote-back created
deployment.apps/azure-vote-front created
service/azure-vote-front created

アプリケーションを確認する

kubectl get serviceコマンドでデプロイ状況を確認します。デプロイされるとグローバルIPが確認出来ます。

kubectl get service azure-vote-front -w

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.4.55 52.177.150.164 80:30661/TCP 15s

kubectl get podsコマンドで実行状況を確認します。StatusがRunningになっていればOKです。

kubectl get pods

NAME READY STATUS RESTARTS AGE
azure-vote-back-859c8848cb-f8cp8 1/1 Running 0 3m9s
azure-vote-front-8589d564d9-flc6p 1/1 Running 0 3m8s

kubectl get serviceコマンドで確認したグローバルIPにブラウザでアクセスすると動作確認が出来ます。

これでチュートリアルの実行が出来ている事が確認出来ました。

Azure Kubernetes Service (AKS)のチュートリアル後に出来ていたアイテムや設定

AKSのリソースグループにグローバルIPが出来ていた

MCで始まるAKSのリソースグループ内に外部からサンプルアプリケーションを実行する際に利用されるグローバルIPが作成されていました。

Azure ロードバランサーやNSGにルールが作成されている

AKSと一緒に作成されたAzure ロードバランサーに、外部からサンプルアプリケーションにアクセスする為の負荷分散規則が作成されていました。

同様にNetwork Security Groupにも受信のセキュリティ規則が作成されていました。

AKSを削除すると関連アイテムも自動的に削除される

一緒に作成された関連アイテムですが、AKSを削除すると一緒に削除されました。