#kubernetes #azure-aks #kubernetes-pvc
#kubernetes #azure-aks #kubernetes-pvc
Вопрос:
У меня есть DaemonSet
, который создает модули диспетчера задач flink, по одному на каждый узел.
Узлы
Допустим, у меня есть два узла
- узел-A
- узел-B
Модули
набор демонов создал бы
- pod-A на узле-A
- модуль B на узле B
Запрос постоянного объема
- Я использую AKS и хочу использовать
azure-disk
для постоянного хранения - Согласно документам: [https://learn.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv ]
- диск Azure может быть связан с одним узлом
допустим, я создаю
- 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