首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用罗盘连接到mongodb复制集(k8s)

如何使用罗盘连接到mongodb复制集(k8s)
EN

Stack Overflow用户
提问于 2022-11-14 09:10:49
回答 4查看 194关注 0票数 3

我使用bitnami图表将mongodb安装为一个副本集,在我的k8s集群上安装了3个副本。

所以我得到了这些吊舱

代码语言:javascript
复制
mongodb-0.mongodb-headless.mongodb.svc.cluster.local:27017
mongodb-1.mongodb-headless.mongodb.svc.cluster.local:27017
mongodb-2.mongodb-headless.mongodb.svc.cluster.local:27017

现在我想使用mongodb指南针进行访问。

我将端口向前设置为27017 (在运行本地mongodb)

代码语言:javascript
复制
kubectl port-forward svc/mongodb-headless -n mongodb 27018:27017

试着把罗盘和uri连接起来

代码语言:javascript
复制
mongodb://localhost:27018

但这给了我错误

代码语言:javascript
复制
getaddrinfo ENOTFOUND mongodb-0.mongodb-headless.mongodb.svc.cluster.local

使用指南针连接到我的k8s集群mongodb有什么错误?

更新

代码语言:javascript
复制
% kubectl get all -n mongodb

NAME                    READY   STATUS    RESTARTS   AGE
pod/mongodb-0           1/1     Running   0          25h
pod/mongodb-1           1/1     Running   0          25h
pod/mongodb-2           1/1     Running   0          25h
pod/mongodb-arbiter-0   1/1     Running   0          2d14h

NAME                               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
service/mongodb-arbiter-headless   ClusterIP   None         <none>        27017/TCP   2d14h
service/mongodb-headless           ClusterIP   None         <none>        27017/TCP   2d14h

NAME                               READY   AGE
statefulset.apps/mongodb           3/3     2d14h
statefulset.apps/mongodb-arbiter   1/1     2d14h

values.yaml for bitnami helm图表

代码语言:javascript
复制
image:
  registry: docker.io
  repository: bitnami/mongodb
  digest: "sha256:916202d7af766dd88c2fff63bf711162c9d708ac7a3ffccd2aa812e3f03ae209" # tag: 4.4.15
  pullPolicy: IfNotPresent
architecture: replicaset
replicaCount: 2
updateStrategy:
  type: RollingUpdate
containerPorts:
  mongodb: 27017
auth:
  enabled: true
  rootUser: root
  rootPassword: "password"
  usernames: ["user"]
  passwords: ["userpass"]
  databases: ["db"]

service:
  portName: mongodb
  ports:
    mongodb: 27017

persistence:
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 8Gi

volumePermissions:
  enabled: true

livenessProbe:
  enabled: false
readinessProbe:
  enabled: false
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-11-17 10:21:15

只是重新建立了你的设置。一切都很好

代码语言:javascript
复制
$ k create ns mongo-test
namespace/mongo-test created

$ k -n mongo-test create -f mongo-svc-sts.yaml
statefulset.apps/mongo created
service/mongo-headless created

结果

代码语言:javascript
复制
$ k -n mongo-test get all
NAME          READY   STATUS    RESTARTS   AGE
pod/mongo-0   1/1     Running   0          44s
pod/mongo-1   1/1     Running   0          40s
pod/mongo-2   1/1     Running   0          27s

NAME                     TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
service/mongo-headless   ClusterIP   None         <none>        27017/TCP   13m

NAME                     READY   AGE
statefulset.apps/mongo   3/3     45s

港前

代码语言:javascript
复制
$ k -n mongo-test port-forward svc/mongo-headless 27018:27017
Forwarding from 127.0.0.1:27018 -> 27017
Forwarding from [::1]:27018 -> 27017
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018
Handling connection for 27018

罗盘

mongo-svc-sts.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  selector:
    matchLabels:
      app.kubernetes.io/name: mongo
      app.kubernetes.io/component: backend
  template:
    metadata:
      labels:
        app.kubernetes.io/name: mongo
        app.kubernetes.io/component: backend
    spec:
      tolerations:
        - operator: Exists
      containers:
      - name: mongo
        image: mongo:latest
        args:
          - --bind_ip
          - 0.0.0.0
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 27017
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mongo
    service: logging
  name: mongo-headless
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - port: 27017
  selector:
    app.kubernetes.io/name: mongo
    app.kubernetes.io/component: backend

为了能够帮助您,请使用该YAML并发布输出。如果它不能工作,您应该调试您的k8s安装。

票数 2
EN

Stack Overflow用户

发布于 2022-11-17 10:33:39

它使用端口正向和罗盘在罗盘中的一些配置工作,使用有直接连接的高级选项:

不要添加复制设置选项。

票数 1
EN

Stack Overflow用户

发布于 2022-11-16 16:49:51

据我所知(我使用),不可能使用端口转发连接芒戈副本集与罗盘(您不能使用本地端口两次或多次.)对我来说,因为指南针使用复制集使用的拓扑。因此,您需要遵从来自客户端计算机的拓扑结构。

因此,您可以使用集群IP公开mongo,管理您的主机文件以匹配kubernetes节点。

并像在kubernetes中一样使用标准连接字符串:

更新:您可以将mongo配置为执行群集https://artifacthub.io/packages/helm/bitnami/mongodb

你还保存了文件:

external_IP1 mongodb-0.mongodb-headless.mongodb.svc.cluster.local

external_IP2 mongodb-1.mongodb-headless.mongodb.svc.cluster.local

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74429226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档