マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • 何気に名称が、Visual Studio Tools for Kubernetesに変更されている?

紆余曲折

断念

Open PaaSは、ちょっと難しいなぁと思い断念していた。

再起

しかし、Compose on K8sがリリースされ、これによって、
Docker ComposeをOpen PaaSで扱えるようになったらしいため評価をリスタートしてみる気になった。

再び断念

手順3まで調査した結果、再び中断した(2019/12/04)。

  • Azure Dev Spacesで実行することはできた
    (ただし、パブリック・アクセスが不可能の故、明確では無い)。
  • ツールが(、まだ)、作りこまれていないっぽい。

再び再起

調査した結果、再び再起した(2019/12/06)。

※ ただし、CLIでやっているので、Visual Studio Kubernetes Toolsはあまり関係ない。

前提環境

コチラとの差分

  • .NET Core 3.0
  • VS 2019 Community

インストール

コチラとの差分

  • Visual Studio Kubernetes Tools
  • 以下からインストール(VS2019の場合)
    インストール

手順1

しかし、結局、「Visual Studio Kubernetes Tools」が何者なのか?
イマイチ解らないので、「WebApplication1」的なモノを使用し、再び、評価してみる。

画面の確認

試してみると、以下のような画面が表示される。

  • プロジェクト・テンプレートにKubernetesが追加される。
    手順1
  • ASP.NET Core 3.0 の MVCを選択する。
    手順2
  • 新規作成したプロジェクトをソリューション・エクスプローラで確認すると「azds.yaml」が追加されていることが解る。
  • Azure Dev SpacesのlaunchSettingsでデバッグ実行を開始すると、Azureにデプロイしようとするので、ここで止める。
    手順5

ココまでで解った事。

  • Kubernetes用プロジェクト・テンプレートでは、
    「azds.yaml」が追加され、Azure Dev SpacesのlaunchSettingsが構成されるらしい。

手順2

取り敢えず、Azure Dev Spacesの手順を参考にして単純な構成でAzure Dev Spacesを試してみる。

手順

Azure Dev Spacesの構成

  • Azure ポータルから、K8sクラスタを使用して構成する。
  • Dev Spaces言うだけあって、開発・デバッグ用のスペースらしい。
  • K8sクラスタは構築出来ても、
    Dev Spacesを有効にできるリージョンに制限があるので注意する。

プロジェクトの構成

  • Kubernetes用プロジェクト・テンプレートで「WebApplication1」的なプロジェクトを新規作成
  • Azure Dev SpacesのlaunchSettingsでデバッグ実行を開始すると、
  • 前述のAzure Dev Spacesのダイアログが表示される。
  • AzureサブスクリプションのアカウントでVisual Studioにログインしていると、
    構成したAzure Dev Spacesの情報が自動入力されるのでそのまま続行する。
  • Azureのハズだが、何故か、localhostでアプリケーションが起動する。
    VS2019から?既定でパブリック・アクセスが不可能になっているらしい。
  • Hyper-Vコンテナで動いているのか?AKS上で動いているのか?区別がつかない。
  • 調べると、内部でstdout と stderr + port forwardしているっぽい
    (Visual Studioの認証も通しているのでセキュアなのかもしれない)
  • 試しにHyper-VコンテナをホストしているHyper-VのVM停止させてみたが、
    それでもUNIXで動作するので、AKSで動作&リモートデバッグしているものと思われる。

ココまでで解った事。

  • 実際に、Azure Dev Spacesで動作させることが出来た。
  • パブリック・アクセスが不可能だが、恐らく、AKS上で動いている。

手順3

単純な構成で、Azure Dev Spaces でない AKS で使ってみる。

前提条件

テンプレートの選択

標準のプロジェクト・テンプレートで「WebApplication1」的なプロジェクトを新規作成
(Kubernetes用プロジェクト・テンプレートでは「Kubernetes/Helm」を追加できなかったタメ)

プロジェクトの構成

手順2と、同様の「WebApplication1」を使用する。

手順

手順2と同様。

ココまでで解った事。

標準のプロジェクト・テンプレートで「Kubernetes/Helm」を追加しても
Azure Dev SpacesのlaunchSettingsになってしまう(Toolsでは、できないっぽい)。

手順4

Azure CLIで、Azure Dev Spaces でない AKS で使ってみる。

前提条件

構成

  • AKSの構成
    Azureのポータルと、Azure CLIのazコマンドを使用する。

手順

AKSのvoting-appチュートリアルを遂行する(Azure CLIを使用する)。

ココまでで解った事。

  • 「docker-compose up -d」で躓いていたが
    再起動&リトライなどで動作するようになる。
    (docker自体が、そういうモノらしく、不安定であるもよう)
  • docker-composeで作成したイメージを
    • ローカルで実行・テストした後に、AKSにイメージをプッシュして実行できる。
    • ただし、K8sでの実行の定義は、docker-composeではなくK8sマニュフェストに書く。

手順5

  • 手順4で、docker-composeで作成したイメージをAKSで動かすことが出来た。
  • 手順5では、複雑な構成の Docker ComposeAKS で使ってみる。

前提条件

構成

こちらをVS2019に.NET Core3.0アップグレード
したものを使用する(移行後の物品はコチラ)。

手順

AKSのASP.NET Coreチュートリアルを遂行する(Azure CLIを使用する)。

結果

ローカル

ローカルのDocker for Windowsで動かしてみる。

  • 起動
    >C:\Git\EvaluateAspNetCoreOnK8s\WebApplication1>docker-compose up -d 
    >Starting webapplication1_postgres_1 ... done
    >Starting webapplication1_redis_1    ... done
    >Creating webapplication1_webapplication1_1 ... done
  • アクセス
    http://localhost:5000/
  • 停止
    >C:\Git\EvaluateAspNetCoreOnK8s\WebApplication1>docker-compose down
    >Stopping webapplication1_webapplication1_1 ... done
    >Stopping webapplication1_postgres_1        ... done
    >Stopping webapplication1_redis_1           ... done
    >Removing webapplication1_webapplication1_1 ... done
    >Removing webapplication1_postgres_1        ... done
    >Removing webapplication1_redis_1           ... done
    >Removing network webapplication1_default

※ 上記の参考に習い、無事動作した。

リモート

リモートのAKSで動かしてみる。

>kubectl get service --watch
NAME              TYPE          CLUSTER-IP    EXTERNAL-IP    PORT(S)         AGE
...

ココまでで解った事。

コンテナ技術を使用すると、

  • 単体 → 結合 → システム・テスト(UT → CT → ST)と環境をチェーンさせて、
  • シームレスにステージング環境にまで持っていくことができるようになる。

手順6

前提条件

構成

手順5K8sマニュフェストにNginxを追加する。

手順

  • K8sマニュフェストにNginxを追加する。
  • Nginx
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: proxy
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: proxy
      template:
        metadata:
          labels:
            app: proxy
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80
            volumeMounts: 
            - name: proxy
              mountPath: /etc/nginx/conf.d
          volumes: 
          - name: proxy
            configMap: 
              name: proxy
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: proxy
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: proxy
  • WebApplication1
  • kind: Deployment
    ...
    spec:
    ...
      template:
      spec:
        containers:
          ports:
          - containerPort: 5001
  • kind: Service
    ...
    ports:
    - port: 5001

結果

ローカル

リモート

ココまでで解った事。

手順7

上記(手順6)のサンプルをMVC_Sampleに変更。

前提条件

構成

MVC_Sampleを使用する。

手順

  • webapplication1 → mvc_sampleに変更する。

結果

ローカル

リモート

ココまでで解った事。

手順7

上記(手順5)をローカルのDocker for WindowsのK8sで実行。

K8sの有効化

コチラとの差分

K8sの有効化

経過

割愛(コチラを参照)

サンプル

github.com

WebApplication1

https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s/tree/master/WebApplication1

MVC_Sample

https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s/tree/master/MVC_Sample

git clone後にDocker Composeで動かす方法。

参考

Qiita

ASK を使いこなす

Kubernetes on Docker for Windows

Microsoft Docs

Kubernetes

Azure Dev Spaces

OSSコンソーシアム

Blog

Wiki


Tags: :.NET開発, :.NET Core, :Hyper-V, :仮想化


添付ファイル: file5.png 19件 [詳細] file2.png 40件 [詳細] file1.png 30件 [詳細] fileenable.png 28件 [詳細] fileinstall.png 31件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-12-26 (木) 22:02:45 (100d)