據我所知是沒有「正式」的方式來做到這一點,你所希望的方式,那就是我相信的設計。豆莢應該是短暫的並且可以水平擴展,而喬布斯則設計成退出。將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