使用哪些 azure 服务(AKS 或 App 服务)在 azure 上部署多个 docker 容器(启用组合)

Which azure services to use ( AKS or App service) to deploy multiple docker containers (compose enabled) on azure

我正在尝试在 Azure 云上部署多个 Web 应用程序容器,以实施 CI/CD 生产环境的管道部署。 目前,我已经使用 docker compose 文件构建了多个容器镜像,该文件在本地主机环境中运行良好。 我尝试将 docker 图像部署到 azure 容器注册表并 运行 它们使用 azure web 应用程序服务,但它失败并给出错误“无法在 ACI 上映射容器端口” .貌似ACI不支持端口映射!

任何人都可以建议我实施 CI/CD 多容器部署部署的具体解决方案吗?

app的技术栈:Nodejs和Angular

Docker:Docker windows 桌面(使用 Linux 容器构建映像)

云:Azure

我在 Devops 领域没有太多经验,如果有人能指导我以正确的方式为多容器 Web 应用程序实施 CI/CD 流程,那将会很有帮助。

感谢您的宝贵时间!

Docker 撰写文件:

version: "3.4"
services:
  frontend:
    build: ./frontend
    ports:
    - "85:80"
    expose:
    - "85"
    - "80"
    networks:
    - dev_network
    depends_on:
    - backend
  backend:
    build: ./backend
    ports:
    - "3000:8600"
    expose:
    - "3000"
    - "8600"
    networks:
    - dev_network
    
networks:
  dev_network:
    driver: bridge

前端 Docker 文件:

# Stage 1: Compile and Build angular codebase

# Use official node image as the base image
FROM node:latest as build

# Set the working directory
WORKDIR /usr/local/app

# Add the source code to app
COPY ./ /usr/local/app/

# Install all the dependencies
RUN npm install

# Stage 2: Serve app with nginx server

FROM nginx:latest

COPY --from=build /usr/local/app/dist/ClientServicePortal /usr/share/nginx/html

# Expose port 80
EXPOSE 80

后端Docker文件:

FROM node:14-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000 8600
CMD ["node", "server.js"]

我不是专家,但我认为这取决于您的应用程序需要哪种 infra/traffic。

AKS 允许您在集群内设置缩放、负载平衡、流量控制。 如果您使用的是 Azure DevOps 工具,另一个优势是 AKS 作为预览版“部署中心(预览版)”中的一项新功能。此功能将基于存储库创建 CI 和 CD。 这是一个很好的帮助,开始并看到它工作,之后你可以跳入 config/settings 并使用它:)

编辑:您的 docker 撰写将被 K8s 清单取代,但设置起来“容易”

作为 by-default 建议,以下是本指南中推荐的主要标准:

单个单体应用:选择 Azure App Service N-Tier 应用程序:如果您有一个或几个 back-end 服务,请选择协调器,例如 Azure Kubernetes 服务 (AKS) 或应用程序服务 微服务:为容器选择 AKS 或 Azure Web 应用程序 无服务器函数和事件处理程序:选择 Azure Functions Large-scale 批处理:选择 Azure Batch

AKS 与 Azure 应用服务

Azure 应用服务:

优点

  • 设置起来非常容易
  • Built-in 与 Azure DevOps 集成
  • 与用 .NET/.NET Core 编写的应用程序完美配合
  • 无管理开销(即不需要系统管理员 activity)

缺点

  • 每个 API 都需要自己的 Azure DevOps 管道设置自己的 ARM/Terraform 模板自定义模板、应用程序设置和机密设置。
  • 它仅在 Azure 中可用。即使它利用 docker 容器,使用 Azure AppService 也需要 Azure 培训。
  • 无法限制 AppService 中内存和 CPU 服务的消耗。
  • 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。
  • 应用服务是 Microsoft Azure 的遗留技术——自 2017 年以来没有重大公告或博客文章。

Azure Kubernetes 服务:

优点

  • 无需部署 ARM 模板。
  • AKS“推出”过程比应用服务中的 Web 部署过程快得多。
  • 此外,借助滚动部署、就绪性和活性探测等功能,在 AKS 中实现“zero-downtime”部署要简单得多。
  • 更简单CI/CD
  • 可以控制CPU,pod 中每个容器的内存
  • 自动:可以使用水平pod自动缩放器自动缩放pods的副本数,或者使用集群自动缩放器缩放集群的节点数。 Kubernetes 还可以通过分析 CPU 和 pods 使用垂直 pod 自动缩放器分析内存消耗来向上或向下调整每个 pod 的资源。遗憾的是,AKS 尚不支持此功能。
  • 大多数云提供商都提供 Kubernetes。如果需要,可以将 Azure Kubernetes 服务中的工作负载 运行 移动到其他 Kubernetes 提供商,例如 Google Kubernetes Engine (GKE) 或 Amazon EKS。
  • 在定价方面,AKS 是赢家,与 Azure AppService 相比,平均成本节省 30%。

缺点

  • 陡峭的学习曲线。
  • 需要学习 kubernetes 术语、kubectl 等

来源:

https://docs.microsoft.com/en-us/dotnet/architecture/modernize-with-azure-containers/modernize-existing-apps-to-cloud-optimized/choosing-azure-compute-options-for-container-based-applications

https://levelup.gitconnected.com/moving-from-azure-app-services-to-azure-kubernetes-service-part-1-e489857c6440

https://spltech.co.uk/azure-appservice-vs-azure-kubernetes-service/

https://medium.com/nature-of-clouds/azure-kubernetes-vs-app-services-a-simple-cost-comparison-3800819e3c35