docker - Kubernetes 持久卷和主机路径

标签 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、服务......)

我是否正确理解了持久卷概念?

附注。我正在使用 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/

相关文章:

python - 运行dockerized Hello world python示例时执行格式错误

bash - 抑制或隐藏 Docker "Steps"和控制台中的默认输出

kubernetes - 为 kubernetes 探针提供多个健康检查 URL

go - 从 YAML 对象列表创建 API 对象

Kubernetes HTTP 运行状况检查失败并显示 `http: server gave HTTP response to HTTPS client`

docker-compose 使用循环创建服务

python - 使用 python 设置 dockerized Couchdb

amazon-web-services - 如何使 ECR 存储库公开?

jakarta-ee - kubernetes jee:“ map 资源”属性文件

kubernetes - 从配置映射设置 Pod 资源