Kubernetes: пометьте каждую графическую карту c на узле, чтобы можно было запланировать конкретный модуль c на этой карте. - PullRequest
0 голосов
/ 17 июня 2020

У меня есть несколько узлов с разным количеством видеокарт. Я хочу иметь возможность назначить определенный модуль c определенной карте графического процессора, что-то вроде резервирования, когда я назначаю ему задачу.

Я уже видел, что вы можете пометить узел как это:

kubectl label node nodaA project-type=ProjectA

Но это просто метка узла, который будет ему назначен под. Но я хочу быть более конкретным c.

Допустим, у меня есть узел с именем NodeA , который имеет 3 карты GPU из Nvidia . Первая карта зарезервирована для определенной задачи c под названием « CertainOne », две другие карты доступны только для других модулей.

Когда пользователь отправляет модули, которые являются не « CertainOne », модули должны быть назначены этим трем картам, независимо от того, что метка. Но когда другой пользователь отправляет модуль с меткой « CertainOne », тогда всегда следует использовать зарезервированную карту (другой работающий модуль, который может использоваться в этот момент, должен быть удален и модуль с меткой CertainOne должен использовать его в качестве приоритета)

Но я не смог найти решение для этого. Вся идея в том, что я могу изменить карту бронирования в любое время, например, на другую карту, а также изменить диапазон, скажем, не только первую, но и вторую, чтобы капсулы с меткой " CertainOne "должно быть назначено карте 1 или карте 2 во втором сценарии.

Возможно ли это вообще? Или есть другое подобное решение?

1 Ответ

0 голосов
/ 18 июня 2020

Но это просто маркировка узла, который будет ему назначен под. Но я хочу быть более конкретным c.

Но я не смог найти для этого решения.

Возможно ли такое? Или есть другое подобное решение?

К сожалению, по моему опыту, у меня для вас плохие новости, потому что я никогда не видел решений, подобных тому, что вы хотите. Самый стандартный способ - использовать NodeAffinity в шипе с соответствующими метками и селекторами. Но это гарантирует, что вы планируете поды только на выбранных узлах, а это не соответствует вашим требованиям: (

$ kubectl label nodes nodeA k8s-node=gpunode

apiVersion: v1
kind: Pod
metadata:
  name: runongpunode
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: k8s-node
            operator: In
            values:
            - gpunode
...