因为我已经尝试创建持久化卷,但没有得到任何价值,因为我在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连接时,都无法获得存储在本地卷中的文件。任何建议都会有帮助:)
2条答案
按热度按时间xggvc2p61#
K8几乎支持PV和PVC的所有应用程序在K8上运行。根据您的文件,您将存储类留空。它采用默认的存储类。很有可能你没有任何存储类,或者它可能不是10GB。首先,你创建一个存储类,你想存储卷。它可能是本地的或集群外部的NFS,或者使用第三方解决方案,如Minio或Rook。您还可以定义此存储类的大小(例如,10GB 100GB)。然后,您使用此存储类创建一个PV,该PV具有与您要使用它的应用相关的唯一名称。最后,使用PV挂载PVC(持久卷声明)。现在,您的应用程序将数据存储到与PV一起挂载的PVC中,PV将数据存储到存储类中。这是一个存储类yaml文件的示例。
我希望这对你有帮助。
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:
。