首页 > 解决方案 > 在 DaemonSet 中处理 PersistentVolumeClaim

问题描述

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

节点

假设我有两个节点

豆荚

daemonSet 将创建

持久卷声明

说我创造

问题

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

更新:

经过多次谷歌搜索,我偶然发现使用 StatefulSet 可能会更好/更清洁。这确实意味着您将无法通过 DaemonSet 获得可用的功能,例如每个节点一个 pod。

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

标签: kubernetesazure-akskubernetes-pvc

解决方案


如果您在 daemonset 定义中使用 persistentVolumeClaim,并且 persistentVolumeClaim 满足类型为 的 PV,则hostPath您的 daemon pod 将读取和写入由 定义的本地路径hostPath。此行为将帮助您使用一个 PVC 分离存储。

这可能并不直接适用于您的情况,但我希望这有助于将来搜索“volumeClaimTemplate for 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: {}

您的守护程序 pod 将实际/tmp/mem在每个节点上使用。(每个节点上最多有 1 个守护进程 pod,所以这很好。)


推荐阅读