一千萬個為什麽

搜索

Kubernetes基於模板和列表創建多個作業



我們目前正在將許多生產數據入口/處理腳本/流程遷移到kubernetes集群中。我們與之交互的每個“客戶”或公司都有大量數據,我們希望以每個客戶為基礎處理所有這些數據。我創建了一個帶有腳本的容器,我在其中傳遞了一個customerID。 <�代碼> E.G。一個容器將運行並處理一個客戶數據。這需要按計劃對一個或多個客戶進行。

我一直在使用以下定義專門為客戶756工作,它正在按預期工作。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: image-puller-756
spec:
  schedule: "30 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: image-puller-756
            image: index.docker.io/my_company/image_puller:latest
            imagePullPolicy: Always
            env:
              - name: ALLOW_TTY
                value: "true"
              - name: PYTHONUNBUFFERED
                value: "0"
              - name: prodDbUser
                valueFrom:
                  secretKeyRef:
                    name: image-creds
                    key: username
              - name: prodDbPass 
                valueFrom:
                  secretKeyRef:
                    name: image-creds
                    key: password
            command: ["/bin/bash"]
            args: ["-c", "/usr/bin/python3 -u /go/bin/main.py -c 756"]
          restartPolicy: Never
          imagePullSecrets:
          - name: myregistrykey

一旦安排它將按小時運行,這是完美的,但是我現在需要一種方法來為~500個不同的客戶復制這個定義並將其應用到集群。目前我正在使用模板文件,並使用我正在測試的客戶列表進行查找和替換,但我正在尋找更好的方法來管理它。客戶只會根據某些邏輯為他們運行某些流程,我希望能夠運行另一個流程,該流程將充當計劃並為客戶動態添加或刪除作業。

我認為可能有一種方法可以使用yaml或k8s傳遞列表和模板並讓它創建它們。這種方法似乎過時了,我很難想到這是正確的。

轉載註明原文: Kubernetes基於模板和列表創建多個作業

一共有 1 個回答:

您是否查看了 cron-jobs 的文檔?您可以使用 run 命令。

$ kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
cronjob "hello" created

這樣,您可以使用bash腳本遍歷客戶以部署容器。

不知道大局難以完全回答,但我也認為ansible模板可以解決這個問題。您可以將上面的配置文件轉換為jinja2模板。您可以將您的客戶作為JSON dict傳遞,並使用with_items循環訪問它們或將您的客戶視為庫存。這將為您提供一種處理某些“雪花”客戶的簡單方法。

編輯:就Vanilla Kubernetes而言,我不認為這是可能的。您可以添加自己的自定義控制器並擴展kubernetes API。這將允許您創建定義客戶的API對象,然後讓自定義控制器選擇並創建您的cron作業。查看 https://github.com/coreos/prometheus-operator ,因為他們實施了這樣的允許多個團隊在同一個集群上運行自己的Prometheus解決方案的解決方案。