无法在 Kubernetes 中运行 .NET 应用程序

Dmi*_*riy 2 .net docker kubernetes kind

我正在尝试在本地 kubernetes 集群(Kind)中部署一个简单的 .NET 应用程序以进行测试。应用部署时,Pod 启动时不会出现错误。但镜像构建得很好,因为如果在 Docker 中本地启动,容器就可以很好地工作。

NAME                             READY   STATUS    RESTARTS   AGE
orderproducer-68d5ff7944-d2d89   0/1     Error     4          103s
Run Code Online (Sandbox Code Playgroud)
kubectl logs -l app=orderproducer

Could not execute because the application was not found or a compatible .NET SDK is not installed.
Possible reasons for this include:
  * You intended to execute a .NET program:
      The application 'OrderProducer.dll' does not exist.
  * You intended to execute a .NET SDK command:
      It was not possible to find any installed .NET SDKs.
      Install a .NET SDK from:
        https://aka.ms/dotnet-download
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为如果我在本地(而不是在集群中)从同一个映像启动一个 docker 容器,它就可以正常工作。此外,我已在该容器上运行 bash 并确保该文件夹OrderProducer.dll确实存在于该/app文件夹(这是一个工作目录)中。

xxx@xxx:/mnt/c/Users/xxx$ docker run --name test6 orderproducer:latest
Order Producer has started!
Kafka broker: 127.0.0.1:9092
Run Code Online (Sandbox Code Playgroud)

你知道我的错误是什么吗?为什么它在 Docker 中运行,而不是在 K8s 的 pod 中运行?我已经花了大约3个小时试图弄清楚,但仍然没有。提前谢谢了。

这是我使用的一些工件。

Dockerfile:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["OrderProducer/OrderProducer.csproj", "OrderProducer/"]
COPY ["Common/Common.csproj", "Common/"]
RUN dotnet restore "OrderProducer/OrderProducer.csproj"
COPY . .
WORKDIR "/src/OrderProducer"
RUN dotnet build "OrderProducer.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "OrderProducer.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OrderProducer.dll"]
Run Code Online (Sandbox Code Playgroud)

然后我构建一个图像并使其可访问:

docker build -f OrderProducer/Dockerfile -t orderproducer:latest .
kind load docker-image orderproducer:latest
Run Code Online (Sandbox Code Playgroud)

然后我应用部署:

kubectl apply -f orderproducer-deployment.yml
Run Code Online (Sandbox Code Playgroud)

order Producer-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: orderproducer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: orderproducer
  template:
    metadata:
      labels:
        app: orderproducer
    spec:
      containers:
      - name: orderproducer
        image: orderproducer:latest
        imagePullPolicy: Never
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
Run Code Online (Sandbox Code Playgroud)

Dmi*_*riy 6

原因是当一个卷安装到/app它时会清除容器中的所有/app内容。

我通过编辑以下部署部分解决了该问题:

volumeMounts:
        - name: appsettings-volume
          mountPath: /app/appSettings.json
          subPath: appSettings.json
Run Code Online (Sandbox Code Playgroud)