• Stars
    star
    320
  • Rank 126,172 (Top 3 %)
  • Language
    Dockerfile
  • License
    Other
  • Created almost 6 years ago
  • Updated 25 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MongoDB Enterprise Kubernetes Operator

MongoDB Enterprise Kubernetes Operator

Welcome to the MongoDB Enterprise Kubernetes Operator. The Operator enables easy deploy of the following applications into Kubernetes clusters:

  • MongoDB - Replica Sets, Sharded Clusters and Standalones - with authentication, TLS and many more options.
  • Ops Manager - our enterprise management, monitoring and backup platform for MongoDB. The Operator can install and manage Ops Manager in Kubernetes for you. Ops Manager can manage MongoDB instances both inside and outside Kubernetes.

The Operator requires access to one of our database management tools - Ops Manager or Cloud Manager - to deploy MongoDB instances. You may run Ops Manager either inside or outside Kubernetes, or may use Cloud Manager (cloud.mongodb.com) instead.

This is an Enterprise product, available under the Enterprise Advanced license. We also have a Community Operator.

Support, Feature Requests and Community

The Enterprise Operator is supported by the MongoDB Support Team. If you need help, please file a support ticket. If you have a feature request, you can make one on our Feedback Site

You can discuss this integration in our new Community Forum - please use the tag kubernetes-operator

Videos

Here are some talks from MongoDB Live 2020 about the Operator:

Documentation

Install Kubernetes Operator

Deploy MongoDB

Deploy Ops Manager

MongoDB Resource Specification

Ops Manager Resource Specification

Troubleshooting Kubernetes Operator

Known Issues for Kubernetes Operator

Requirements

Please refer to the Installation Instructions to see which Kubernetes and Openshift versions the Operator is compatible with

To work with MongoDB resource this Operator requires Ops Manager (Ops Manager can be installed into the same Kubernetes cluster by the Operator or installed outside of the cluster manually) or Cloud Manager.

If this is your first time trying the Operator, Cloud Manager is easier to get started. Log in, and create 'Cloud Manager' Organizations and Projects to use with the Operator.

Installation

Create Kubernetes Namespace

The Mongodb Enterprise Operator is installed, into the mongodb namespace by default, but this namespace is not created automatically. To create this namespace you should execute:

kubectl create namespace mongodb

To use a different namespace, update the yaml files' metadata.namespace attribute to point to your preferred namespace. If using helm you need to override the namespace attribute with --set namespace=<..> during helm installation.

Installation using yaml files

Create CustomResourceDefinitions

CustomResourceDefinitions (or CRDs) are Kubernetes Objects which can be used to instruct the Operators to perform operations on your Kubernetes cluster. Our CRDs control MongoDB and Ops Manager deployments. They should be installed before installing the Operator. CRDs are defined cluster-wide, so to install them, you must have Cluster-level access. However, once the CRDs are installed, MongoDB instances can be deployed with namespace-level access only.

kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml

Operator Installation

In order to install the Operator in OpenShift, please follow these instructions instead.

To install the Operator using yaml files, you may apply the config directly from github;

kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise.yaml

or can clone this repo, make any edits you need, and apply it from disk:

kubectl apply -f mongodb-enterprise.yaml

Installation using the Helm Chart

MongoDB's official Helm Charts are hosted at https://github.com/mongodb/helm-charts

MongoDB Resource

This section describes how to deploy MongoDB instances. This requires a working Ops or Cloud Manager installation. See below for instructions on how to configure Ops Manager.

Adding Ops Manager Credentials

For the Operator to work, you will need the following information:

  • Base URL - the URL of an Ops Manager instance (for Cloud Manager use https://cloud.mongodb.com)
  • (optional) Project Name - the name of an Ops Manager Project for MongoDB instances to be deployed into. This project will be created by the Operator if it doesn't exist. We recommend that you allow the Operator to create and manage the projects it uses. By default, the Operator will use the name of the MongoDB resource as the project name.
  • (optional) Organization ID - the ID of the Organization which the Project belongs to. By default, the Operator will create an Organization with the same name as the Project.
  • API Credentials. This can be any pair of:
    • Public and Private Programmatic API keys. They correspond to user and publicApiKey fields in the Secret storing credentials. More information about the way to create them using Ops Manager UI can be found here
    • Username and Public API key. More information about the way to create them using Ops Manager UI can be found here

Note: When creating API credentials, you must allow the Pod IP range of your Kubernetes cluster to use the credentials - otherwise, API requests from the Operator to Ops Manager will be rejected. You can get the Pod IP range of your kubernetes cluster by executing the command: kubectl cluster-info dump | grep -m 1 cluster-cidr

This is documented in greater detail in our installation guide

Projects

A Project object is a Kubernetes ConfigMap that points to an Ops Manager installation and a Project. This ConfigMap has the following structure:

$ cat my-project.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-project
  namespace: mongodb
data:
  projectName: myProjectName # this is an optional parameter
  orgId: 5b890e0feacf0b76ff3e7183 # this is an optional parameter
  baseUrl: https://my-ops-manager-or-cloud-manager-url

projectName is optional, and the value of metadata.name will be used if it is not defined. orgId is required.

Apply this file to create the new Project:

kubectl apply -f my-project.yaml

Credentials

For a user to be able to create or update objects in this Ops Manager Project they need either a Public API Key or a Programmatic API Key. These will be held by Kubernetes as a Secret object. You can create this Secret with the following command:

$ kubectl -n mongodb create secret generic my-credentials --from-literal="user=my-public-api-key" --from-literal="publicApiKey=my-private-api-key"

Creating a MongoDB Resource

A MongoDB resource in Kubernetes is a MongoDB. We are going to create a replica set to test that everything is working as expected. There is a MongoDB replica set yaml file in samples/mongodb/minimal/replica-set.yaml.

If you have a Project with the name my-project and Credentials stored in a secret called my-credentials, then after applying this file everything should be running and a new Replica Set with 3 members should soon appear in Ops Manager UI.

kubectl apply -f samples/mongodb/minimal/replica-set.yaml -n mongodb

MongoDBOpsManager Resource

This section describes how to create the Ops Manager Custom Resource in Kubernetes. Note, that this requires all the CRDs and the Operator application to be installed as described above.

Create Admin Credentials Secret

Before creating the Ops Manager resource you need to prepare the information about the admin user which will be created automatically in Ops Manager. You can use the following command to do it:

$ kubectl create secret generic ops-manager-admin-secret  --from-literal=Username="[email protected]" --from-literal=Password="Passw0rd."  --from-literal=FirstName="User" --from-literal=LastName="Name" -n <namespace>

Note, that the secret is needed only during the initialization of the Ops Manager object - you can remove it or change the password using Ops Manager UI after the Ops Manager object is created.

Create MongoDBOpsManager Resource

Use the file samples/ops-manager/ops-manager.yaml. Edit the fields and create the object in Kubernetes:

$ kubectl apply -f samples/ops-manager/ops-manager.yaml -n <namespace>

Note, that it can take up to 8 minutes to initialize the Application Database and start Ops Manager.

Accessing the Ops Manager UI using your web browser

In order to access the Ops Manager UI from outside the Kubernetes cluster, you must enable spec.externalConnectivity in the Ops Manager resource definition. The easiest approach is by configuring the LoadBalancer service type.

You will be able to fetch the URL to connect to Ops Manager UI from the Service object created by the Operator.

Removing the Operator, Databases and Ops Manager from your Kubernetes cluster

As the Operator manages MongoDB and Ops Manager resources, if you want to remove them from your Kubernetes cluster, database instances and Ops Manager must be removed before removing the Operator. Removing the Operator first, or deleting the namespace will cause delays or stall the removal process of MongoDB objects, requiring manual intervention.

Here is the correct order to completely remove the Operator and the services managed by it:

  • Remove all database clusters managed by the Operator
  • Remove Ops Manager
  • Remove the Operator
  • Remove the CRDs

Contributing

For PRs to be accepted, all contributors must sign our CLA.

Reviewers, please ensure that the CLA has been signed by referring to the contributors tool (internal link).

More Repositories

1

mongo

The MongoDB Database
C++
25,403
star
2

node-mongodb-native

The official MongoDB Node.js driver
TypeScript
9,953
star
3

mongo-go-driver

The Official Golang driver for MongoDB
Go
7,927
star
4

laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel (Moloquent)
PHP
6,932
star
5

mongo-python-driver

PyMongo - the Official MongoDB Python driver
Python
4,045
star
6

mongoid

The Official Ruby Object Mapper for MongoDB
Ruby
3,922
star
7

mongo-csharp-driver

The Official C# .NET Driver for MongoDB
C#
3,038
star
8

mongo-java-driver

The official MongoDB drivers for Java, Kotlin, and Scala
Java
2,568
star
9

motor

Motor - the async Python driver for MongoDB and Tornado or asyncio
Python
2,318
star
10

mongo-php-library

The Official MongoDB PHP library
PHP
1,568
star
11

mongo-hadoop

MongoDB Connector for Hadoop
Java
1,519
star
12

mongo-ruby-driver

The Official MongoDB Ruby Driver
Ruby
1,422
star
13

mongo-rust-driver

The official MongoDB Rust Driver
Rust
1,268
star
14

mongodb-kubernetes-operator

MongoDB Community Kubernetes Operator
Go
1,136
star
15

mongo-php-driver-legacy

Legacy MongoDB PHP driver
PHP
1,093
star
16

js-bson

BSON Parser for node and browser
TypeScript
1,085
star
17

mongo-cxx-driver

C++ Driver for MongoDB
C++
1,005
star
18

mongo-tools

Go
971
star
19

homebrew-brew

The Official MongoDB Software Homebrew Tap
Ruby
901
star
20

mongo-php-driver

The Official MongoDB PHP driver
PHP
838
star
21

mongo-c-driver

The Official MongoDB driver for C language
C
794
star
22

docs

The MongoDB Documentation Project Source.
Java
726
star
23

mongo-spark

The MongoDB Spark Connector
Java
700
star
24

casbah

Casbah is now officially end-of-life (EOL).
Scala
514
star
25

mongo-snippets

snippets of code that might be useful for your mongodb deployment
C++
381
star
26

bson-rust

Encoding and decoding support for BSON in Rust
Rust
377
star
27

specifications

Specifications related to MongoDB
Python
375
star
28

cookbook

MongoDB recipes.
Ruby
354
star
29

pymodm

A Pythonic, object-oriented interface for working with MongoDB.
Python
351
star
30

libbson

ARCHIVED - libbson has moved to https://github.com/mongodb/mongo-c-driver/tree/master/src/libbson
C
343
star
31

mongo-perf

performance tools for mongodb
JavaScript
340
star
32

mongo-swift-driver

The official MongoDB driver for Swift
Swift
325
star
33

mongo-kafka

MongoDB Kafka Connector
Java
321
star
34

mongo-scala-driver

Scala
286
star
35

mongo-efcore-provider

MongoDB Entity Framework Core Provider
C#
257
star
36

terraform-provider-mongodbatlas

Terraform MongoDB Atlas Provider: Deploy, update, and manage MongoDB Atlas infrastructure as code through HashiCorp Terraform
Go
224
star
37

leafygreen-ui

LeafyGreen UI – LeafyGreen's React UI Kit
TypeScript
206
star
38

mongodb-atlas-cli

MongoDB Atlas CLI and MongoDB CLI enable you to manage your MongoDB in the Cloud
Go
152
star
39

stitch-examples

MongoDB Stitch Examples
Java
138
star
40

mongodb-atlas-kubernetes

MongoDB Atlas Kubernetes Operator - Manage your MongoDB Atlas clusters from Kubernetes
Go
130
star
41

support-tools

For support tools to be shared publicly
Go
119
star
42

stitch-js-sdk

MongoDB Stitch JavaScript SDK
TypeScript
113
star
43

mongo-bi-connector-odbc-driver

ODBC driver for MongoDB Connector for Business Intelligence
C
106
star
44

mongo-azure

C#
103
star
45

amboy

Amboy -- A Go(lang) Job Queue Tool
Go
91
star
46

bsonspec.org

site for bsonspec.org
HTML
89
star
47

libmongocrypt

Required C library for Client Side and Queryable Encryption in MongoDB
C
87
star
48

terraform-aws-ecs-task-definition

A Terraform module for creating Amazon ECS Task Definitions
HCL
84
star
49

chatbot

MongoDB Chatbot Framework. Powered by MongoDB and Atlas Vector Search.
TypeScript
82
star
50

helm-charts

Smarty
80
star
51

go-client-mongodb-atlas

Go Client for MongoDB Atlas
Go
77
star
52

bson-ruby

Ruby Implementation of the BSON Specification (2.0.0+)
Ruby
77
star
53

docs-ecosystem

MongoDB Ecosystem Documentation
Python
76
star
54

mongo-java-driver-reactivestreams

The Java Reactive Stream driver for MongoDB
Java
73
star
55

stitch-android-sdk

MongoDB Stitch Android SDK
Java
57
star
56

mongodbatlas-cloudformation-resources

MongoDB Atlas CloudFormation Resources: Deploy, update, and manage MongoDB Atlas infrastructure as code through AWS CloudFormation
Go
54
star
57

winkerberos

A native Kerberos client implementation for Python on Windows
C
47
star
58

genny

πŸ§žβ€β™€οΈ Grants 3 wishes. As long as those wishes are to generate load πŸ§žβ€β™‚οΈ
C++
46
star
59

docs-realm

Realm Database SDK documentation
Kotlin
43
star
60

bson-numpy

This project has been superseded by PyMongoArrow - https://github.com/mongodb-labs/mongo-arrow/tree/main/bindings/python
C
43
star
61

docs-tools

Common tools and content for MongoDB documentation projects.
Python
42
star
62

stitch-ios-sdk

Swift
42
star
63

swift-bson

pure Swift BSON library
Swift
41
star
64

signal-processing-algorithms

Python
38
star
65

mongo-hhvm-driver

MongoDB HHVM driver **Note, this driver is no longer maintained**
PHP
35
star
66

mongodb-vapor

MongoDB + Vapor integration
Swift
34
star
67

atlas-billing

JavaScript
33
star
68

design

Source code for MongoDB.design, LeafyGreen's official documentation site.
TypeScript
33
star
69

awscdk-resources-mongodbatlas

MongoDB Atlas AWS CDK Resources
TypeScript
31
star
70

mongo-jdbc-driver

JDBC Driver for MongoDB Atlas SQL interface
Java
31
star
71

mongo-java-driver-rx

The MongoDB Java RX driver is now officially end-of-life (EOL)
Java
30
star
72

atlas-app-services-examples

Example use cases for Atlas App Services
JavaScript
30
star
73

snooty

MongoDB Documentation front end
JavaScript
28
star
74

charts-embedding-examples

charts-embedding-examples
HTML
23
star
75

mongo-csharp-driver-jsondotnet

The C#/.NET driver will have a new component to integrate with JSON.NET that needs to live separately from the .NET driver itself.
C#
22
star
76

realm-practice

realm-node-practice & realm-swift-practice
Swift
22
star
77

mongo-csharp-analyzer

The MongoDB Analyzer is a free tool that helps you understand how your code translates into the MongoDB Query API.
C#
22
star
78

ftdc

utils for working with mongodb full-time diagnostic data capture files
Go
20
star
79

mongo-qa

General QA materials for Mongo
Java
19
star
80

curator

Curator -- a build and package automation tool
Go
19
star
81

anser

Data Transformation/Migration Tool
Go
19
star
82

marian

A search engine focused on documentation.
JavaScript
18
star
83

snooty-parser

Python
18
star
84

template-app-react-native-todo

Atlas Template Starter App - Use Device Sync from a React Native client application. This repo is generated from source code in https://github.com/mongodb-university/realm-template-apps
TypeScript
18
star
85

terraform-provider-mongodbatlas-archive

ARCHIVED ---- Hashicorp Terraform Provider for MongoDB Atlas - please use https://github.com/terraform-providers/terraform-provider-mongodbatlas
Go
17
star
86

docs-bi-connector

Makefile
16
star
87

kbson

Kotlin Multiplatform Bson Library
Kotlin
16
star
88

docs-compass

Python
16
star
89

academia-mongodb-lab-python

Lab using MongoDB with Python (PyMongo driver). Created for educational use by the MongoDB for Academia program.
Jupyter Notebook
16
star
90

mongo-odbc-driver

Rust
15
star
91

grip

Go
15
star
92

vault-plugin-secrets-mongodbatlas

ARCHIVED - Hashicorp Vault MongoDB Atlas Secrets Engine - Now hosted at https://github.com/hashicorp/vault-plugin-secrets-mongodbatlas/
Go
15
star
93

hacktoberfest2018

Hacktoberfest Repository for MongoDB
JavaScript
14
star
94

mongodb-atlas-service-broker

Implementation of the Open Service Broker API for MongoDB Atlas. Deploy this service to easily manage Atlas instances!
Go
14
star
95

snooty-vscode

TypeScript
14
star
96

docs-worker-pool

TypeScript
13
star
97

mongo-meta-driver

Ruby
13
star
98

docs-java

MongoDB Java driver documentation
Java
13
star
99

mongo-tools-common

Go
13
star
100

jasper

Jasper is a Process Management Framework
Go
13
star