Kubernetes持久卷和主机路径

时间:2018-07-11 13:05:12

标签: 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”容器中。....

因此,我假设主机的'/ Volumes / Data / data'中的内容应该在容器的'/ data'目录中可见?

这个假设正确吗?

因为这绝对不是现在。...

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

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

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

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

寻求答案

4 个答案:

答案 0 :(得分:0)

通过以下命令,您可以检查您的持久量和声明:

kubectl get pv

kubectl get pvc

并查看您定义的卷是否与声明绑定。

您的广告连播开始后,您可以进入容器并在/data上查看数据

kubectl exec -ti <your_pod> -- bash

答案 1 :(得分:0)

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

您可以使用命令kubectl get pods -o wide -n test

来检查您的吊舱调度的工作人员

请注意,根据kubernetes文档,HostPath(仅用于单节点测试–不以任何方式支持本地存储,并且在多节点集群中将不起作用)PersistentVolume

在我的情况下确实有效。

答案 2 :(得分:0)

就像上面的家伙一样。您需要运行“ kubectl get po -n test -o wide”,您将看到托管Pod的节点。然后,如果您对该工作人员进行SSH,则可以看到该卷

答案 3 :(得分:0)

使用主机路径时,应在运行Pod的工作程序节点中检查此'/ data'。