首页 > 解决方案 > 直接挂载的 NFS 卷上的 persistentVolumeReclaimPolicy - kubernetes

问题描述

  1. 我已经为 mysql 数据直接挂载了 NFS 卷,需要实施存储策略以跨 pod 删除保留数据,并避免任何损坏。请推荐一些有用的。
  2. 我没有找到启用persistentVolumeReclaimPolicy: Retain in directmounted volumes 的方法。我知道它可以通过创建 PV/PVC 来完成,但它是否可以通过 statefulset 卷来完成……在理解特定对象的 yaml 选项时需要一些指导方针,从哪里获取对象可用的所有选项(参数)。目前正在谷歌搜索每个选项并尝试 - 非常努力。
  3. 我无法将 configmap 文件 (my.cnf) 挂载到 pod 中的文件。它会删除挂载路径中的基础文件。想知道它通常是如何处理的,我们是否需要为每个配置文件单独安装路径。

代码块

apiVersion: v1
kind: Service
metadata:
  name: mymariadb
  labels:
    app: mymariadb

spec:
  ports:
  - port: 3306
    name: mysql
    targetPort: mysql
    nodePort: 30003
  type: NodePort
  selector:
    app: mymariadb

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mymariadb
  labels:
    app: mymariadb
spec:
  serviceName: "mymariadb"
  selector:
    matchLabels:
      app: mymariadb
  template:
    metadata:
      labels:
        app: mymariadb
    spec:
      containers:
      - name: mariadb
        image: mariadb:10.3.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: xxxx
        ports:
        - name: mysql
          containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /data
          subPath: mysql
        - name: conf
          mountPath: /etc/mysql  # /conf.d removing files
        resources:
          requests:
            cpu: 500m
            memory: 2Gi
      volumes:
      - name: data
        nfs:
          server: 10.12.32.41
          path: /data/mymariadb
        spec:
          persistentVolumeReclaimPolicy: Retain  # not taking
      - name: conf
        configMap:
          name: mycustconf
          items:
          - key: my.cnf
            path: my.cnf

标签: dockerkubernetes

解决方案


首先,我不建议在 Kubernetes 平台上挂载 nfs,原因有两个。从安全角度来看,另一个容器可以访问工作节点上的 nfs 挂载。第二,从性能的角度来看,与其他解决方案相比,工作节点和存储之间的连接会更慢。如您所知,性能对于数据库连接至关重要。我认为你应该评估一下。

我建议您使用其中一种云原生存储。您可以在下面的链接中查看它们。Ceph 和 Gluster 是受欢迎的产品。

https://landscape.cncf.io/category=cloud-native-storage&format=card-mode&grouping=category

如果你真的想继续使用 nfs 解决方案,你可以检查两点:

1) 您是否检查了存储设备上的访问列表?您应该看到 nfs 挂载的工作程序节点。

2)尝试在工作节点上挂载nfs存储后,您可以尝试在您的kubernetes集群上导入部署。


推荐阅读