谁能指出如何使用mongo客户端(使用命令行客户端)或具有连接字符串的.net核心程序连接到mongo数据库实例?
我们已经在digitalocean中创建了一个带有名称空间的示例集群,比如 mongodatabase 。
我们安装了具有3个副本的mongo statefulset。我们能够使用以下命令成功连接 kubectl --kubeconfig = configfile.yaml -n mongodatabase exec -ti mongo-0 mongo 但是,当我们从其他名称空间或默认名称空间以以下格式的Pod名称进行连接时,它将无法正常工作。
error[E0191]: the value of the associated type `artifacts` (from the trait `Artifact::Artifact`) must be specified
--> src/Artifact.rs:4:30
|
4 | type artifacts = Vec<Box<dyn Artifact>>;
| -------------------------^^^^^^^^^^^^---
| | |
| | associated type `artifacts` must be specified
| `artifacts` defined here
其中 mongo-0.mongo.mongodatabase.cluster.svc.local 位于 pod-0.service_name.namespace.cluster.svc.local 中(也尝试过pod -0.statfulset_name.namespace.cluster.svc.local和pod-0.service_name.statefulsetname.namespace.cluster.svc.local)等,
在通过命令行与mongo客户端连接以及从java / .net core等程序连接时,可以使用正确的dns名称/连接字符串的任何人吗?
我们还应该在这里使用kubernetes部署而不是statefulsets吗?
答案 0 :(得分:1)
您需要按命名空间dns引用mongo服务。因此,如果您的mongo服务是mymongoapp且已部署在mymongonamespace中,则您应该能够将其作为mymongoapp.mymongonamespace进行访问。
为了测试,我使用了bitnami / mongodb泊坞窗客户端。如下:
在mymongonamespace中,此命令有效
$ kubectl config set-context --current --namespace=mymongonamespace
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp
但是当我切换到默认名称空间时,它不起作用
$ kubectl config set-context --current --namespace=default
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp
然后使用名称空间对主机进行验证
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp.mymongonamespace
答案 1 :(得分:0)
这就是进入mongo-0吊舱的方法
kubectl --kubeconfig=configfile.yaml exec -ti mongo-0 sh
答案 2 :(得分:0)
我认为您正在寻找这个DNS for Services and Pods。
您可以为Services
或Pod
拥有完全限定的域名(FQDN)。
也请看看这个kubernetes: Service located in another namespace,因为我认为它将为您提供有关如何从不同名称空间访问它的答案。
示例如下:
apiVersion: v1
kind: Service
metadata:
name: default-subdomain
spec:
selector:
name: busybox
clusterIP: None
ports:
- name: foo # Actually, no port is needed.
port: 1234
targetPort: 1234
---
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: default-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
---
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
name: busybox
spec:
hostname: busybox-2
subdomain: default-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
如果在与Pod相同的名称空间中存在无头服务,并且与子域具有相同的名称,则群集的KubeDNS服务器还将为Pod的全限定主机名返回A记录。例如,给定一个Pod,该Pod的主机名设置为“
busybox-1
”,子域设置为“default-subdomain
”,并且在同一名称空间中使用名为“default-subdomain
”的无头服务,该Pod将其自己的FQDN视为“busybox-1.default-subdomain.my-namespace.svc.cluster.local
”。 DNS以该名称提供A记录,指向Pod的IP。 “busybox1
”和“busybox2
”两个窗格可以有各自不同的A记录。Endpoints对象可以为任何端点地址及其IP指定
hostname
。注意:由于未为Pod名称创建A记录,因此创建Pod的A记录需要
hostname
。没有hostname
但带有subdomain
的Pod只会创建无头服务(default-subdomain.my-namespace.svc.cluster.local
)的A记录,指向Pod的IP地址。另外,除非在服务上设置了publishNotReadyAddresses=True
,否则Pod需要准备好进行记录。
答案 3 :(得分:0)
关于部署vs状态集的问题应该是一个不同的问题。但是答案是,当您需要“稳定的持久性存储” kubernetes.io时使用StatefulSet。
在同一页面上,“稳定是Pod(重新)计划的持久性的同义词”。因此,基本上,您的mongo实例由PeristentVolume支持,并且您希望在重新安排Pod之后重新附加卷。