2
0

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 5 years have passed since last update.

マイクロサービス開発ツールのTyeのサンプルアプリケーションをAzure Kubernetes Serviceにデプロイする

2
Last updated at Posted at 2020-08-28
Page 1 of 17

先日、C#のマイクロサービス開発ツール "Project Tye" を試す記事を書きました。


先日の記事ではこのような構成のサンプルアプリケーションを作りました。

  • フロントエンドアプリケーション (ASP.NET Core Razor Pages)
  • バックエンドアプリケーション (ASP.NET Core Web API + Redis)
  • Tyeの構成ファイル (tye.yaml)


今回は本家のブログに沿って、サンプルアプリケーションをKubernetesにデプロイしてみます。


Azure Kubernetes Serviceを用意する

まずKubernetesを用意します。今回は手っ取り早く、Azure Kubernetes Service (AKS)を使います。
AKSリソースの作り方はドキュメントを参照してください。

https://docs.microsoft.com/ja-jp/azure/aks/kubernetes-walkthrough-portal


Kubernetesのバージョンは 1.16.10 で検証しています。
20200816012926.png


デプロイ環境を構築する

これらのツールをインストールします。私はWSL2のUbuntu 20.04で試しています。


Azure CLI

kubectl


AKSに接続する

Azure CLIを使って、AKSへの接続情報を取得します。

$ az aks get-credentials --resource-group rg-project-tye --name aks-project-tye
Merged "aks-project-tye" as current context in /home/yuta/.kube/config

AKSにRedisをデプロイする

サンプルアプリケーションで使用するRedisをAKSにデプロイします。
ブログ通り、あらかじめ用意されたYAMLファイルを利用します。

$ kubectl apply -f https://raw.githubusercontent.com/dotnet/tye/master/docs/tutorials/hello-tye/redis.yaml
deployment.apps/redis created
service/redis created

デプロイされたことも確認しておきましょう。

$ kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
redis-58897bf8c-mrh9g   1/1     Running   0          5m2s

AKSにサンプルアプリケーションをデプロイする

Tyeのデプロイコマンドを使って、サンプルアプリケーションをAKSにデプロイします。
このときのtye.yamlはこのようになっています。(前回の記事と同じ)

# tye application configuration file
# read all about it at https://github.com/dotnet/tye
#
# when you've given us a try, we'd love to know what you think:
#    https://aka.ms/AA7q20u
#
name: microservice
services:
- name: backend
  project: backend\backend.csproj
- name: frontend
  project: frontend\frontend.csproj
- name: redis
  image: redis
  bindings:
  - port: 6379
    connectionString: "${host}:${port}"
- name: redis-cli
  image: redis
  args: "redis-cli -h redis MONITOR"

デプロイする際、サービスとなる各アプリケーションのコンテナーイメージが作成されます。
そのため、コンテナーイメージをホストするコンテナーレジストリーを指定する必要があります。

今回は自分のDockerhubアカウントを使用しました。


また、Redisの接続文字列を聞かれるので redis:6379 と入力します。

$ tye deploy --interactive
Loading Application Details...
Verifying kubectl installation...
Verifying kubectl connection to cluster...
Enter the Container Registry (ex: 'example.azurecr.io' for Azure or 'example' for dockerhub): tsubakimoto
Processing Service 'backend'...
    Applying container defaults...
    Compiling Services...
    Publishing Project...
    Building Docker Image...
        Created Docker Image: 'tsubakimoto/backend:1.0.0'
    Pushing Docker Image...
        Pushed docker image: 'tsubakimoto/backend:1.0.0'
    Validating Secrets...
        Enter the connection string to use for service 'redis': redis:6379
        Created secret 'binding-production-redis-secret'.
    Generating Manifests...
Processing Service 'frontend'...
    Applying container defaults...
    Compiling Services...
    Publishing Project...
    Building Docker Image...
        Created Docker Image: 'tsubakimoto/frontend:1.0.0'
    Pushing Docker Image...
        Pushed docker image: 'tsubakimoto/frontend:1.0.0'
    Validating Secrets...
    Generating Manifests...
Processing Service 'redis'...
    Applying container defaults...
        Service 'redis' does not have a project associated. Skipping.
    Compiling Services...
    Publishing Project...
        Service 'redis' does not have a project associated. Skipping.
    Building Docker Image...
        Service 'redis' does not have a project associated. Skipping.
    Pushing Docker Image...
        Service 'redis' does not have a project associated. Skipping.
    Validating Secrets...
    Generating Manifests...
        Service 'redis' does not have a container. Skipping.
Processing Service 'redis-cli'...
    Applying container defaults...
        Service 'redis-cli' does not have a project associated. Skipping.
    Compiling Services...
    Publishing Project...
        Service 'redis-cli' does not have a project associated. Skipping.
    Building Docker Image...
        Service 'redis-cli' does not have a project associated. Skipping.
    Pushing Docker Image...
        Service 'redis-cli' does not have a project associated. Skipping.
    Validating Secrets...
    Generating Manifests...
        Service 'redis-cli' does not have a container. Skipping.
Deploying Application Manifests...

        Verifying kubectl installation...
        Verifying kubectl connection to cluster...
        Writing output to '/tmp/tmph3XlUg.tmp'.
        Deployed application 'microservice'.
Time Elapsed: 00:00:59:77

デプロイが行われ、フロントエンド、バックエンド、RedisのPodが作成されたことを確認します。

$ kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
backend-5d7b894dcf-2zjkd    1/1     Running   0          5m24s
frontend-84698d8fcf-xjglj   1/1     Running   0          5m24s
redis-58897bf8c-mrh9g       1/1     Running   0          42m

デプロイされたアプリケーションを確認する

AKSの80番ポートにポートフォワーディングし、ブラウザで http://localhost:5000 にてアプリケーションが動作していることを確認します。

$ kubectl port-forward svc/frontend 5000:80
Forwarding from 127.0.0.1:5000 -> 80
Forwarding from [::1]:5000 -> 80

20200816013057.png


AKSにデプロイしたアプリケーションを削除する

AKSにサンプルアプリケーションがデプロイされ、動作を確認することができたので、一旦Tyeの undeploy コマンドでAKSからアプリケーションを削除します。

$ tye undeploy
Loading Application Details...
Found 7 resource(s).
Deleting 'Service' 'backend' ...
Deleting 'Service' 'frontend' ...
Deleting 'Service' 'redis' ...
Deleting 'Deployment' 'backend' ...
Deleting 'Deployment' 'frontend' ...
Deleting 'Deployment' 'redis' ...
Deleting 'Secret' 'binding-production-redis-secret' ...
Time Elapsed: 00:00:06:51
$ kubectl get pods
No resources found in default namespace.

まとめ

すべてコマンドラインでサンプルのマイクロサービスアプリケーションをKubernetesにデプロイすることができました。

実際のAKSへのデプロイはCI/CD環境を用意して行うことが多いと思いますが、開発環境の段階で動作確認するタイミングでは、Tyeを使うこともアリかなと思いました。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?