minikube:使用存储类在 /tmp 之外配置数据

minikube:使用存储类在 /tmp 之外配置数据

这里绝对是 minikube/kubernetes 新手。

我正在使用 minikube vm-driver = none(以防万一)来部署一个应用程序,该应用程序使我可以选择指定用于配置卷的 storageClass,并且它默认使用“标准”storageClass。

这是可行的,但这意味着在应用程序中创建的所有数据最终都会进入/tmp//tmp/hostpath_pv我相信是文件夹)。

这让我很恼火。我意识到 minikube 本身会将这些数据保存在迷你库重新启动,但我担心在正常的 Linux 文件夹清理中丢失数据/tmp

我希望能够创建一个新的 storageClass(因为这是我在应用程序配置 YAML 中使用的唯一易于配置的选项),使 minikube 将持久卷粘贴在目录中/data(或任何其他地方不会被操作系统自动清理的地方)。

有没有简单的方法可以做到这一点?或者将我的卷放入 中是否根本就是个问题/tmp

抱歉,我完全不懂。我很感激你的帮助。

答案1

对于数据库等有状态应用程序,我们希望拥有在 Pod 生命周期之外持久保存数据的卷。Kubernetes 通过引入 PersistentVolume 和 PersistentVolumeClaim 资源解决了这个问题,这些资源可在 Kubernetes 集群中启用本机和外部持久存储。使用 minikube,您可以通过将 hostPath 用作 PersistentVolume 来实现这一点。假设您想要拥有 MongoDB 后端。卷声明,以使该卷可供 MongoDB 使用。

mongodb-pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  hostPath:
    path: /data/mongoData

现在您必须创建本地目录用于存储:

$ mkdir -p /data/mongoData
$ chmod 777 /data/mongoData

然后,您必须创建持久卷声明。使用持久卷声明,您可以发出绑定匹配持久卷的请求。

mongodb-pv-claim.yml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-claim
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

mongodb-deploy.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongodb
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: db
    spec:
      restartPolicy: Always
      volumes:
        - name: data-storage
          persistentVolumeClaim:
            claimName: data-claim
      containers:
        - name: mongodb-container
          image: "de13/mongo-myapp"
          volumeMounts:
            - name: data-storage
              mountPath: /var/lib/mongo
          ports:
            - containerPort: 27017

应用文件:

$ kubectl apply -f mongodb-pv.yml
$ kubectl apply -f mongodb-pv-claim.yml
$ kubectl apply -f mongodb-deploy.yml

$ kubectl get pvc
NAME         STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS       AGE
data-claim   Bound     data      5Gi        RWO                               20s   <unset>

我们已经可以看到声明已经得到满足(绑定),并且它与最近创建的名为“数据”的卷相连。

您可以检查本教程Kubernetes 文档如果您想了解有关持久存储的更多信息。

答案2

另一个解决方案是首先创建存储类(不提供),然后创建 pv、pvc,最后创建 Pod。下面是我如何在 Minikube 中使其工作:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: datacache-sc 
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

然后创建PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: datacachepv-1
  labels:
   name: datacache
spec:
  storageClassName: datacache-sc
  persistentVolumeReclaimPolicy: Delete
  accessModes:
    - ReadWriteMany
  capacity:
    storage: 100Mi
  hostPath:
    path: /var/Cachebackup 
    type: DirectoryOrCreate

然后是 PVC:

apiVersion: v1
metadata:
  name: datacachepvc-1
spec:
  storageClassName: datacache-sc
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Mi
  selector:
    matchLabels:
      name: "datacache"

最后将此 PVC 挂载到 Pod 中:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: testrunner
  name: datacache
spec:
  containers:
  - image: abc.se/sandbox/xyz/myimage:0.1.2
    name: datacache
    ports:
    - containerPort: 3645 
      hostPort: 3645 
    resources: {}
    volumeMounts:
            - name: datacache-conf
              mountPath: /bin/datacache.conf
              subPath: datacache.conf
              readOnly: true 
            - name: datacache-volume
              mountPath: /DBbackup
  volumes:
  - name: datacache-conf
    configMap:
     name: datacache-conf
     items:
     - key: datacache.conf
       path: datacache.conf
  - name: datacache-volume
    persistentVolumeClaim:
      claimName: datacachepvc-1

相关内容