「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Visual Studio]] --[[Docker for Windows]] --[[Docker Desktop for Windows]] --[[Visual Studio Tools for Docker]] --[[Azure Kubernetes Service (AKS)]] --[[ASP.NET Core]] ---[[ASP.NET Coreのデプロイ]] * 目次 [#j01d33c4] #contents *概要 [#nddd7376] -「[[Visual Studio Tools for Docker]]」の延長で、~ [[K8s>#x4a72daa]](と言いつつ、実際は[[AKS>Azure Kubernetes Service (AKS)]])にデプロイしようという野心的な物体。 -何気に名称が、Visual Studio Tools for Kubernetesに変更されている? -参考 --Visual Studio Tools for Kubernetes - Visual Studio Marketplace~ https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vs-tools-for-kubernetes **前提環境 [#t12636eb] [[コチラ>Visual Studio Tools for Docker#ke8e67e9]]との差分 -[[Visual Studio]] 2019 Community --.NET Core 3系 -[[Visual Studio]] 2022 Community --.NET 6系 --[[Docker for Windows]]が必須ではなくなった。 **インストール [#t70031ef] [[コチラ>Visual Studio Tools for Docker#b8b286e6]]との差分 -Visual Studio Kubernetes Tools --以下ではなく、~ https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vs-tools-for-kubernetes --以下からインストール(VS2019の場合) #ref(install.png,left,nowrap,インストール,60%) **紆余曲折のメモ [#yf650ab5] ***断念 [#t6534e1a] [[Open PaaS>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Open%20PaaS]]は、ちょっと難しいなぁと思い断念していた。 -[[OpenShift>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?OpenShift]] -[[Cloud Foundry>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Cloud%20Foundry]] -[[Kubernetes(K8s)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes]] ***再起 [#gb258a43] しかし、[[Compose on K8s>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Compose%20on%20Kubernetes]]がリリースされ、これによって、~ [[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]を[[Open PaaS>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Open%20PaaS]]で扱えるようになった~ らしいため、評価をリスタートしてみる気になった。 ***再び断念 [#b2ef6933] [[手順3>#vb6a5d71]]まで調査した結果、再び中断した(2019/12/04)。 -[[Azure Dev Spaces]]で実行することはできた~ (ただし、パブリック・アクセスが不可能の故、明確では無い)。 -ツールが(、まだ)、作りこまれていないっぽい。 --Kubernetes/Helmを追加しても、[[Azure Dev Spaces]]に行ってしまい、~ [[Azure Kubernetes Service (AKS)]]のlaunchSettingsなどは構成されない。 --また、[[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]で、そのまま、[[AKS>Azure Kubernetes Service (AKS)]]にデプロイできない。 ***再び再起 [#xa2c47f4] 調査した結果、再び再起した(2019/12/06)。~ ※ ただし、CLIでやっているので、Visual Studio Kubernetes Toolsはあまり関係ない。 -[[手順4>#q9416ca2]]で --ネットの上の[[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]をCLIで動かす事が出来た。 --また、[[AKS>Azure Kubernetes Service (AKS)]]で動かす事が出来た。 -[[手順5>#n9ee4347]]で --[[こちら>Visual Studio Tools for Docker#qf76ac18]]の[[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]をCLIで動かす事が出来た。 --また、[[AKS>Azure Kubernetes Service (AKS)]]で動かす事が出来た。 -[[手順6>#qb850bcb]] : 手順5の[[K8s>#x4a72daa]]マニュフェストにNginxを追加する。 ***再々の再起 [#r008f7ea] 調査した結果、再び再起した(2020/04/13)。 -[[手順7>#m6a31eb3]] : [[Docker Desktop for Windows]]に、寄り道。 -[[手順8>#q66040c9]] : [[コチラ>Visual Studio Tools for Docker#ff5fbe1b]]の仕切り直し。 -[[手順9>#dac2b9bc]] : 手順8を[[K8s>#x4a72daa]]で実施 ***将来的には... [#n3e06a9c] これらのツールが、 -Helm Charts -Compose on Kubernetes -Kompose [[辺り>#x4a72daa]]を統合するのではないだろうか? ***[[Visual Studio]] 2022 [#o90ed370] [[Visual Studio]] 2022で動作確認。 -[[手順10>#nb71a05a]] -[[手順11>#kd8a305b]] ***CaaSのトレンド変化 [#k1f61ca7] 「[[将来的には...>#n3e06a9c]]」からの変化としては、~ [[Open PaaS>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Open%20PaaS]]系のCaaSだけではなく、~ クラウド系のCaaSも歓迎されてきた。 *手順1 [#f98240e6] しかし、結局、「Visual Studio Kubernetes Tools」が何者なのか?~ イマイチ解らないので、「WebApplication1」的なモノを使用し、再び、評価してみる。 **画面の確認(手順 / 結果) [#e51fd9d0] 試してみると、以下のような画面が表示される。 -プロジェクト・テンプレートにKubernetesが追加される。 #ref(1.png,left,nowrap,手順1,60%) -ASP.NET Core 3.0 の MVCを選択する。 #ref(2.png,left,nowrap,手順2,60%) -新規作成したプロジェクトをソリューション・エクスプローラで確認すると「azds.yaml」が追加されていることが解る。 -[[Azure Dev Spaces]]のlaunchSettingsでデバッグ実行を開始すると、Azureにデプロイしようとするので、ここで止める。 #ref(5.png,left,nowrap,手順5,80%) **ココまでで解った事。 [#r2ea16b1] -Kubernetes用プロジェクト・テンプレートでは、~ 「azds.yaml」が追加され、[[Azure Dev Spaces]]のlaunchSettingsが構成されるらしい。 -参考 --Azure Container Service (AKS) vs Azure Service Fabric - Pikedev Blog~ https://pikedev.com/azure-container-service-aks-vs-azure-service-fabric/ *手順2 [#wda48e54] 取り敢えず、[[Azure Dev Spacesの手順>Azure Dev Spaces#d67caafd]]を参考にして、~ 単純な構成で[[Azure Dev Spaces]]を試してみる。 **手順 [#a0f4b2ff] ***[[Azure Dev Spaces]]の構成 [#b651eed1] -Azure ポータルから、K8sクラスタを使用して構成する。 -Dev Spaces言うだけあって、開発・デバッグ用のスペースらしい。 -K8sクラスタは構築出来ても、~ Dev Spacesを有効にできるリージョンに制限があるので注意する。 ***プロジェクトの構成 [#sbbf2a67] -Kubernetes用プロジェクト・テンプレートで「WebApplication1」的なプロジェクトを新規作成 -[[Azure Dev Spaces]]のlaunchSettingsでデバッグ実行を開始すると、 --[[前述>#e51fd9d0]]の[[Azure Dev Spaces]]のダイアログが表示される。 --AzureサブスクリプションのアカウントでVisual Studioにログインしていると、~ [[構成>#b651eed1]]した[[Azure Dev Spaces]]の情報が自動入力されるのでそのまま続行する。 **結果 [#lc7d0387] Azureのハズだが、何故か、localhostでアプリケーションが起動する。~ VS2019から?既定でパブリック・アクセスが不可能になっているらしい。 -Hyper-Vコンテナで動いているのか?[[AKS>Azure Kubernetes Service (AKS)]]上で動いているのか?区別がつかない。 -調べると、内部でstdout と stderr + port forwardしているっぽい~ (Visual Studioの認証も通しているのでセキュアなのかもしれない) -試しにHyper-VコンテナをホストしているHyper-VのVM停止させてみたが、~ それでもUNIXで動作するので、[[AKS>Azure Kubernetes Service (AKS)]]で動作&[[リモートデバッグ>WSL上での.NET Core開発#fd286380]]しているものと思われる。 **ココまでで解った事。 [#i870f346] -実際に、[[Azure Dev Spaces]]で動作させることが出来た。 -パブリック・アクセスが不可能だが、恐らく、[[AKS>Azure Kubernetes Service (AKS)]]上で動いている。 *手順3 [#vb6a5d71] 単純な構成で、[[Azure Dev Spaces]]でない [[AKS>Azure Kubernetes Service (AKS)]] で使ってみる。 **前提条件 [#bc424342] ***構成 [#ue0f9f99] -テンプレートの選択~ 標準のプロジェクト・テンプレートで「WebApplication1」的なプロジェクトを新規作成~ (Kubernetes用プロジェクト・テンプレートでは「Kubernetes/Helm」を追加できなかったタメ) -プロジェクトの構成~ [[手順2>#wda48e54]]と、同様の「WebApplication1」を使用する。 ***手順 [#t9731846] [[手順2>#wda48e54]]と同様。 **結果 [#wda12acf] 標準のプロジェクト・テンプレートで「Kubernetes/Helm」を~ 追加しても[[Azure Dev Spaces]]のlaunchSettingsになってしまう。 **ココまでで解った事。 [#d304b325] (Toolsでは、できないのか、まだ、実装されていないのか?) *手順4 [#q9416ca2] [[Azure CLI]]で、[[Azure Dev Spaces]]でない [[AKS>Azure Kubernetes Service (AKS)]] で使ってみる。 **前提条件 [#bc424342] ***構成 [#u5d27a26] -[[AKS>Azure Kubernetes Service (AKS)]]の構成~ Azureのポータルと、[[Azure CLI]]のazコマンドを使用する。 -プロジェクトの構成~ https://github.com/Azure-Samples/azure-voting-app-redis ***手順 [#j3b1eb24] [[AKSのvoting-appチュートリアル>Azure Kubernetes Service (AKS)#c7683828]]を遂行する([[Azure CLI]]を使用する)。 **ココまでで解った事。 [#d304b325] -「docker-compose up -d」で躓いていたが~ 再起動&リトライなどで動作するようになる。~ (docker自体が、そういうモノらしく、不安定であるもよう) -[[AKS>Azure Kubernetes Service (AKS)]]は以下のコマンドで操作する。 --[[Azure CLI]]のazコマンド --[[kubectl CLIコマンド>#x4a72daa]] -docker-composeで作成したイメージを --ローカルで実行・テストした後に、[[AKS>Azure Kubernetes Service (AKS)]]にイメージをプッシュして実行できる。 --ただし、[[K8s>#x4a72daa]]での実行の定義は、docker-composeではなく[[K8s>#x4a72daa]]マニュフェストに書く。 *手順5 [#n9ee4347] -手順5では、複雑な構成の [[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]] を [[AKS>Azure Kubernetes Service (AKS)]] で使ってみる。 -具体的には、[[手順4>#q9416ca2]]で、docker-composeで作成したイメージを[[AKSで動かす>Azure Kubernetes Service (AKS)#u25677fb]]。 **前提条件 [#hf85d64a] ***構成 [#idfb4642] [[こちら>Visual Studio Tools for Docker#qf76ac18]]をVS2019に.NET Core3.0アップグレード~ したものを使用する(移行後の物品は[[コチラ>#k18f6b89]])。 ***手順 [#m62b70d6] [[AKSのASP.NET Coreチュートリアル>Azure Kubernetes Service (AKS)#u25677fb]]を遂行する([[Azure CLI]]を使用する)。 **結果 [#ba1b5eb2] ***ローカル [#w42b791b] ローカルの[[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 ※ 上記の参考に習い、無事動作した。 ***リモート [#d821480b] リモートの[[AKS>Azure Kubernetes Service (AKS)]]で動かしてみる。 >kubectl get service --watch NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... **ココまでで解った事。 [#c2d7d7a8] コンテナ技術を使用すると、 -単体 → 結合 → システム・テスト(UT → CT → ST)と環境をチェーンさせて、 -シームレスにステージング環境にまで持っていくことができるようになる。 *手順6 [#qb850bcb] ※ 本手順は未実施。 **前提条件 [#k6312410] ***構成 [#ve705bf4] [[手順5>#n9ee4347]]の[[K8s>#x4a72daa]]マニュフェストにNginxを追加する。 ***手順 [#q97357c2] -[[手順5の手順>#m62b70d6]]を参考にする。 -[[K8s>#x4a72daa]]マニュフェストに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 ※ 80 と 5001 のブリッジは、~ /etc/nginx/conf.d の proxy_pass に設定される。 **結果 [#odf9e9b5] ***ローカル [#c28a242b] 未実施 ***リモート [#a2b0b8ae] 未実施 **ココまでで解った事。 [#w8dfdca3] 未実施 *手順7 [#m6a31eb3] [[Docker Desktop for Windows]]に、寄り道。 **[[K8s>Docker Desktop for Windows#ad01d6b3]] [#eee49462] これは、Docker Desktop(ローカル)のK8s **[[WSL2>Docker Desktop for Windows#mb6cff6e]] [#q9f2a2b3] Docker Desktopは、[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]]で、WSL2もサポート **[[Windows Serverコンテナ>Docker Desktop for Windows#l3cc3544]] [#mf43263c] Docker Desktopは、Docker Desktop for Windowsで、Windowsコンテナもサポート *手順8 [#q66040c9] 上記([[手順5>#n9ee4347]])のサンプルを[[MVC_Sample>#ncd2818e]]に変更。 **前提条件 [#e8b6effc] -daisukenishino2/EvaluateAspNetCoreOnK8s:~ KubernetesでASP.NET Coreを評価する。~ (Evaluate ASP.Net Core on Kubernetes.) --→ MVC_Sample~ https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s#mvc_sample **結果 [#s5c4d3b2] 上手く行かなかった。 -プログラム・サービス一式をDocker Compose化した。 - OSSコンソーシアム~ https://www.osscons.jp/jo99tfumm-537/#_537 **ココまでで解った事。 [#g4d04fca] -不安定なので、「外部サービス類」と「WebアプリとWebサーバ」のコンテナは、~ 別の docker-compose.yml にするのがベターユースなのではないか?という事。 >※ [[Docker for Windows]]が不安定という話と、~ [[Docker>コンテナ技術#w576cb19]]のportをマップする機能が若干不安定との情報がある。 -その後、networksでブリッジさせると上手く行く事が解った。 --第0.5回 セルフZoom 部会 - OSSコンソーシアム~ 2つのDocker Composeを統合・分割する。~ https://www.osscons.jp/jogfiigaw-537/ *手順9 [#dac2b9bc] 上記([[手順8>#q66040c9]])を[[ローカルのDocker Desktop for WindowsのK8s>Docker Desktop for Windows#u51cfd19]]で実行。 **[[前提条件>#eee49462]] [#gc7a8fd0] **結果 [#n8bd0557] 上手く行かなかった。 -プログラム・サービス一式をDocker Compose化した。 - OSSコンソーシアム~ https://www.osscons.jp/jo99tfumm-537/#_537 **ココまでで解った事。 [#o78464e9] -「その文字は使えない」とか「ファイルをマウントしろ」とか、~ メッセージが表示され、そのままのDocker Composeでは上手く動かない。 -なので、やれるとしても、[[Kompose>#x4a72daa]] のconvert機能を~ マイグレーション・ツールのように使用して、マニフェスト・ファイルを~ 新規作成する位しか、[[K8s>#x4a72daa]]へチェーンさせる方法は無さそう。 *手順10 [#nb71a05a] [[Visual Studio]] 2022でやってみる。 **前提条件 [#gce3b9bc] [[Docker for WindowsではなくWSL2>#t12636eb]]で実行。 -WSL2インストール済み -Docker for Windows未インストール **結果 [#rad4f04b] ***コンソールアプリ [#veffd737] -Dockerサポートを追加し、デバッグ・プロパティからWSLを選択しデバック実行。 -(初回は、.NET未インストールのエラーが表示され、自動的に.NETインストールが進む) -問題なく実行できた。ただし、結果はデバッグ出力に出力される。 ***Webアプリ [#ka815a5c] -Dockerサポートを追加し、デバッグ・プロパティからWSLを選択しデバック実行。 -(初回は、ASP.NET未インストールのエラーが表示され、自動的に.NETインストールが進む) -問題なく実行できた。ただし、結果はブラウザ経由で表示される。 **ココまでで解った事。 [#pe53dc34] -問題なく実行できた。 -ただし、[[Docker Composeには、Docker for Windowsが必要>Visual Studio Tools for Docker#z633182b]] *手順11 [#kd8a305b] [[Visual Studio]] 2022で[[Docker Compose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]を試してみる。 **前提条件 [#uc57c0a5] [[Docker for WindowsとWSL2>#t12636eb]]を併用 -WSL2インストール済み -Docker for Windows再インストール~ ただし、[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]]を有効化しない。 ※ ただし、[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]]を有効化しない。 **結果 [#ob8fa01c] ***コンソールアプリ [#o06efbc2] -問題なく実行できた。 -ただし、同様に、結果はデバッグ出力に出力される。 ***Webアプリ [#uc418f63] -問題なく実行できた。 -ただし、ポートの指定をどうやっているかが不明だった。 **ココまでで解った事。 [#pe55b9a2] -問題なく実行できた。 -これで1環境で双方の手順作成を確認可能。 *サンプル [#e04f0515] **github.com [#nf8398ed] ***WebApplication1 [#k18f6b89] https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s/tree/master/WebApplication1 ***WebApplication2 [#k803576c] https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s/tree/master/WebApplication2 ***MVC_Sample [#ncd2818e] https://github.com/daisukenishino2/EvaluateAspNetCoreOnK8s/tree/master/MVC_Sample **[[git clone後にDocker Composeで動かす方法。>Visual Studio Tools for Docker#e09b7e2d]] [#rce35c03] *参考 [#h1f0a60f] -Visual StudioがKubernetes対応。~ DockerfileとHelmチャートを自動生成し、~ Kubernetes環境へデプロイ可能に - Publickey~ https://www.publickey1.jp/blog/18/visual_studiokubernetesdockerfilehelmkubernetes.html **Qiita [#k3f64696] ***[[ASK を使いこなす>Azure Kubernetes Service (AKS)#g22fa8b4]] [#z4762996] ***Kubernetes on [[Docker for Windows]] [#rb9ca770] -Docker for WindowsでKubernetesを試してみる~ https://qiita.com/h-r-k-matsumoto/items/68f694650029ddf7351d --h-r-k-matsumoto/spring-boot-sample: spring boot + jib + kubernetes作成サンプル~ https://github.com/h-r-k-matsumoto/spring-boot-sample -[Docker for Windows]Kubernetesを動かしてみる~ https://qiita.com/icck/items/91eac9da094666e47c62 **Microsoft Docs [#pc82ab14] ***Kubernetes [#d2588c77] -Kubernetes ツールのチュートリアル - Visual Studio~ https://docs.microsoft.com/ja-jp/visualstudio/containers/tutorial-kubernetes-tools ***[[Azure Dev Spaces>Azure Dev Spaces#d67caafd]] [#df3713b0] **OSSコンソーシアム [#w809fb59] ***Blog [#n95d96ef] -Docker for Windows上で Docker Composeでテストし、Open PaaSにデプロイできる。~ --その1~ https://www.osscons.jp/joweexgq6-537/ --その2~ https://www.osscons.jp/jo6610sfd-537/ ***Wiki [#x4a72daa] -マイクロソフト系技術情報 Wiki(当該Wiki) --[[Visual Studio Tools for Docker]] --[[Azure Kubernetes Service (AKS)]] -開発基盤部会 Wiki --[[Kubernetes>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kubernetes]] (K8s) ---[[Helm Charts>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Helm%20Charts]] ---[[Compose on Kubernetes>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Compose%20on%20Kubernetes]] ---[[Kompose>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kompose]] ---- Tags: [[:コンテナ]], [[:.NET開発]], [[:.NET Core]], [[:Hyper-V]], [[:仮想化]], [[:IaC]]