【问题标题】:How to deploy a .NET core console app to Azure Kubernetes Service?如何将 .NET 核心控制台应用部署到 Azure Kubernetes 服务?
【发布时间】:2021-08-09 00:01:39
【问题描述】:

我有一个 .NET 核心控制台应用程序以特定时间间隔定期抓取数据库。我已经对其进行了 docker 化,并且能够从我的本地系统成功运行 docker 映像。我的最终目标是从 AKS 部署它。所以我也将上述镜像推送到了 Azure Container Registry。请帮我弄清楚如何将映像从 ACR 部署到 AKS。

用于创建 docker 镜像的 Dockerfile:

FROM mcr.microsoft.com/dotnet/runtime:5.0
COPY bin/Release/net5.0/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "<app_name>.dll"]

用于部署到 AKS 的 YAML 文件:

apiVersion: apps/v1
items:
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      Process: <app_name>
    creationTimestamp: null
    labels:
      app: <app_name>
    name: <app_name>
  spec:
    selector:
      app: <app_name>
  status:    
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    annotations:
      Process: <app_name>
    creationTimestamp: null
    labels:
      app: <app_name>
    name: <app_name>
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: <app_name>
    strategy: {}
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: <app_name>
      spec:
        containers:
        - env:
          image: "<acr_name>.azurecr.io/<image_name>:<version_tag>"
          name: <app_name>          
          resources: {}
        restartPolicy: Always
  status: {}
kind: List
metadata: {}

我对 Docker 技术比较陌生,我不确定这是否是将 .NET 控制台应用程序部署到 AKS 的正确方法,或者这是否是控制台应用程序的正确 YAML 配置或将其部署到 AKS。请帮我解决这个问题。任何帮助表示赞赏,在此先感谢!

【问题讨论】:

    标签: azure docker kubernetes console-application


    【解决方案1】:

    我猜你需要用正确的项目路径修改docker文件

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
    WORKDIR /app
    
    # copy csproj and restore as distinct layers
    # COPY *.sln .
    COPY dotnet-app/*.csproj ./dotnet-app/
    RUN dotnet restore dotnet-app
    
    # copy everything else and build app
    COPY dotnet-app/. ./dotnet-app/
    WORKDIR /app/dotnet-app
    RUN dotnet publish -c Release -o out
    
    
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
    WORKDIR /app
    COPY --from=build /app/dotnet-app/out ./
    ENTRYPOINT ["dotnet", "dotnet-app.dll"]
    

    这是我构建的示例repository 的分步说明

    【讨论】:

    • 虽然修改 Dockerfile 可能会有所帮助,但我更愿意让它保持简单,只要它可以工作。正如我在问题中提到的,Docker 映像在本地运行,我可以通过运行 Docker 映像来爬取数据库。我真正想要的是一种将控制台应用程序部署到 AKS,而不是 WebApp 或 WebAPI 的方法。我认为问题出在 YAML 配置或部署过程本身。你能帮帮我吗?
    【解决方案2】:

    我将从 Microsoft 文档中的参考文档开始,然后提出更具体的问题。

    参考: https://docs.microsoft.com/en-us/dotnet/architecture/containerized-lifecycle/design-develop-containerized-apps/build-aspnet-core-applications-linux-containers-aks-kubernetes#push-the-image-into-the-azure-acr

    控制台应用程序会比网络应用程序更简单。您需要取出端口和服务配置。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: console-app
      labels:
        app: console-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: console-app
      template:
        metadata:
          labels:
            app: console-app
        spec:
          containers:
            - name: console-app
              image: exploredocker.azurecr.io/console-app:v1
              imagePullPolicy: IfNotPresent
    

    【讨论】:

    • 如标题本身所述,我特别寻找的是帮助将控制台应用程序部署到 AKS,而不是 WebApps 或 WebAPIs。不幸的是,您提供的链接在这方面对我没有帮助。如果您能找到有关将 .NET 核心控制台应用程序部署到 AKS 的任何信息,请指导我。谢谢。
    • 部署是 kubernetes 看起来完全一样,除了你不需要那些环境变量。如果您的应用内置了等待,那么部署就可以了,但是,如果您希望 Kubernetes 定期运行作业,那么您需要创建一个 CronJob 而不是部署。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多