Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将.netcore应用程序作为kubernetes cronjob运行_Kubernetes_Cron - Fatal编程技术网

无法将.netcore应用程序作为kubernetes cronjob运行

无法将.netcore应用程序作为kubernetes cronjob运行,kubernetes,cron,Kubernetes,Cron,我想创建一个kubernetes CronJob调度程序,它可以每分钟调用.netcore控制台应用程序 CronJob规范[CronJob poc.yml]: 种类命令: .netcore是一个非常简单的应用程序,它只打印hello Docker文件: FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/core

我想创建一个kubernetes CronJob调度程序,它可以每分钟调用.netcore控制台应用程序

CronJob规范[CronJob poc.yml]:

种类命令:

.netcore是一个非常简单的应用程序,它只打印hello

Docker文件:

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base    
WORKDIR /app    
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build    
WORKDIR /src    
COPY ["CronJobPoc/CronJobPoc.csproj", "CronJobPoc/"]    
RUN dotnet restore "CronJobPoc/CronJobPoc.csproj"    
COPY . .    
WORKDIR "/src/CronJobPoc"    
RUN dotnet build "CronJobPoc.csproj" -c Release -o /app/build    
FROM build AS publish    
RUN dotnet publish "CronJobPoc.csproj" -c Release -o /app/publish    
FROM base AS final    
WORKDIR /app    
COPY --from=publish /app/publish .    
ENTRYPOINT ["dotnet", "CronJobPoc.dll"]
当我做kubectl得到豆荚时,我看到下面的信息

NAME                           READY   STATUS             RESTARTS   AGE

cronjob-poc-1589463060-9dp8p   0/1     CrashLoopBackOff   4          2m51s
当我尝试使用kubectl日志cronjob-poc-1589463060-9dp8p查看日志时,我什么也看不到。该命令返回空

不知道如何查看日志。有问题,但不确定是什么

我期待看到输出-你好,世界!在日志的某个地方。不确定如何检查出了什么问题,以及在哪里可以看到带有正确错误消息的日志

如果您能在这方面迅速提供帮助,我们将不胜感激

我还尝试在cronjob-poc.yml中使用如下所示的命令参数。我得到了吊舱的紧急退避状态

command:
- /bin/sh
- -c
- echo Invoking CronJobPoc.dll ...; /usr/local/bin/dotnet CronJobPoc.dll

当我尝试使用kubectl日志检查日志时,我看到/bin/sh:1:/usr/local/bin/dotnet:not found

您可以稍微简化Dockerfile。下面是我在cron job netcore应用程序中使用的一个示例:

# Copy csproj and restore as layer 1
FROM microsoft/dotnet:2.1-sdk-alpine AS build
ARG NUGET=https://api.nuget.org/v3/index.json
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore --source $NUGET

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.1-runtime-alpine AS final
WORKDIR /app
COPY --from=build /app/out .
CMD ["dotnet", "Custom.MetricScraper.dll"]
这是三个步骤,稍微容易阅读。您会注意到区别在于,我在结尾使用CMD而不是ENTRYPOINT。您可以修改它以适合您的项目名称和netcore 3.1

以下是相应的YAML:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: metric-scraper-job
  labels:
    app: metric-scraper
spec: # Cron job wrapper around a job
  schedule: "* * * * *"
  jobTemplate:
    spec: # Job definition
      template:
        metadata:
          labels:
            app: metric-scraper
            is-cron: "true"
        spec: # Pod definition
          containers:
          - name: metric-scraper
            image: metricscraper:latest
            imagePullPolicy: IfNotPresent
            env:
              - name: ASPNETCORE_ENVIRONMENT
              value: Production
          restartPolicy: Never
      backoffLimit: 2
此YAML定义将每分钟运行image metricscraper:latest


不过,我注意到k8s中的cron作业有一点是,至少在我的1.14集群中,POD没有得到清理。一种解决方法是通过resourcequotas在名称空间上设置pod限制,并将cron作业固定在其中。希望这有帮助

问题是,我试图使用未安装sdk的Visual Studio停靠此dotnetcore应用程序。当我使用命令'docker build-t cronjobboc'手动停靠它时,它工作了。 同样在命令中,我只是使用了“dotnet cronjobboc.dll”,因为dotnet已经在路径中了

命令: -/bin/sh --c
-echo调用cronjobboc.dll。。。;dotnet cronjobboc.dl

任何快速帮助或建议都将不胜感激。我需要使用kubernetes cronjob设计两个调度程序,这将成为一种拦截器。感谢您的回复@Ainxty。。我已经解决了这个问题。出现了一个问题,我试图使用未安装sdk的Visual Studio对此进行docker。当我手动对接时,它工作了。同样在命令中,我只是使用了“dotnet cronjobboc.dll”,因为dotnet已经在路径中了。
command:
- /bin/sh
- -c
- echo Invoking CronJobPoc.dll ...; /usr/local/bin/dotnet CronJobPoc.dll
# Copy csproj and restore as layer 1
FROM microsoft/dotnet:2.1-sdk-alpine AS build
ARG NUGET=https://api.nuget.org/v3/index.json
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore --source $NUGET

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.1-runtime-alpine AS final
WORKDIR /app
COPY --from=build /app/out .
CMD ["dotnet", "Custom.MetricScraper.dll"]
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: metric-scraper-job
  labels:
    app: metric-scraper
spec: # Cron job wrapper around a job
  schedule: "* * * * *"
  jobTemplate:
    spec: # Job definition
      template:
        metadata:
          labels:
            app: metric-scraper
            is-cron: "true"
        spec: # Pod definition
          containers:
          - name: metric-scraper
            image: metricscraper:latest
            imagePullPolicy: IfNotPresent
            env:
              - name: ASPNETCORE_ENVIRONMENT
              value: Production
          restartPolicy: Never
      backoffLimit: 2