据我所知是没有“正式”的方式来做到这一点,你所希望的方式,那就是我相信的设计。豆荚应该是短暂的并且可以水平扩展,而乔布斯则设计成退出。将cron作业“附加”到现有的容器并不适合该模块。调度员不知道工作是否完成。
相反,作业可以调出一个专门用于运行作业的应用程序实例,然后在作业完成后将其删除。要做到这一点,您可以使用与作业相同的Image作为部署,但通过设置command:
来使用不同的“入口点”。
如果他们的工作需要访问由您的应用程序创建的数据,那么这些数据将需要在应用程序/ 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
为什么你必须连接到现有的吊舱?你不能在一个新的pod中执行你的脚本吗?另一种可能性是在主要窗格(例如HTTP)上打开一个服务器,并从预定作业拨打电话。 – kichik
这是一个我想调用命令的Symfony应用程序。服务器上有很多租户,这对'ls -s */|会更容易cut -f1 -d'/''获取可迭代的目录(安装)列表,而不是为每个安装手动创建cron条目。它会以'installation = $(ls -d */| cut -f1 -d'/'); cd/path/$安装; php app/console some:command' 新的pod不会知道每个安装,并且不会访问安装变量,也不需要下拉和设置应用程序就好像它是一个实例。 – Aeisor