gpt4 book ai didi

kubernetes - Kubernetes 中的 Cron 作业 - 连接到现有 Pod,执行脚本

转载 作者:行者123 更新时间:2023-12-02 23:46:01 24 4
gpt4 key购买 nike

我确信我遗漏了一些明显的东西。我已经浏览了 Kubernetes 上 ScheduledJobs/CronJobs 的文档,但我找不到按计划执行以下操作的方法:

  1. 连接到现有 Pod
  2. 执行脚本
  3. 断开连接

我有其他方法可以做到这一点,但它们感觉不对。

  1. 为以下内容安排 cron 任务:kubectl exec -it $(kubectl get pods --selector=some-selector | head -1)/path/to/script

  2. 创建一个部署,其中包含一个也包含应用程序的“Cron Pod”,以及许多仅是应用程序的“非 Cron Pod”。 Cron Pod 将使用不同的镜像(计划有 cron 任务的镜像)。

如果可能的话,我更愿意使用 Kubernetes ScheduledJobs 来防止同一个作业同时运行多次,而且我认为这是更合适的方法。

有没有办法通过 ScheduledJobs/CronJobs 来做到这一点?

http://kubernetes.io/docs/user-guide/cron-jobs/

最佳答案

据我所知,没有“官方”方法可以按照您想要的方式执行此操作,而且我相信这是设计的。 Pod 应该是短暂且水平可扩展的,而 Jobs 则被设计为退出。将 cron 作业“附加”到现有 pod 不适合该模块。调度程序不知道作业是否完成。

相反,作业可以启动专门用于运行作业的应用程序实例,然后在作业完成后将其删除。为此,您可以为作业使用与部署相同的镜像,但通过设置 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

关于kubernetes - Kubernetes 中的 Cron 作业 - 连接到现有 Pod,执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com