【问题标题】:Which azure services to use ( AKS or App service) to deploy multiple docker containers (compose enabled) on azure使用哪些 azure 服务(AKS 或 App 服务)在 azure 上部署多个 docker 容器(启用撰写)
【发布时间】:2021-08-09 12:46:02
【问题描述】:

我正在尝试在 Azure 云上部署多个 Web 应用容器,以实现生产环境的 CI/CD 管道部署。 目前我已经使用 docker compose 文件构建了多个容器映像,该文件在 localhost 环境中运行良好。 我尝试将 docker 映像部署到 azure 容器注册表并使用 azure Web 应用程序服务运行它们,但它未能给出错误 "Cannot map container ports on ACI" 。 ACI 好像不支持端口映射!

谁能给我一个具体的解决方案来实现多容器部署的 CI/CD 部署?

应用技术栈:Nodejs 和 Angular

Docker:Windows 的 Docker 桌面(使用 Linux 容器构建镜像)

云:天蓝色

我在 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"]

【问题讨论】:

    标签: node.js azure-devops docker-compose continuous-integration azure-aks


    【解决方案1】:

    我不是专家,但我认为这取决于您的应用程序需要什么样的基础设施/流量。

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

    编辑:您的 docker compose 将被 K8s 清单替换,但设置起来“容易”

    【讨论】:

      【解决方案2】:

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

      单个单体应用:选择 Azure 应用服务 N 层应用:如果您有一个或几个后端服务,请选择协调器,例如 Azure Kubernetes 服务 (AKS) 或应用服务 微服务:为容器选择 AKS 或 Azure Web 应用 无服务器函数和事件处理程序:选择 Azure Functions 大规模批处理:选择 Azure Batch

      AKS 与 Azure 应用服务

      Azure 应用服务:

      优点

      • 设置非常简单
      • 与 Azure DevOps 的内置集成
      • 与使用 .NET/.NET Core 编写的应用程序完美配合
      • 没有管理开销(即不需要系统管理员活动)

      缺点

      • 每个 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 中实现“零停机”部署要简单得多。
      • 更简单的 CI/CD
      • 可以控制 pod 内每个容器的 CPU、内存
      • Automatically:可以使用水平 pod autoscaler 自动扩展 pod 的副本数,也可以使用 cluster autoscaler 扩展集群的节点数。 Kubernetes 还可以通过使用垂直 pod 自动缩放器分析 pod 的 CPU 和内存消耗来调整每个 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

      【讨论】:

        猜你喜欢
        • 2019-03-09
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 2021-11-30
        • 2020-01-16
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多