簡體   English   中英

Kubernetes 作業的動態命令

[英]Dynamic Command for Kubernetes Jobs

所以希望這對 k8s 社區的非 Djangoers 有意義。 我會盡力解釋設置/推理。

使用 Django,我們有很多所謂的管理命令,我們可以在 scope 和我們的 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

您可能需要為此構建自己的工具。

您可以在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", ...}中重寫作業,但除此之外使用相同的腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM