やりたいこと
MondoDBへの操作を別のホストから行う。
具体的には以下のようにDBの実体がいるホストとは別のホストにmongo関連コマンドを入れ、操作を行う。
+---------+ +---------+ | Mongo +<----+/bin/mongo | DB | | | +---------+ +---------+
環境情報
- MongoDB v4.4.1
事前準備
Docker環境でハンズオン環境を用意する。以下がDBの実体を用意するホスト
$ kubectl run --image=mongo mongodep1 deployment.apps/mongodep1 created
以下がDBを操作するホスト
$ kubectl run --image=mongo mongodep2 deployment.apps/mongodep2 created
以下でホスト名で操作できるようにサービス公開を行い
$ kubectl expose deploy/mongodep1 --type=ClusterIP --port=27017 --target-port=27017
以下のようにIPと名前が割り当てられたとする。
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongodep1 ClusterIP 10.110.63.93 <none> 27017/TCP Xs
以下はそれぞれのPod情報
mongodep1-b49d59d5-kd7js 1/1 Running 0 97s mongodep2-597665bb5-njtnh 1/1 Running 0 93s
別のホストから操作する
今回はdep1の中にあるDBをdep2から操作を行うため、dep2にログイン。
$ kubectl exec -it mongodep2-597665bb5-njtnh bash #
ローカルにもMongoDBが入っているが
# mongo MongoDB shell version v4.4.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb ...
--host
でIPを指定することで操作ができる。もちろんホスト名でも可能。
# mongo --port 27017 --host 10.110.63.93 MongoDB shell version v4.4.1 connecting to: mongodb://10.110.63.93:27017/?compressors=disabled&gssapiServiceName=mongodb ...
試しにリモート側のDBに新しいドキュメントを作成して
> use test switched to db test > db.user.insert({name:'taro', age:15}); WriteResult({ "nInserted" : 1 }) > exit bye
リモートのバックアップをローカルに取ると
# mongodump --port 27017 --host 10.110.63.93 --out /tmp ... writing admin.system.version to /tmp/admin/system.version.bson ... done dumping admin.system.version (1 document) ... writing test.user to /tmp/test/user.bson ... done dumping test.user (1 document)
リモートのバックアップが格納されている。
# ls /tmp/ admin mongodb-27017.sock test
終わりに
今回は簡易的にrepo.mongodb.org
のイメージを利用しましたが、起動を軽くしたい場合は最低限のイメージをベースに用意することも可能です。
以上、ご参考になれば幸いです。