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 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: