所以希望这对 k8s 社区的非 Djangoers 有意义。我会尽力解释设置/推理。
使用 Django,我们有很多所谓的管理命令,我们可以在 Django 应用程序的范围和环境中运行这些命令,这些命令可以真正帮助开发和部署。我确信大多数其他框架具有相似的(如果不相同的话)概念。
一个例子是“ python manage.py migrate
”命令,它确保我们的代码库(迁移脚本)被应用到并反映在相关的数据库中。
大约有。我们可以运行 30 - 50 个核心命令,我们也可以创建自己的命令,以及应用任何已安装的第三方应用程序中的命令。
无论如何。最重要的一点是,我们可以并且确实可以运行很多命令。
现在,我有以下 k8s 作业来运行“迁移”命令:
apiVersion: batch/v1
kind: Job
metadata:
name: asencis-web-migrate-job
spec:
template:
spec:
containers:
- name: asencis-web-migrate-job
image: asencis/asencis-base:latest
imagePullPolicy: Always
command: ['python', 'manage.py', 'migrate']
envFrom:
- configMapRef:
name: asencis-config
- secretRef:
name: asencis-secret
restartPolicy: Never
backoffLimit: 5
该作业本质上是python manage.py migrate
在应用程序范围/环境中运行命令。它就像一个魅力:
$ kubectl apply -f asencis-web-migrate-job.yaml
当我们所有的测试都运行时,它在应用程序的部署中非常有用,然后我们可以构建一个镜像,“推出重启”集群,然后应用任何迁移。这是令人难以置信的无缝。(我不向 k8s 核心团队致敬,因为他们制作了如此有用的产品!)
无论如何。
我的问题本质上是这样的,我们可以在工作中对上述kubectl apply
命令应用一个参数来运行我们喜欢的任何命令吗?
一个例子是:
$ kubectl apply -f asencis-web-job.yaml --command python manage.py migrate