无法将.netcore应用程序作为kubernetes cronjob运行
我想创建一个kubernetes CronJob调度程序,它可以每分钟调用.netcore控制台应用程序 CronJob规范[CronJob poc.yml]: 种类命令: .netcore是一个非常简单的应用程序,它只打印hello Docker文件:无法将.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
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