gpt4 book ai didi

php - 在 Kubernetes 中为 Laravel 运行 'php artisan schedule:run' 的良好实践

转载 作者:行者123 更新时间:2023-12-05 06:47:42 24 4
gpt4 key购买 nike

我正在努力将一些 Laravel PHP 应用程序集成到一个新的 Kubernetes 架构中,并且仍在努力研究如何以一种好的方式运行 php artisan schedule:run

在 Laravel 官方手册中,建议我们这样设置 cronjob。

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

引用。 https://readouble.com/laravel/5.7/en/scheduling.html

定时作业

最初,我想出了在 Kubernetes 中使用 cronjob 的想法,目前它运行良好,但开始担心当前的架构。

(一个用于 Web 服务的部署,一个用于任务调度的 cronjob。)

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cron
namespace: my-laravel-app
spec:
concurrencyPolicy: Replace
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- image: my_laravel_app_image:latest
name: cron
command: ["php", "artisan", "schedule:run"]
imagePullPolicy: Always
envFrom:
- configMapRef:
name: laravel-app-config
- secretRef:
name: laravel-app-secret
restartPolicy: Never

但是,由于我在此处使用 concurrencyPolicy: Replace,即使作业仍在运行(超过 1 分钟),pod 本身也可能会终止。为避免此问题,我可以使用默认值 concurrencyPolicy: Allow 但它引入了另一个问题 - 即使我将 failedJobsHistoryLimit 设置为 1 并将 successfulJobsHistoryLimit 设置为1 与作业关联的 pod 在当前运行的内部 Kubernetes 集群中未正确终止,并且达到配额限制。

NAME                        READY   STATUS      RESTARTS   AGE
pod/test-cronjob-a 0/1 Completed 0 4m30s
pod/test-cronjob-b 0/1 Completed 0 3m30s
pod/test-cronjob-c 0/1 Completed 0 2m29s
pod/test-cronjob-d 0/1 Completed 0 88s
pod/test-cronjob-e 0/1 Completed 0 28s

引用。 https://github.com/kubernetes/kubernetes/issues/74741#issuecomment-712707783

此外,我觉得为那些一次性作业配置监控和日志堆栈有点棘手。

部署

我不使用 cronjob,而是考虑尝试将调度程序部署为使用部署资源在容器中具有 cron 设置的另一个 pod。

(一次部署用于 Web 服务,一次部署用于任务调度。)

我只是想知道你们通常如何以可扩展的方式解决这个问题。

最佳答案

而不是运行 schedule:run 使用 K8s kind: Deployment(不是 Job)并将调度程序作为守护进程运行:

php artisan schedule:work

https://laravel.com/docs/9.x/scheduling#running-the-scheduler-locally

更多详情:

参见:https://medium.com/@agungdarmanto/how-to-run-a-laravel-application-into-kubernetes-a6d0111dc98d

关于php - 在 Kubernetes 中为 Laravel 运行 'php artisan schedule:run' 的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66981054/

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