我正在尝试使用 Kubernetes Persistent Volumes 进行一些实验,我在 Kubernetes 文档中找不到明确的解释,而且行为不是我所期望的,所以我想在这里提问。
我配置了以下持久卷和持久卷声明。
kind: PersistentVolume
apiVersion: v1
metadata:
name: store-persistent-volume
namespace: test
spec:
storageClassName: hostpath
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/Volumes/Data/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: store-persistent-volume-claim
namespace: test
spec:
storageClassName: hostpath
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
以及以下部署和服务配置。
kind: Deployment
apiVersion: apps/v1beta2
metadata:
name: store-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
k8s-app: store
template:
metadata:
labels:
k8s-app: store
spec:
volumes:
- name: store-volume
persistentVolumeClaim:
claimName: store-persistent-volume-claim
containers:
- name: store
image: localhost:5000/store
ports:
- containerPort: 8383
protocol: TCP
volumeMounts:
- name: store-volume
mountPath: /data
---
#------------ Service ----------------#
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: store
name: store
namespace: test
spec:
type: LoadBalancer
ports:
- port: 8383
targetPort: 8383
selector:
k8s-app: store
如您所见,我将“/Volumes/Data/data”定义为 Persistent Volume,并希望将其安装到“/data”容器中。
所以我假设主机中“/Volumes/Data/data”中的任何内容都应该在容器的“/data”目录中可见。这个假设正确吗?因为目前这绝对不会发生。
我的第二个假设是,我在 '/data' 中保存的任何内容都应该在主机上可见,这也不会发生。
我可以从 Kubernetes 控制台看到一切正常启动,(持久卷、声明、部署、Pod、服务......)
我是否正确理解了持久卷概念?
附注。我正在使用 Docker (18.05.0-ce-mac67(25042) -Channel edge) 的 Mac 中尝试这个,它可能不应该在 Mac 上工作?
谢谢解答
最佳答案
假设您使用的是多节点 Kubernetes 集群,您应该能够在/Volumes/Data/data 看到本地挂载的数据。在 pod 运行的特定工作节点上
您可以使用命令 kubectl get pods -o wide -n test
来检查您的 pod 被调度的工作程序。
请注意,根据 kubernetes 文档,HostPath(仅限单节点测试 - 不支持任何方式的本地存储,并且不会在多节点集群中工作)PersistentVolume
在我的情况下它确实有效。
关于docker - Kubernetes 持久卷和主机路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51286231/