我想创建一个kubernetes CronJob调度器,它可以每分钟调用.netcore控制台应用程序。
CronJob Spec [cronjob-poc.yml]:
kind: CronJob
metadata:
name: cronjob-poc
spec:
schedule: "*/1 * * * *" #Every Minute
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob-poc
image: cronjobpoc:dev
command: ["/usr/local/bin/dotnet", "/app/CronJobPoc.dll"]
restartPolicy: OnFailure
类命令:
kind create cluster --name=cronjob-poc
kind load docker-image cronjobpoc:dev --name=cronjob-poc
kubectl apply -f .\cronjob-poc.yml
.netcore是一个非常简单的应用程序,它只是打印你好
using System;
namespace CronJobPoc{
class Program{
static void Main(string[] args)
{
Console.WriteLine($"{DateTime.Now} - Hello World!");
}
}
}
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 get pods
时,我看到下面的信息。
NAME READY STATUS RESTARTS AGE
cronjob-poc-1589463060-9dp8p 0/1 CrashLoopBackOff 4 2m51s
当我尝试使用kubectl logs cronjob-poc-1589463060-9dp8p
查看日志时,我什么也看不到。命令返回空。
不知道如何查看日志。有什么不对,但不确定是什么?
我期待看到输出“- Hello World!“在日志的某个地方。不知道如何检查出了什么问题,在哪里可以看到带有适当错误消息的日志。
任何快速的帮助,这将是高度赞赏。
我还尝试使用命令参数,如下所示cronjob-poc. yml。我获得Pod的CrashLoopBackOff状态
command:
- /bin/sh
- -c
- echo Invoking CronJobPoc.dll ...; /usr/local/bin/dotnet CronJobPoc.dll
当我尝试使用kubectl logs检查日志时,我会看到/bin/sh:1:/usr/local/bin/dotnet:未找到
2条答案
按热度按时间tvz2xvvm1#
你可以稍微简化一下Dockerfile。以下是我在我的cron job netcore应用程序中使用的一个示例:
这是三个步骤,稍微容易阅读。你会注意到不同的是,我在最后使用的是CMD而不是ENTRYPOINT。您可以修改它以适合您的项目名称和netcore3.1。
下面是相应的YAML:
此YAML定义将每分钟运行图像metricscraper:latest。
关于k8s中的cron作业,我注意到的一件事是,pod没有得到清理(至少在我的1.14集群上)。一个解决方法是通过resourceequotas在命名空间上设置pod限制,并将cron作业放在那里。希望这有帮助!
doinxwow2#
我试图使用Visual Studio对
dotnetcore
应用程序进行dockerize,但没有安装sdk。当我使用命令docker build -t cronjobpoc .
手动将其停靠时,它工作了。同样在shell命令中,我简单地使用了
dotnet CronJobPoc.dll
,因为dotnet已经在路径中命令: