Обработка запроса PersistentVolumeClaim в DaemonSet

#kubernetes #azure-aks #kubernetes-pvc

#kubernetes #azure-aks #kubernetes-pvc

Вопрос:

У меня есть DaemonSet , который создает модули диспетчера задач flink, по одному на каждый узел.

Узлы

Допустим, у меня есть два узла

  • узел-A
  • узел-B

Модули

набор демонов создал бы

  • pod-A на узле-A
  • модуль B на узле B

Запрос постоянного объема

допустим, я создаю

  • pvc-A для pv-A, подключенного к node-A
  • pvc-B для pv-B, подключенного к node-B

Вопрос

Как я могу связать pod-A с node-A для использования pcv-A?

Обновить:

После долгих поисков в Google я наткнулся на то, что вместо этого было бы лучше / чище использовать StatefulSet . Это означает, что вы не получите функции, доступные вам через DaemonSet, например, по одному модулю на узел.

https://medium.com/@zhimin.wen/persistent-volume-claim-for-statefulset-8050e396cc51

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

1. вам нужна серверная часть облачного хранилища, где PVC не зависит от того, где находится реальный диск.

Ответ №1:

Если вы используете запрос PersistentVolumeClaim в своем определении daemonset, и запрос PersistentVolumeClaim удовлетворяется значением PV с типом hostPath , ваши модули-демоны будут считывать и записывать данные по локальному пути, определяемому hostPath . Такое поведение поможет вам разделить хранилище, используя один PVC.

Возможно, это напрямую не относится к вашей ситуации, но я надеюсь, что это поможет тем, кто ищет что-то вроде «volumeClaimTemplate для DaemonSet» в будущем.

Используя тот же пример, что и cookiedough (спасибо!)

 apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: x
  namespace: x
  labels:
    k8s-app: x
spec:
  selector:
    matchLabels:
      name: x
  template:
    metadata:
      labels:
        name: x
    spec:
      ...
      containers:
      - name: x
        ...
        volumeMounts:
        - name: volume
          mountPath: /var/log
      volumes:
      - name: volume
        persistentVolumeClaim:
          claimName: my-pvc
  

И этот PVC привязан к PV (обратите внимание, что существует только один PVC и один PV!)

 apiVersion: v1
kind: PersistentVolume
metadata:
  creationTimestamp: null
  labels:
    type: local
  name: mem
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /tmp/mem
    type: Directory
  storageClassName: standard
status: {}
  

Ваши модули демонов будут фактически использоваться /tmp/mem на каждом узле. (На каждом узле есть не более 1 модуля демона, так что все в порядке.)

Ответ №2:

Способ подключения PVC к вашему модулю DaemonSet ничем не отличается от того, как вы делаете это с другими типами модулей. Создайте свой PVC и смонтируйте его как том в pod.

 kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-pvc
  namespace: x
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  

Вот как будет выглядеть манифест DaemonSet:

 apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: x
  namespace: x
  labels:
    k8s-app: x
spec:
  selector:
    matchLabels:
      name: x
  template:
    metadata:
      labels:
        name: x
    spec:
      ...
      containers:
      - name: x
        ...
        volumeMounts:
        - name: volume
          mountPath: /var/log
      volumes:
      - name: volume
        persistentVolumeClaim:
          claimName: my-pvc
  

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

1. диск Azure может быть связан с одним узлом! итак, мне нужен способ иметь несколько pvcs