据我所知,没有“官方”的方式来做到这一点,你想要的方式,这是我相信设计。豆荚应该是短暂的和水平可伸缩的,作业被设计为退出。将cron作业“附加”到现有的pod并不适合该模块。调度程序不知道作业是否完成。
相反,作业可以调出专门用于运行作业的应用程序实例,然后在作业完成后将其取下。为此,您可以对作业使用与部署相同的映像,但通过设置命令:
使用不同的“入口点”。
如果它们的作业需要访问由应用程序创建的数据,那么该数据将需要在应用程序/POD之外持久化,您可以使用几种方法,但最明显的方法是数据库或持久化卷。例如,使用数据库如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: APP
spec:
template:
metadata:
labels:
name: THIS
app: THAT
spec:
containers:
- image: APP:IMAGE
name: APP
command:
- app-start
env:
- name: DB_HOST
value: "127.0.0.1"
- name: DB_DATABASE
value: "app_db"
和连接到相同数据库但具有不同“入口点”的作业:
apiVersion: batch/v1
kind: Job
metadata:
name: APP-JOB
spec:
template:
metadata:
name: APP-JOB
labels:
app: THAT
spec:
containers:
- image: APP:IMAGE
name: APP-JOB
command:
- app-job
env:
- name: DB_HOST
value: "127.0.0.1"
- name: DB_DATABASE
value: "app_db"
或者持久卷方法如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: APP
spec:
template:
metadata:
labels:
name: THIS
app: THAT
spec:
containers:
- image: APP:IMAGE
name: APP
command:
- app-start
volumeMounts:
- mountPath: "/var/www/html"
name: APP-VOLUME
volumes:
- name: APP-VOLUME
persistentVolumeClaim:
claimName: APP-CLAIM
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: APP-VOLUME
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /app
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: APP-CLAIM
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
selector:
matchLabels:
service: app
对于这样的作业,附加到相同的卷:
apiVersion: batch/v1
kind: Job
metadata:
name: APP-JOB
spec:
template:
metadata:
name: APP-JOB
labels:
app: THAT
spec:
containers:
- image: APP:IMAGE
name: APP-JOB
command:
- app-job
volumeMounts:
- mountPath: "/var/www/html"
name: APP-VOLUME
volumes:
- name: APP-VOLUME
persistentVolumeClaim:
claimName: APP-CLAIM
问题内容: 在我们的centos6服务器中。我想以apache用户的身份在cron作业中执行php脚本,但不幸的是它不起作用。 这是crontab的版本(crontab -uapache -e) 这是“ test.php”文件的源代码,可以与“ apache”用户作为所有者正常工作。 我尝试将php替换为php的完整路径(/ usr / local / php / bin / php),但它也不起
问题内容: 我想每天午夜运行一个PHP脚本。在研究如何执行此操作之后,似乎达到此目的的最佳方法是使用CRON作业。 如果我的php脚本位于http://example.com/scripts/scriptExample.php,是否有人可以显示此CRON命令的外观的最简单示例? 我浏览了许多帖子,但找不到足够简单的示例供我学习和借鉴。 问题答案: Crontab需要服务器上的完整路径。 这将每天在
问题内容: 很简单,我有要每月执行一次的节点脚本。 但这是行不通的,大概是因为该命令正在运行的路径或外壳。我尝试了以下通过cron执行节点的方法(已通过-v测试): 我没办法尝试了,有什么建议吗? 问题答案: 只需提供cron作业中node的完整路径即可,例如:
编辑:问题解决了,这是我的错误,我只是使用了错误的cron设置。我假设“*2***”在2点时每天只运行一次,但实际上它在2点后每分钟运行一次。所以Kubernetes的行为是正确的。 我一直在一个 cron 执行点运行多个作业。但似乎只有当这些作业的运行时间非常短时。知道为什么会发生这种情况以及如何防止它吗?我使用策略:禁止,和。 一个cron作业的示例,该作业应该每天运行一次,但在其预定运行时间
我在kubernetes中运行cron作业,作业成功完成,我将输出记录到日志文件中(路径:存储/日志),但由于容器已完成,我无法访问该文件。 是否有无论如何我可以让我的日志文件内容显示在kubectl日志命令或其他替代?
我想使用SQL脚本文件在Kubernetes pod中创建一个SQL Server数据库。我有创建数据库和插入主数据的SQL脚本。由于我是Kubernetes的新手,我很难在pod中运行SQL脚本。我知道SQL脚本可以在单独的kubectl exec命令中手动执行,但是我希望它在pod deploy yml文件本身中自动执行。 有没有办法将脚本文件挂载到pod的卷中,并在启动容器后运行它?