首页 > 解决方案 > 更改所有权 /data/db、输入/输出错误、Kubernetes Mongo 部署

问题描述

我正在尝试使用 minikube 为 mongo 运行部署。我使用以下配置创建了一个持久存储:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: mongo-volume
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  claimRef:
    namespace: default
    name: mongo-claim
  hostPath:
    path: "/test"

"/test"文件夹正在使用minikube mount <local_path>:/test

然后我使用以下配置创建了一个 PV 声明:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mongo-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Mi

最后,我正在尝试使用以下配置创建服务和部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo
spec:
  replicas: 1
  template:
    metadata:
      labels:
        tier: backend
        app: mongo
    spec:
      containers:
      - name: mongo
        image: "mongo"
        envFrom:
          - configMapRef:
              name: mongo-config
        ports:
          - name: mongo-port
            containerPort: 27017 
        volumeMounts:
          - name: mongo-storage
            mountPath: "/data/db"
      volumes:
        - name: mongo-storage
          persistentVolumeClaim:
            claimName: mongo-claim
---
apiVersion: v1
kind: Service
metadata: 
  name: mongo
spec:
  selector:
    app: mongo
  ports:
    - protocol: TCP
      port: 27017
      targetPort: mongo-port

容器退出并出现错误更改“/data/db”的所有权,输入/输出错误。

问题1)谁在试图改变容器内部目录的所有权?是光伏索赔吗?问题2)为什么上面的罪魁祸首是想弄乱Mongodb容器默认存储路径的权限?

标签: mongodbdockerkubernetes

解决方案


看起来更多的是关于外部文件夹的virtualbox驱动程序然后是k8s本身,

在我的场景中

  • 我在我的 OS X 上创建了一个文件夹,
  • 将该文件夹映射到 minikubeminikube mount data-storage/:/data-storage
  • 创建了指向 minikube 内文件夹的 PersistentVolume
  • 创建 PersistentVolumeClaim 指向上面的 PV
  • 尝试使用上面的 PVC 启动单个简单的 mongodb

并不断用日志重新启动 pod:

Fatal Assertionfsync: Invalid Argument 折腾了几个小时,终于找到了这个

https://github.com/mvertes/docker-alpine-mongo/issues/1

如果文件夹映射到主机,这基本上是报告 virtualbox 驱动程序的问题。

一旦我将 PersistentVolume 映射到/dataminikube 内部 - 我的 pod 就像一个魅力一样活跃起来。

我的情况我已经决定,因为 minikube 是开发环境,所以没有理由坚持这个

更新:

我希望我能早点发现这一点,这样可以节省我一些时间!

docker CE 桌面已经内置了 kubernetes!

您只需要转到属性并将其打开,这根本不需要在虚拟盒子或 minikube 中。

最好的事情是共享文件夹(在文件共享选项卡上) - 可用于 kubernetes - 在 k8s 内使用 mongodb 检查。而且它比 minikube 快得多(顺便说一下,在我的 OS X 上它一直在失败)。

希望它会节省一些人的时间。


推荐阅读