首页 > 解决方案 > 如何将 Visual Studio 2019 解决方案部署到 Azure AKS

问题描述

我开发了一个基于 DDD 的建模工具,该工具将 .Net Core 3.x Web API 服务代码生成为单个 VS 2019 解决方案中的单独项目。我的建模工具允许我快速捕获业务领域,并从那里生成满足每个业务领域所需的尽可能多的领域服务。

我创建了一个测试域,它创建了三个我一直在 Docker for Windows 中部署和调试的 .Net Core Web API 服务(微服务),效果很好。为此,我在生成的 VS 2019 解决方案文件夹中添加了一个 docker-compose 文件,因此我可以通过选择 Docker Compose 调试选项来运行和调试所有服务。奇迹般有效!

现在,我想将我的整个解决方案作为一个整体部署到 Azure AKS 中。我创建了一个 AKS 实例并启用了 Azure Dev Spaces。

在 VS 2019 中,我为每个 Web API 项目添加了对 Kubernetes 的容器支持,这在每个 Web API 项目文件夹中创建了一个图表文件夹。注意:我没有编辑图表文件夹中的任何文件。

我为我的第一个 API 服务创建了一个 azure 开发空间,然后运行 ​​AZDS Prep,然后运行 ​​AZDS UP,它运行了所有 29 个步骤,并成功构建了容器映像,然后是消息 Waiting for container ...
然后是 Service 'api' 端口 80 (http) 可通过http://localhost:58512的端口转发获得。
按 Ctrl+C 分离

当我的服务尝试连接到 EventStore 时出现未处理的异常。这非常有意义,因为我没有将 EventStore 添加到我的 AKS 集群中。

因此,似乎我必须在每个 API 服务上运行此 AZDS Prep 及更高版本,这似乎是一项任务密集型的任务,因为一次执行此步骤一项服务可能适用于这个简单的示例,但当我有更多网络时就不实用了api 项目(微服务)。

我觉得我应该利用 Azure Dev Ops CI/CD 来处理每个微服务的所有这些,但我找不到任何教程来展示如何从 VS2019 解决方案的角度进行设置。

我发现的所有示例似乎都基于部署到 AKS 的单个 Web 或 Web API 项目,而不是基于具有多个 Web API 项目并且依赖于 3rd 方图像/容器的解决方案。

我想要一个教程,向我展示如何将我的整个 Repo 的服务价值包括任何依赖项(例如我的 EventStore)部署到 AKS 中,这不需要我成为 Helm 专家,也许是一些可以利用 docker compose 的工具文件。

如果您知道一些可以向我展示如何设置的教程,请告诉我。

标签: azure-devopscontinuous-integrationasp.net-core-webapiazure-aksvisual-studio-2019

解决方案


您不需要一次将所有内容都部署到集群中。使用 DevSpaces,根空间将包含所有微服务的稳定版本。当您想要处理给定的服务时,您可以将本地开发环境附加到子空间。

自动发布到根开发空间看起来像这样:

  1. 设置 Azure DevOps 管道,该管道将构建解决方案中的所有项目并将其推送到 Azure 容器注册表。您将需要多个buildAndPush任务,一个用于您的解决方案生成的每个容器。为您的容器映像提供唯一标签(我喜欢将构建 ID 与提交哈希连接)。
  2. 使用kompose 将您的 docker-compose.yml 转换为 kubernetes 资源定义 yaml 文件。您可能需要微调输出,为图像标签添加一些模板等。将输出添加到您的存储库中。
  3. 扩展步骤 1 中的 AzDO 管道,使用kubectl apply task(s)将 k8s yaml 文件应用到 AKS 群集。
  4. 如果您只想构建和部署在给定提交时发生更改的微服务,则需要将 k8s yaml 文件拆分为每个项目并在管道触发器上使用路径过滤器

我会将 EventStore 服务与我的代码构建和部署管道分开配置——通常像 EventStore 这样的共享服务将在任何依赖服务之前和之后运行。如果需要,您可以通过另一个管道自动执行此操作。有一些可用于将 EventStore 部署到 AKS 的指南- 请注意,目前不是推荐的配置


推荐阅读