Django Kubernetes作业的动态命令
所以希望这对k8s社区的非Djangores人来说是有意义的。我将尽力解释设置/推理 使用Django,我们可以在Django应用程序的范围和环境中运行许多所谓的管理命令,这些命令可以真正帮助开发和部署。我相信大多数其他框架都有类似的(如果不是完全相同的话)概念 一个例子是“Django Kubernetes作业的动态命令,django,kubernetes,kubernetes-jobs,Django,Kubernetes,Kubernetes Jobs,所以希望这对k8s社区的非Djangores人来说是有意义的。我将尽力解释设置/推理 使用Django,我们可以在Django应用程序的范围和环境中运行许多所谓的管理命令,这些命令可以真正帮助开发和部署。我相信大多数其他框架都有类似的(如果不是完全相同的话)概念 一个例子是“python manage.py migrate”命令,该命令确保我们的代码库(迁移脚本)应用于相关数据库并反映在相关数据库中 我们可以运行大约30-50个核心命令,我们也可以创建自己的命令,以及从任何已安装的第三方应用程序
python manage.py migrate
”命令,该命令确保我们的代码库(迁移脚本)应用于相关数据库并反映在相关数据库中
我们可以运行大约30-50个核心命令,我们也可以创建自己的命令,以及从任何已安装的第三方应用程序中应用这些命令
无论如何。最重要的一点是,我们可以运行很多命令
现在,我有以下k8s作业来运行“migrate”命令:
此作业实际上是在应用程序范围/环境中运行python manage.py migrate
命令。它就像一个符咒:
$kubectl apply-f asencis-web-migrate-job.yaml
它在应用程序的部署中非常有用。当我们所有的测试都运行后,我们可以构建一个映像,“重新启动”集群,然后应用任何迁移。这是难以置信的无缝。(对于k8s核心团队制造出如此有用的产品,我可不敬!)
无论如何
我的问题本质上是这样的,我们可以对上面的kubectl apply
命令在作业上应用一个参数来运行我们喜欢的任何命令吗
例如:
$kubectl apply-f asencis-web-job.yaml——命令python manage.py migrate
您可能需要为此构建自己的工具
您可以使用shell脚本,例如:
#/垃圾箱/垃圾箱
yq评估\
“.spec.template.spec.containers[0]。命令。[2]=\”$1\”\
template-web-job.yaml\
|kubectl应用-f-
您可以通过以下方式填写作业的更多部分:计算.metadata.name
from$USER-$1-$(日期+%s)
,将标签:
附加到Pod以便稍后查找,依此类推
如果这不是一次性的工作,我可能会推荐一个更适合Kubernetes的本地工具,如Helm或Kustomize。这两个工具都需要一些涉及的文件系统布局,然后需要传递变量(脚本命令、提交者)在某种形式上,这实际上并不比使用yq
重写YAML容易。Helm更倾向于大多数稳定的安装(它知道主应用程序部署以及如何就地更新)
如果您已经有了Helm,您可以围绕Helm模板
构建一个类似的脚本。或者如果您有jq
但没有yq
,您可以用JSON{“apiVersion”:“batch/v1”,“kind”:“Job”,…}
重写作业,但在其他方面使用相同的脚本
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