k8s 部署 laravel 任务调度
最近工作中需要在 k8s
中部署 laravel
的任务调度,作为笔记记录下来。
使用 CronJob
资源类型实现,CronJob
是 k8s
的一种资源类型,可以在集群中定时执行任务。这样可以保证任务在集群中只被执行一次。
CronJob 参考:kubernetes.io/zh-cn/docs/tasks/job...
cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: laravel-scheduler
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
volumes:
- name: volume-test
configMap:
name: test-env
items:
- key: .env
path: .env
defaultMode: 420
containers:
- name: laravel-scheduler
image: test:dev
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volume-test
readOnly: true
mountPath: /var/www/html/test/.env
subPath: .env
command: ["/bin/sh", "-c", "php artisan schedule:run"]
restartPolicy: OnFailure
参数说明:
apiVersion: batch/v1beta1
:这表示我们正在使用 Kubernetes API 的batch/v1beta1
版本。这是 Kubernetes CronJob 资源的 API 版本。kind: CronJob
:这表示我们正在创建的资源类型是 CronJob。metadata:
:这部分包含了 CronJob 的元数据。name: laravel-scheduler
:这是我们 CronJob 的名字。
spec:
:这部分包含了 CronJob 的详细配置。schedule: "* * * * *"
:这是 CronJob 的运行时间表,格式与 Unix cron 相同。这里的配置表示每分钟运行一次。jobTemplate:
:这部分定义了每次 CronJob 运行时创建的 Job 的模板。
spec:
:这部分定义了 Job 的详细配置。template:
:这部分定义了 Job 创建的 Pod 的模板。
spec:
:这部分定义了 Pod 的详细配置。volumes:
:这部分定义了 Pod 使用的卷。这里定义了一个名为volume-test
的卷,它的内容来自名为test-env
的 ConfigMap。name: volume-test
:卷的名称。configMap:
:这部分定义了卷的内容来自于一个 ConfigMap。name: test-env
:ConfigMap 的名称,它应该在同一个命名空间中。items:
:这部分定义了从 ConfigMap 中选择哪些数据填充到卷中。key: .env
:这是 ConfigMap 中的一个键,它的值将被填充到卷中。path: .env
:这是在卷中的文件路径,ConfigMapdefaultMode
: 420:这是卷中文件的默认权限模式,它是一个八进制数字。420 对应的十进制是 644,表示文件拥有者有读写权限,而属组用户和其他用户只有读权限。
containers:
:这部分定义了 Pod 中运行的容器。name: laravel-scheduler
:容器的名字。image: test:dev
:容器使用的镜像。imagePullPolicy: IfNotPresent
:镜像拉取策略,如果本地没有镜像,则从仓库拉取。volumeMounts:
:定义了容器中的卷挂载点。name: volume-test
:卷的名称,它应该与volumes
部分定义的卷名称相同。readOnly: true
:这是卷的读写模式,如果为 true,表示卷是只读的。mountPath: /var/www/html/test/.env
:这是在容器中的挂载路径,卷中的文件将出现在这个路径下。subPath: .env
:这是卷中的文件或目录,它将被挂载到mountPath
指定的路径。这里.env
文件将被挂载到/var/www/html/test/.env
。
command: ["/bin/sh", "-c", "php artisan schedule:run"]
:容器启动后执行的命令。
restartPolicy: OnFailure
:Pod 的重启策略。这里的配置表示如果容器退出状态非 0(出现错误),则重新启动容器。
配置字典
ConfigMap
使用参考:kubernetes.io/zh-cn/docs/concepts/...
test-env
配置
kind: ConfigMap
apiVersion: v1
metadata:
name: test-env
data:
.env: |-
APP_NAME=test
APP_ENV=local
APP_KEY=
APP_DEBUG=ture
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
参数说明均通过 gpt 翻译得到。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: