【问题标题】:Dynamic Command for Kubernetes JobsKubernetes 作业的动态命令
【发布时间】:2021-03-19 20:13:09
【问题描述】:

所以希望这对 k8s 社区的非 Djangoers 有意义。我会尽力解释设置/推理。

使用 Django,我们有很多所谓的管理命令,我们可以在 Django 应用程序的范围和环境中运行这些命令,这些命令可以真正帮助开发和部署。我敢肯定,大多数其他框架都有相似的概念,如果不完全相同的话。

一个例子是“python manage.py migrate”命令,它确保我们的代码库(迁移脚本)被应用到并反映在相关的数据库中。

大约有。我们可以运行 30 - 50 个核心命令,我们还可以创建自己的命令,以及应用来自任何已安装的第三方应用程序的命令。

无论如何。最重要的一点是我们可以运行很多命令。

现在,我有以下 k8s 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

此作业实质上是在应用程序范围/环境中运行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

【问题讨论】:

    标签: django kubernetes kubernetes-jobs


    【解决方案1】:

    您可能需要为此构建自己的工具。

    您可以在 yq 周围使用 shell 脚本,例如:

    #!/bin/sh
    yq eval \
        ".spec.template.spec.containers.[0].command.[2]=\"$1\"' \
        template-web-job.yaml \
    | kubectl apply -f-
    

    您可以通过这种方式填写 Job 的更多部分:从 $USER-$1-$(date +%s) 计算 .metadata.name,将 labels: 附加到 Pod 以便稍后找到它,等等。

    如果这不是一次性工作,我可能会推荐一个更原生于 Kubernetes 的工具,例如 Helm 或 Kustomize。这两个工具都需要一些涉及的文件系统布局,然后您需要以某种形式传递变量(脚本命令、提交者);这实际上并不比使用yq 重写 YAML 更容易。 Helm 更倾向于大多数稳定的安装(它知道主应用程序部署以及如何就地更新它)。

    如果您已经拥有 Helm,您可以围绕 helm template 构建一个类似的脚本。或者,如果您有 jq 但没有 yq,您可以用 JSON {"apiVersion": "batch/v1", "kind": "Job", ...} 重写作业,否则使用相同的脚本。

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2023-04-05
      • 1970-01-01
      • 2021-12-18
      • 2019-04-22
      • 2019-09-07
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多