#はじめに
前回
ここでは、Microsoftが紹介しているチュートリアルに沿って、アプリをデプロイしてみます。
チュートリアルでは十分に説明されていない点を補足していきます。
###必須SW要件
- Azure CLI
- kubectl
- docker-compose
筆者はその1で作成したAzure VM上で実行しています。
AKSは、前回で作成し、AKSへの接続が完了しているものとします。
##全体の流れ
自作のWebアプリをAKSにデプロイする際は、以下のような流れになります。
- Dockerを使って、コンテナイメージをビルド
- コンテナイメージをACRにPush
- KubernetesのマニフェストファイルにACRにPushしたイメージを指定
- 上記のマニュアルを使って、kubectlでAKSにデプロイ
ACRは、その1でも述べましたが、コンテナイメージを保持するプライベートなレジストリとなります。逆にDocker Hubはパブリックレジストリで、指定すれば誰でもアクセスレジストリになります。
ACRを使わず、Docker Hubを使ってデプロイもできますが、ここではACRを使うことにします。
##コンテナイメージをビルドする
まずは、チュートリアルに沿って、コードを拾って、ビルドします。
##コードの取得
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
# docker-compose.yamlがあるディレクトリまで移動
cd azure-voting-app-redis
# docker-composeコマンドでビルドを実行
# -dはデーモン起動オプション、これを付けないと、コンソールが戻ってきません
docker-compose up -d
ローカルの開発用PCでビルドする際は、Docker Desktopの起動を忘れないようにしましょう。
さもなければ、以下のようなエラーが出てきます。一見、原因が分からないので、どうしたものかと考え込んでしまいます。
...
File "site-packages\docker\api\client.py", line 188, in __init__
File "site-packages\docker\api\client.py", line 213, in _retrieve_server_version
docker.errors.DockerException: Error while fetching server API version: (2, 'CreateFile', '指定されたファイルが見つかりません。')
[5240] Failed to execute script docker-compose
ビルドに成功したら、http://localhost:8080 にアクセスして、アプリが起動していることを確認しましょう。
##イメージをプッシュする
その1でACRへのログインが終了しているものとします。
ACRへDockerで作成したコンテナイメージをPushするには、作成したDockerのコンテナイメージにACRの名称付きでタグ付けして、Push先を指定する必要があります。
作成したDockerコンテナイメージを取得
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 64852c9a2e52 4 months ago 944MB
tiangolo/uwsgi-nginx-flask python3.6 a16ce562e863 5 months ago 944MB
redis latest 1319b1eaa0b7 5 months ago 104MB
- azure-vote-frontは、アプリ
- tiangolo/uwsgi-nginx-flaskは、azure-vote-frontを作成するにあたって追加したベースOS環境
- redisは、DB(SQLではない)
ACRにPushが必要なのは、アプリ部分だけなので、azure-vote-frontにタグ付けし、イメージをACRにPushします。
# その1の例では<acrLoginServer>には、myakscrabcdefg.azurecr.ioを指定します
docker tag azure-vote-front:v1 <acrLoginServer>/azure-vote-front:v1
docker push <acrLoginServer>/azure-vote-front:v1
正常にACRにPushされたかどうかを確認するには、以下のコマンドを使用します。
# <acrName>は、.azurecr.ioを省略したものになります(付けていてもwarningが出るだけで正常に出力されます)
az acr repository list --name <acrName> --output table
##AKSへデプロイする
その1でAKSは準備しているものとします。
まずは、kubernetesのマニフェストファイルを編集します。
azure-vote-all-in-one-redis.yaml ファイルを適当なテキストエディタで開きます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-front
# 以下を編集します、その1の例では、<acrName>は myakscrabcdefg
# image: microsoft/azure-vote-front:v1
image: <acrName>.azurecr.io/azure-vote-front:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
limits:
cpu: 500m
env:
- name: REDIS
value: "azure-vote-back"
以下のコマンドで、AKSにデプロイします。
kubectl apply -f azure-vote-all-in-one-redis.yaml
デプロイに成功すると、IPアドレスが払い出されて、無事にアクセスできるようになります。
以下でデプロイ状況を監視できます。
kubectl get service azure-vote-front --watch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.34.242 52.179.23.131 80:30676/TCP 67s
上記のようにIPアドレスが払い出され、アクセス可能になります。
この例では、http://52.179.23.131 にアクセスして、アプリが表示されればOKです。
(続く)