You are looking at the documentation of a prior release. To read the documentation of the latest release, please
visit here.
We use cookies and other similar technology to collect data to improve your experience on our site, as described in our Privacy Policy.
Run Production-Grade Databases on Kubernetes
Backup and Recovery Solution for Kubernetes
Run Production-Grade Vault on Kubernetes
Secure HAProxy Ingress Controller for Kubernetes
Kubernetes Configuration Syncer
Kubernetes Authentication WebHook Server
KubeDB simplifies Provision, Upgrade, Scaling, Volume Expansion, Monitor, Backup, Restore for various Databases in Kubernetes on any Public & Private Cloud
A complete Kubernetes native disaster recovery solution for backup and restore your volumes and databases in Kubernetes on any public and private clouds.
KubeVault is a Git-Ops ready, production-grade solution for deploying and configuring Hashicorp's Vault on Kubernetes.
Secure HAProxy Ingress Controller for Kubernetes
Kubernetes Configuration Syncer
Kubernetes Authentication WebHook Server
New to KubeDB? Please start here.
KubeDB supports providing custom configuration for MongoDB via PodTemplate. This tutorial will show you how to use KubeDB to run a MongoDB database with custom configuration using PodTemplate.
At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using kind.
Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps here.
To keep things isolated, this tutorial uses a separate namespace called demo
throughout this tutorial.
$ kubectl create ns demo
namespace/demo created
Note: YAML files used in this tutorial are stored in docs/examples/mongodb folder in GitHub repository kubedb/docs.
KubeDB allows providing a template for database pod through spec.podTemplate
. KubeDB operator will pass the information provided in spec.podTemplate
to the StatefulSet created for MongoDB database.
KubeDB accept following fields to set in spec.podTemplate:
Read about the fields in details in PodTemplate concept,
Below is the YAML for the MongoDB created in this example. Here, spec.podTemplate.spec.env
specifies environment variables and spec.podTemplate.spec.args
provides extra arguments for MongoDB Docker Image.
In this tutorial, maxIncomingConnections
is set to 100
(default, 65536) through args --maxConns=100
.
apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
name: mgo-misc-config
namespace: demo
spec:
version: "4.2.3"
storageType: "Durable"
storage:
storageClassName: "standard"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
podTemplate:
spec:
args:
- --maxConns=100
resources:
requests:
memory: "1Gi"
cpu: "250m"
terminationPolicy: Halt
$ kubectl create -f https://github.com/kubedb/docs/raw/v2021.08.23/docs/examples/mongodb/configuration/mgo-misc-config.yaml
mongodb.kubedb.com/mgo-misc-config created
Now, wait a few minutes. KubeDB operator will create necessary PVC, statefulset, services, secret etc. If everything goes well, we will see that a pod with the name mgo-misc-config-0
has been created.
Check that the statefulset’s pod is running
$ kubectl get pod -n demo
NAME READY STATUS RESTARTS AGE
mgo-misc-config-0 1/1 Running 0 14m
Now, check if the database has started with the custom configuration we have provided.
Now, you can connect to this database through mongo-shell. In this tutorial, we are connecting to the MongoDB server from inside the pod.
$ kubectl get secrets -n demo mgo-misc-config-auth -o jsonpath='{.data.\username}' | base64 -d
root
$ kubectl get secrets -n demo mgo-misc-config-auth -o jsonpath='{.data.\password}' | base64 -d
zyp5hDfRlVOWOyk9
$ kubectl exec -it mgo-misc-config-0 -n demo sh
> mongo admin
> db.auth("root","zyp5hDfRlVOWOyk9")
1
> db._adminCommand( {getCmdLineOpts: 1})
{
"argv" : [
"mongod",
"--dbpath=/data/db",
"--auth",
"--ipv6",
"--bind_ip_all",
"--port=27017",
"--tlsMode=disabled",
"--config=/data/configdb/mongod.conf"
],
"parsed" : {
"config" : "/data/configdb/mongod.conf",
"net" : {
"bindIp" : "*",
"ipv6" : true,
"maxIncomingConnections" : 100,
"port" : 27017,
"tls" : {
"mode" : "disabled"
}
},
"security" : {
"authorization" : "enabled"
},
"storage" : {
"dbPath" : "/data/db"
}
},
"ok" : 1
}
> exit
bye
You can see the maximum connection is set to 100
in parsed.net.maxIncomingConnections
.
To cleanup the Kubernetes resources created by this tutorial, run:
kubectl patch -n demo mg/mgo-misc-config -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
kubectl delete -n demo mg/mgo-misc-config
kubectl delete ns demo
If you would like to uninstall KubeDB operator, please follow the steps here.