Kubernetes, масштабирование стручка cronjob к другому узлу - PullRequest
0 голосов
/ 11 апреля 2020

У нас есть один cronjob kubernetes, задача которого - обнаружить недавно загруженный файл и выполнить с ним некоторые операции. Эта операция выполняется каждую минуту и ​​может занять 10 минут.

В данный момент она работает и создает новые модули для заданий по мере обнаружения новых файлов. Однако нам бы хотелось, чтобы модуль, созданный cronjob, появлялся на другом узле. На этом этапе все мои модули создаются в одном и том же узле, что может привести к тому, что мой экземпляр EC2 обработает sh в худшем случае, когда будет много новых файлов, и моя система использует нашу память.

Я использую файловую систему EFS для обмена файлами между моими различными узлами, чтобы все узлы могли читать загруженные файлы.

Как мне go разрешить создание новых модулей на разных узлах с помощью kubernetes cronjobs?

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете использовать Inter-pod antiAffinity в разделе шаблонов модулей cronjob.Inter-pod-сродство и анти-сродство позволяют вам ограничивать, какие узлы ваш модуль может планировать на основе меток на модулях. которые уже работают на узле, а не на основе меток на узлах. Правила имеют вид «этот модуль должен (или, в случае антиаффинности, не должен) запускаться в X, если этот X уже запускает один или несколько модулей, соответствующих правилу Y»

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - web-store
                topologyKey: "kubernetes.io/hostname"
          containers:
            - name: hello
              image: bash
              command: ["echo",  "Hello world"]
          restartPolicy: OnFailure

Необходимые документы API

kubectl explain cronjob.spec.jobTemplate.spec.template.spec.affinity.podAntiAffinity
KIND:     CronJob
VERSION:  batch/v1beta1

RESOURCE: podAntiAffinity <Object>

DESCRIPTION:
     Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod
     in the same node, zone, etc. as some other pod(s)).

     Pod anti affinity is a group of inter pod anti affinity scheduling rules.

FIELDS:
   preferredDuringSchedulingIgnoredDuringExecution  <[]Object>
     The scheduler will prefer to schedule pods to nodes that satisfy the
     anti-affinity expressions specified by this field, but it may choose a node
     that violates one or more of the expressions. The node that is most
     preferred is the one with the greatest sum of weights, i.e. for each node
     that meets all of the scheduling requirements (resource request,
     requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by
     iterating through the elements of this field and adding "weight" to the sum
     if the node has pods which matches the corresponding podAffinityTerm; the
     node(s) with the highest sum are the most preferred.

   requiredDuringSchedulingIgnoredDuringExecution   <[]Object>
     If the anti-affinity requirements specified by this field are not met at
     scheduling time, the pod will not be scheduled onto the node. If the
     anti-affinity requirements specified by this field cease to be met at some
     point during pod execution (e.g. due to a pod label update), the system may
     or may not try to eventually evict the pod from its node. When there are
     multiple elements, the lists of nodes corresponding to each podAffinityTerm
     are intersected, i.e. all terms must be satisfied.

Примечание: Анти-сходство Pod требует, чтобы узлы были последовательно помечены, другими словами, каждый узел в кластере должен иметь соответствующую метку, соответствующую topologyKey. Если в некоторых или во всех узлах отсутствует указанная метка topologyKey, это может привести к непреднамеренному поведению.

...