Есть ли способ запланировать модули, чтобы иметь сходство с утверждением о постоянном томе?

# #google-kubernetes-engine

Вопрос:

У меня есть набор кронджобов Kubernetes, которые я хочу запустить. Утверждение о постоянном томе записывается повторно. Будет одно задание, которое обновит данные на томе, а другие задания будут считывать данные. ПВХ может быть привязан только к одному узлу за раз, но, насколько я понимаю (это может быть неверно), другие модули могут монтировать его только для чтения при условии, что они запланированы на правильном узле. (Очевидно, что только один модуль может монтировать его для чтения/записи.)

Я вижу, что могу запланировать два модуля на одном узле с помощью podAffinity, но есть ли способ использовать affinity для выбора узла, к которому подключен пвх? Или в GKE это возможно сделать? Мое заявление выглядит так:

 ---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-persistent-volume
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  storageClassName: standard
 

Ответ №1:

Вы должны быть в состоянии сделать это, используя сходство Pod с метками и параметром topologyKey, установленным в kubernetes.io/hostname . Ваша строфа о близости будет выглядеть примерно так:

 affinity:
  podAffinity: 
    requiredDuringSchedulingIgnoredDuringExecution: 
    - labelSelector:
        matchExpressions:
        - key: app 
          operator: In 
          values:
          - mycronjob 
      topologyKey: kubernetes.io/hostname
 

что позволило бы планировать задания с приложением label=mycronjob на том же узле.

Комментарии:

1. хммм. Я думаю, что хитрость в том, что у меня есть mycronjob1, mycronjob2, mycronjob3, и я не обязательно знаю, какие из них будут активны в данный момент времени. Я подумывал о создании фиктивного развертывания, но, думаю, я могу смоделировать то же самое, используя ключ, отличный от приложения, и выбрав его, поэтому, если какая-либо работа (или даже развертывание) выполняется, они окажутся на нужном узле.