(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【MongoDB】Kubernetesの別PodからリモートのMongoDBを操作する

スポンサーリンク

やりたいこと

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のイメージを利用しましたが、起動を軽くしたい場合は最低限のイメージをベースに用意することも可能です。
以上、ご参考になれば幸いです。