在DaemonSet中处理PersistentVolumeClaim

时间:2019-03-14 14:48:52

标签: kubernetes azure-aks kubernetes-pvc

我有一个DaemonSet,它创建了flink任务管理器pod,每个节点一个。

节点

说我有两个节点

  • 节点A
  • 节点B

豆荚

daemonSet将创建

  • 节点A上的Pod-A
  • 节点B上的Pod-B

永久体积声明

说我创建

  • 连接到节点A的pv-A的pvc-A
  • 用于连接到节点B的pv-B的pvc-B

问题

如何在节点A 上关联 pod-A 以使用 pcv-A

更新:

在进行很多搜索之后,我偶然发现使用StatefulSet可能更好/更清洁。这确实意味着您不会通过DaemonSet获得像每个节点一个pod一样可用的功能。

  

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

2 个答案:

答案 0 :(得分:1)

如果您在守护程序定义中使用了persistentVolumeClaim,并且PV对hostPath类型的PV感到满意,则您的守护程序吊舱将读写hostPath定义的本地路径。此行为将帮助您使用一个PVC分离存储。

这可能并不直接适用于您的情况,但希望这对以后搜索诸如“ DaemonSet的volumeClaimTemplate”之类的人有所帮助。

使用与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: {}

您的守护程序Pod实际上将在每个节点上使用/tmp/mem。 (每个节点上最多有一个守护程序窗格,这很好。)

答案 1 :(得分:0)

将PVC连接到DaemonSet容器的方法与使用其他类型的容器的方法没有任何不同。创建您的PVC并将其作为卷安装到容器上。

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