6

I am creating a MongoDB cluster on Kubernetes using Stateful sets. I have 3 mongo replicas configured in my Stateful set.

Now I create Stateful set and service using just one command

kubectl create -f mongo-stateful.yaml

Then I use the mongo client to initiate mongo replica set members.

rs.initiate(
   {
      _id: "replicaset1",
      version: 1,
      members: [
         { _id: 0, host:port1 },
         { _id: 1, host : host:port1 },
         { _id: 2, host : host:port1  }
      ]
   }
)

All of this works except I would like to automate this step of configuring replica set members.

My questions is whether this step can be automated and if we can add this to the yaml file?

Slava Semushin
  • 14,904
  • 7
  • 53
  • 69
Jyothi
  • 71
  • 1
  • 3
  • 1
    You can add it to the yaml file using env variables. You could also look into services so that your host:port becomes a kubernetes internal DNS address – Norbert Jan 25 '17 at 21:48

2 Answers2

2

This might be what you're looking for:

http://blog.kubernetes.io/2017/01/running-mongodb-on-kubernetes-with-statefulsets.html

tzik
  • 963
  • 10
  • 10
0

Yes, it is possible, you have several choices:

  1. Use the sidecar approach as specified by @tzik, then you don't need to do much in your code
  2. Use the kubernetes lifecycle.postInstall feature to implement the clustering on your own (this is a bit tricky, because postInstall runs on each statefulset member)
  3. Use if you decide to use helm to manage your k8s deployments, then you can use helm post-install hooks to initiate your mongodb cluster.
BostonHiker
  • 281
  • 4
  • 7