Kubernetes是否支持为SQLite数据库创建持久化卷

ggazkfy8  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(129)

因为我已经尝试创建持久化卷,但没有得到任何价值,因为我在virtualbox中托管的minikube vm中创建卷。
我的部署的yaml文件:

apiVersion: apps/v1    
kind: Deployment
metadata:
  name: python-flask-app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: python-flask-app-dep
  template:
    metadata:
      labels:
        app: python-flask-app-dep
    spec:
      volumes:
      - name: mypod-pvc
        persistentVolumeClaim:
          claimName: mypvc
      containers:
        - name: python-app-container
          image: jackazjimmy/flask-test-demo-eks:v1
          volumeMounts:
           - mountPath: /app/instance/
             name: mypod-pvc
          ports:
            - containerPort: 31816  # Exposed port in your Dockerfile
          resources:
            limits:
              cpu: 500m
            requests:
              cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: python-app-service
spec:
  selector:
    app: python-flask-app-dep
  ports:
    - protocol: TCP
      port: 8080  # External port
      targetPort: 31816  # Container port
  type: NodePort

Pvc yaml文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  storageClassName: ""
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
     storage: 10Gi

Pv yaml文件:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mypv
spec:
storageClassName: ""
capacity:
   storage: 10Gi
accessModes:
   - ReadWriteOnce
hostPath:
   path: "/home/mydata"

在应用或创建所有所需的资源后,每当我通过minikube ssh连接时,都无法获得存储在本地卷中的文件。任何建议都会有帮助:)

xggvc2p6

xggvc2p61#

K8几乎支持PV和PVC的所有应用程序在K8上运行。根据您的文件,您将存储类留空。它采用默认的存储类。很有可能你没有任何存储类,或者它可能不是10GB。首先,你创建一个存储类,你想存储卷。它可能是本地的或集群外部的NFS,或者使用第三方解决方案,如Minio或Rook。您还可以定义此存储类的大小(例如,10GB 100GB)。然后,您使用此存储类创建一个PV,该PV具有与您要使用它的应用相关的唯一名称。最后,使用PV挂载PVC(持久卷声明)。现在,您的应用程序将数据存储到与PV一起挂载的PVC中,PV将数据存储到存储类中。这是一个存储类yaml文件的示例。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
  - debug
volumeBindingMode: Immediate

我希望这对你有帮助。

6tr1vspr

6tr1vspr2#

您不应该期望能够直接访问Kubernetes卷中的文件。您的问题暗示您可能希望在主机系统上看到SQLite文件;卷存储通常由Kubernetes本身管理,并且通常不在集群管理员可以访问它的地方(云环境中的典型示例是AWS EBS卷,连接到EC2示例,其中没有直接登录访问)。
通常也不应该创建PersistentVolume对象。一个名为 *storage provider * 的集群内进程看到一个PersistentVolumeClaim,从某处分配一些存储,并创建PersistentVolume。Minikube包括自己的存储供应商,你应该依赖它。
在您展示的示例中,我怀疑如果您删除所有这些对象,它将工作;从本地存储库中删除PersistentVolume对象,并删除storageClassName:设置;然后重新部署如果你在执行此操作后执行kubectl get pv,你应该会看到Minikube已经为你创建了一个PersistentVolume,由其VM内的存储支持。
更广泛地说,我认为附加到ReadWriteOnce PersistentVolumeClaim的Deployment不是一个很好的模式。您永远无法创建第二个副本,因为它将无法装载卷,这甚至会在例行更新方案中造成问题。StatefulSet的设置稍微复杂一些,但这意味着每个副本都将获得自己自动创建的PersistentVolumeClaim。
另一个相应的大规模评论是SQLite可能不是在Kubernetes中运行的正确数据库选择。SQLite本质上依赖于数据库位于文件系统可访问的文件中,但是很难获得可以从多个节点访问的文件系统(读写多访问模式)。一个更典型的设置是在自己的独立StatefulSet中部署一个关系数据库,如PostgreSQL或MySQL,然后您可以将Deployment附加到该数据库,而无需安装任何存储,因此可以根据您的需要(以及数据库可以支持的)使用尽可能多的replicas:

相关问题