Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用持久卷运行mongo会引发错误-Kubernetes 上下文_Mongodb_Kubernetes - Fatal编程技术网

Mongodb 使用持久卷运行mongo会引发错误-Kubernetes 上下文

Mongodb 使用持久卷运行mongo会引发错误-Kubernetes 上下文,mongodb,kubernetes,Mongodb,Kubernetes,我想创建一个mongodb有状态部署,它共享我主机的本地目录/mnt/nfs/data/myproject/production/permastore/mogno(网络文件系统目录),所有mongodb播客位于/data/db。我正在三台虚拟机上运行kubernetes群集 问题 当我不使用持久卷声明时,我可以毫无问题地启动mongo!但是,当我用持久卷声明启动mongodb时,我得到了这个错误 Error: couldn't connect to server 127.0.0.1:27017,

我想创建一个mongodb有状态部署,它共享我主机的本地目录
/mnt/nfs/data/myproject/production/permastore/mogno
(网络文件系统目录),所有mongodb播客位于
/data/db
。我正在三台虚拟机上运行kubernetes群集

问题 当我不使用持久卷声明时,我可以毫无问题地启动mongo!但是,当我用持久卷声明启动mongodb时,我得到了这个错误

Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
问题: 有人知道当
/data/db
使用持久卷挂载时,mongo为什么无法启动吗?如何修复它

代码 由于路径不同,下面的配置文件将无法在您的环境中工作。不过,您应该能够了解我的设置背后的想法

持续卷
pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: phenex-mongo
  labels:
    type: local
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /mnt/nfs/data/phenex/production/permastore/mongo
  claimRef:
    name: phenex-mongo
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  volumeMode: Filesystem
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: phenex-mongo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo
  labels:
    run: mongo
spec:
  selector:
    matchLabels:
      run: mongo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        run: mongo
    spec:
      containers:
      - image: mongo:4.2.0-bionic
        name: mongo
        ports:
        - containerPort: 27017
          name: mongo
         volumeMounts:
         - name: phenex-mongo
           mountPath: /data/db
       volumes:
       - name: phenex-mongo
         persistentVolumeClaim:
           claimName: phenex-mongo
持久性批量索赔
pvc.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: phenex-mongo
  labels:
    type: local
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /mnt/nfs/data/phenex/production/permastore/mongo
  claimRef:
    name: phenex-mongo
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  volumeMode: Filesystem
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: phenex-mongo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo
  labels:
    run: mongo
spec:
  selector:
    matchLabels:
      run: mongo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        run: mongo
    spec:
      containers:
      - image: mongo:4.2.0-bionic
        name: mongo
        ports:
        - containerPort: 27017
          name: mongo
         volumeMounts:
         - name: phenex-mongo
           mountPath: /data/db
       volumes:
       - name: phenex-mongo
         persistentVolumeClaim:
           claimName: phenex-mongo
部署
部署.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: phenex-mongo
  labels:
    type: local
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /mnt/nfs/data/phenex/production/permastore/mongo
  claimRef:
    name: phenex-mongo
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  volumeMode: Filesystem
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: phenex-mongo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo
  labels:
    run: mongo
spec:
  selector:
    matchLabels:
      run: mongo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        run: mongo
    spec:
      containers:
      - image: mongo:4.2.0-bionic
        name: mongo
        ports:
        - containerPort: 27017
          name: mongo
         volumeMounts:
         - name: phenex-mongo
           mountPath: /data/db
       volumes:
       - name: phenex-mongo
         persistentVolumeClaim:
           claimName: phenex-mongo
应用配置

$kubectl应用-f pv.yaml
$kubectl适用-f件yaml
$kubectl apply-f deployment.yaml
检查群集状态

$kubectl get deploy、po、pv、pvc--output=wide
名称就绪最新可用年龄容器图像选择器
deployment.extensions/mongo 1/1 38m mongo mongo:4.2.0-bionic run=mongo
名称就绪状态重新启动老化IP节点指定节点就绪门
pod/mongo-59f669657d-fpkgv 1/1运行0 35m 10.44.0.2 web01
名称容量访问模式回收策略状态声明存储类原因年龄VOLUMEMODE
persistentvolume/phenex mongo 1Gi RWO保留绑定phenex/phenex mongo手动124m文件系统
名称状态卷容量访问模式STORAGECLASS年龄VOLUMEMODE
persistentvolumeclaim/phenex mongo绑定phenex mongo 1Gi RWO manual 122m文件系统
运行mongo pod

$kubectl exec-it mongo-59f669657d-fpkgv mongo
MongoDB外壳版本4.2.0
连接到:mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
2019-08-14T14:25:25.452+0000 E QUERY[js]错误:无法连接到服务器127.0.0.1:27017,连接尝试失败:SocketException:连接到127.0.0.1:27017时出错::原因::连接被拒绝:
connect@src/mongo/shell/mongo.js:341:17
@(连接):2:6
2019-08-14T14:25:25.453+0000 F-[main]异常:连接失败
2019-08-14T14:25:25.453+0000 E-[main]以代码1退出
命令终止,退出代码为1
日志

$kubectl日志mongo-59f669657d-fpkgv
2019-08-14T14:00:32.287+0000 I控制[main]自动禁用TLS 1.0,强制启用TLS 1.0指定--sslDisabledProtocols'none'
2019-08-14T14:00:32.291+0000 I控制[initandlisten]MongoDB启动:pid=1端口=27017 dbpath=/data/db 64位主机=mongo-59f669657d-fpkgv
2019-08-14T14:00:32.291+0000 I控制[initandlisten]db版本v4.2.0
2019-08-14T14:00:32.291+0000 I控制[initandlisten]git版本:a4b751dcf51dd249c5865812b390cfd1c0129c30
2019-08-14T14:00:32.291+0000 I控制[initandlisten]OpenSSL版本:OpenSSL 1.1.1 2018年9月11日
2019-08-14T14:00:32.291+0000 I控制[initandlisten]分配器:tcmalloc
2019-08-14T14:00:32.291+0000 I控制[initandlisten]模块:无
2019-08-14T14:00:32.291+0000 I控制[initandlisten]生成环境:
2019-08-14T14:00:32.291+0000 I控制[initandlisten]distmod:ubuntu1804
2019-08-14T14:00:32.291+0000 I控制[initandlisten]搜索:x86_64
2019-08-14T14:00:32.291+0000 I控制[initandlisten]目标:x86
2019-08-14T14:00:32.291+0000 I控制[initandlisten]选项:{net:{bindIp:'*“}
root@mongo-59f669657d fpkgv:/#ps辅助
用户PID%CPU%MEM VSZ RSS TTY STAT STAT STAT TIME命令
mongodb 1 0.0 2.7 208324 27920?Dsl 14:00 0:00 mongod--绑定所有ip
根67 0.0 0.2 18496 2060 pts/1 Ss 15:12 0:00 bash
根81 0.0 0.1 34388 1536分/1 R+15:13 0:00 ps辅助

我找到了原因和解决办法!在我的设置中,我使用在网络上共享一个目录。这样,我的所有集群节点(仆从)都可以访问位于
/mnt/nfs/data/
的公共目录

原因
mongo
无法启动的原因是无效。也就是说,我使用的是持久卷主机路径类型-这将适用于单节点测试,或者如果您在所有集群节点上手动创建目录结构,例如
/tmp/your_pod\u data_dir/
。但是,如果您尝试将nfs目录装载为主机路径,它将导致问题-就像我所做的那样

解决方案 对于通过网络文件系统共享的目录使用NFS持久卷类型()!下面您将看到我的设置和两个解决方案

安装程序 /etc/hosts-我的群集节点

#群集节点
192.168.123.130主机
192.168.123.131 web01
192.168.123.132计算机01
192.168.123.133计算机02
导出的NFS目录列表

[vagrant@master]$showmount-e
主机的导出列表:
/nfs/数据计算*,web*
/nfs/www计算*,web*
第一种解决方案 此解决方案显示了通过装载nfs目录的部署-请查看
卷数
部分

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo
  labels:
    run: mongo
spec:
  selector:
    matchLabels:
      run: mongo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        run: mongo
    spec:
      containers:
      - image: mongo:4.2.0-bionic
        name: mongo
        ports:
        - containerPort: 27017
          name: mongo
        volumeMounts:
        - name: phenex-nfs
          mountPath: /data/db
      volumes:
      - name: phenex-nfs
        nfs:
          # IP of master node
          server: 192.168.123.130
          path: /nfs/data/phenex/production/permastore/mongo
第二种解决方案 此解决方案显示了通过卷声明装载nfs目录的部署