0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AKSにチュートリアル通りにデプロイしてみる~初心者がKubernetesでアプリをデプロイするまで3~

Posted at

#はじめに
前回
ここでは、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 ファイルを適当なテキストエディタで開きます。

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です。

(続く)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?