Kubernetes持久卷和主机路径

pos*_*ver 5 docker kubernetes

我正在使用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”容器中。

因此,我假设主机的“ /卷/数据/数据”中的内容应该在容器的“ /数据”目录中可见?

这个假设正确吗?

因为目前绝对不会发生这种情况。

我的第二个假设是,我在'/ data'中保存的所有内容都应该在主机上可见,这也没有发生。

我可以从Kubernetes控制台中看到一切正常启动(持久卷,声明,部署,Pod,服务...)

我完全理解持久卷概念吗?

PS。我正在带有Docker(18.05.0-ce-mac67(25042)-Channel edge)的Mac中尝试此操作,也许它在Mac上不起作用?

寻求答案

Lea*_*ner 3

假设您使用多节点 Kubernetes 集群,您应该能够看到pod 运行的特定工作节点上本地挂载的数据 /Volumes/Data/data

\n

您可以使用以下命令检查您的 pod 被调度的工作人员kubectl get pods -o wide -n test

\n

请注意,根据 kubernetes 文档,HostPath(仅单节点测试 \xe2\x80\x93 本地存储不受任何方式支持,并且无法在多节点集群中工作

\n

它确实适用于我的情况。

\n