- About MogDB Stack
- Quick Start
- Installation
- Tutorial
- Architecture
- References
- Client
- mgo
- mgo create
- mgo create mgorole
- mgo create mgouser
- mgo create cluster
- mgo show
- mgo show k8s
- mgo show mgorole
- mgo show mgouser
- mgo show cluster
- mgo show restore
- mgo delete
- mgo delete mgorole
- mgo delete mgouser
- mgo delete cluster
- mgo delete backup
- mgo delete k8s
- mgo scale
- mgo scaledown
- mgo switch
- mgo update
- mgo update mgorole
- mgo update mgouser
- mgo update cluster
- mgo version
- mgo addk8s
- mgo localk8s
- mgo backup
- mgo backup detail
- mgo restore
- mgo minio
- mgo minio object
- mgo minio object ls
- mgo minio object stat
- mgo minio object getf
- Server
- Client
- FAQ
- Release Note
Prerequisites
-
Install Kustomize v3+
go install sigs.k8s.io/kustomize/kustomize/v3@v3.8.7 ~/go/bin/kustomize versionNote: Kustomize is integrated with kubectl 1.4+ by default and does not need to be installed separately.
-
Download MogDB Operator examples
First, fork the MogDB Stack examples repository on GitHub at
https://github.com/enmotech/mogdb-stack-examples/fork
After the fork repository, you can download it locally with a command like the following.
YOUR_GITHUB_UN="<your GitHub username>" git clone --depth 1 "git@github.com:${YOUR_GITHUB_UN}/mogdb-stack-examples.git" cd mogdb-stack-examplesThe MogDB Operator installation item is in the kustomize directory.
-
Installed components
-
mogdb-operator
-
mogha
-
mogdb-monitor
-
mogdb-apiserver
-
mgo-client
Where mgo-client runs under the physical machine, the rest of the components run under k8s
-
Configuration
The default Kustomize will work in most Kubernetes environments, or can be customized to meet your specific needs.
For example, the custom image path for MogDB Operator, which is in the kustomize/mogdb-operator/default/kustomization.yaml file, can be modified to:
images:
- name: controller
newName: swr.cn-north-4.myhuaweicloud.com/mogdb-cloud/mogdb-operator
newTag: v2.0.0If you need to change the namespace name, you need to change the following configuration in the kustomize/mogdb-operator/default/kustomization.yaml file.
namespace: custom-namespaceInstallation
Step 1: Install MogHA
kubectl apply -k kustomize/moghaExpected output:
namespace/mogha created
serviceaccount/mogdb-ha created
clusterrole.rbac.authorization.k8s.io/mogdb-ha-role created
clusterrolebinding.rbac.authorization.k8s.io/mogdb-ha-rolebinding created
secret/huawei-registry created
service/mogdb-ha created
deployment.apps/mogdb-ha createdCheck that the relevant component is working properly.
kubectl get pods -n moghaExpected output:
NAME READY STATUS RESTARTS AGE
mogdb-ha-5cf86cc667-r45vm 2/2 Running 0 66sWhen the Pod is in Running state, continue to the next step.
Step 2: Install MogDB Operator
kubectl apply -k kustomize/mogdb-operator/default/Expected output:
namespace/mogdb-operator-system created
customresourcedefinition.apiextensions.k8s.io/mogdbbackups.mogdb.enmotech.io configured
customresourcedefinition.apiextensions.k8s.io/mogdbclusters.mogdb.enmotech.io configured
serviceaccount/mogdb-operator-controller-manager created
role.rbac.authorization.k8s.io/mogdb-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/mogdb-operator-manager-role created
rolebinding.rbac.authorization.k8s.io/mogdb-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/mogdb-operator-manager-rolebinding created
configmap/mogdb-operator-global-config created
configmap/mogdb-operator-manager-config created
secret/mogdb-operator-huawei-registry created
deployment.apps/mogdb-operator-controller-manager createdCheck that the relevant component is working properly.
kubectl get pods -n mogdb-operator-systemExpected output:
NAME READY STATUS RESTARTS AGE
mogdb-operator-controller-manager-fcf875446-ngknd 1/1 Running 0 45sWhen the Pod is in Running state, continue to the next step.
Step 3: Install MogDB Apiserver
kubectl apply -k kustomize/mogdb-apiserver/Expected output:
namespace/mogdb-operator-system unchanged
serviceaccount/mogdb-apiserver created
clusterrole.rbac.authorization.k8s.io/mgo-cluster-role created
clusterrolebinding.rbac.authorization.k8s.io/mgo-cluster-role created
secret/mgorole-admin created
secret/mgouser-admin created
service/mogdb-apiserver created
deployment.apps/mogdb-apiserver createdCheck that the relevant components are working properly.
kubectl get pods -n mogdb-operator-systemExpected output:
NAME READY STATUS RESTARTS AGE
mogdb-apiserver-699c855d9b-zx4sm 1/1 Running 0 71s
mogdb-operator-controller-manager-fcf875446-ngknd 1/1 Running 0 18mWhen the Pod is in Running state, continue to the next step.
Step 4: Install Monitoring and Alerting
-
Change the configuration and edit kustomize/mogdb-monitor/alertmanager/alertmanager-conf.yaml
smtp_smarthost: 'smtp.163.com:25' # Alert mailbox server host smtp_from: 'xxxx@163.com' # Sender email address smtp_auth_username: 'xxxx@163.com' # User name smtp_auth_password: '<mailbox password>' # Password, the authorization code generated by enabling smtp service - name: 'email' email_configs: - to: 'xxx@qq.com' # Email address for receiving alerts, separated by commas -
Install Monitoring and Alerting component
kubectl apply -k kustomize/mogdb-monitorExpected output:
namespace/monitor created serviceaccount/kube-state-metrics created serviceaccount/prometheus created clusterrole.rbac.authorization.k8s.io/kube-state-metrics created clusterrole.rbac.authorization.k8s.io/prometheus created clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created clusterrolebinding.rbac.authorization.k8s.io/prometheus created configmap/prometheus-config created service/grafana created service/kube-state-metrics created service/node-exporter created service/prometheus created deployment.apps/grafana created deployment.apps/kube-state-metrics created deployment.apps/prometheus created daemonset.apps/node-exporter created
Check that the relevant components are working properly.
kubectl get pods -n monitorExpected output:
NAME READY STATUS RESTARTS AGE
grafana-5548d85c77-m69fc 1/1 Running 0 8s
kube-state-metrics-77f9d6d895-hw5t5 0/1 Running 0 8s
node-exporter-8j78l 1/1 Running 0 7s
node-exporter-9ctt7 1/1 Running 0 7s
node-exporter-chlg5 1/1 Running 0 7s
prometheus-645fcdf654-d956p 2/2 Running 0 7sWhen all Pods are in Running state, continue to the next step.
Step 5: Install the mgo Client
wget https://cdn-mogdb.enmotech.com/mogdb-stack/v2.0.0/client-setup.sh
chmod +x client-setup.sh
./client-setup.shThis will download the mgo client and prompt you to add some environment variables for you to set in your session, which you can do with the following command.
export MGOUSER="${HOME?}/.mgo/mgouser"
export MGO_CA_CERT="${HOME?}/.mgo/client.crt"
export MGO_CLIENT_CERT="${HOME?}/.mgo/client.crt"
export MGO_CLIENT_KEY="${HOME?}/.mgo/client.key"
export MGO_APISERVER_URL='https://127.0.0.1:32444'
export MGO_NAMESPACE=mogdb-operator-systemIf you wish to permanently add these variables to your environment, you can run the following command.
cat <<EOF >> ~/.bashrc
export PATH="${HOME?}/.mgo:$PATH"
export MGOUSER="${HOME?}/.mgo/mgouser"
export MGO_CA_CERT="${HOME?}/.mgo/client.crt"
export MGO_CLIENT_CERT="${HOME?}/.mgo/client.crt"
export MGO_CLIENT_KEY="${HOME?}/.mgo/client.key"
export MGO_APISERVER_URL='https://127.0.0.1:32444'
export MGO_NAMESPACE=mogdb-operator-system
EOF
source ~/.bashrcNote: For macOS users, you use the file ~/.bash_profile instead of ~/.bashrc.
Step 6: Create MogDB Cluster
There are two ways to create a MogDB cluster
- Created by mgo command line
mgo create cluster cluster1Expected output:
created cluster: cluster1Check if the cluster is installed successfully
mgo show cluster cluster1Expected output:
cluster : cluster1
pod : cluster1-ib7zq (Running) on mogdb-k8s-001 (3/3) (primary)
pod : cluster1-rtwdz (Running) on mogdb-k8s-002 (3/3) (standby)
service : cluster1-svc-master - ClusterIP (10.1.149.4) - Ports (5432:30013/TCP)
service : cluster1-svc-replicas - ClusterIP (10.1.175.46) - Ports (5432:30012/TCP)As you can see, the cluster creates two standby pods, and two services.
- Created by kustomize
kubectl apply -k kustomize/mogdb-cluster/Expected output:
mogdbcluster.mogdb.enmotech.io/cluster1 createdCheck if the cluster pod was created successfully
kubectl get pods -n mogdb-operator-systemExpected output:
NAME READY STATUS RESTARTS AGE
cluster1-m4sr3 2/2 Running 0 7m13s
cluster1-nebx9 2/2 Running 0 8m8s
mogdb-operator-controller-manager-fcf875446-gmmqp 1/1 Running 0 9m9sAt this time, all cluster-related Pods have been successfully created.
Uninstall
Note.
Before uninstalling, please make sure all the MogDB clusters on your system have been deleted completely, otherwise you can't uninstall them.
Delete MogDB Cluster
kubectl delete -k kustomize/mogdb-cluster/Expected output:
mogdbcluster.mogdb.enmotech.io "cluster1" deletedCheck if all Pods are successfully deleted
kubectl get pods -n mogdb-operator-systemExpected output:
NAME READY STATUS RESTARTS AGE
mogdb-operator-controller-manager-fcf875446-gmmqp 1/1 Running 0 13mYou can see that all Pods in the cluster have been successfully deleted.
Note: There may be multiple clusters in the system, please follow this procedure to delete them one by one.
Uninstall MogHA
kubectl delete -k kustomize/moghaExpected output:
namespace "mogha" deleted
serviceaccount "mogdb-ha" deleted
clusterrole.rbac.authorization.k8s.io "mogdb-ha-role" deleted
clusterrolebinding.rbac.authorization.k8s.io "mogdb-ha-rolebinding" deleted
secret "huawei-registry" deleted
service "mogdb-ha" deleted
deployment.apps "mogdb-ha" deletedCheck if the relevant Pod was successfully deleted
kubectl get pods -n moghaExpected output:
No resources found in mogha namespace.When all related Pods have been successfully deleted, continue to the next step.
Uninstall Monitor
kubectl delete -k kustomize/mogdb-monitorExpected output:
namespace "monitor" deleted
serviceaccount "kube-state-metrics" deleted
serviceaccount "prometheus" deleted
clusterrole.rbac.authorization.k8s.io "kube-state-metrics" deleted
clusterrole.rbac.authorization.k8s.io "prometheus" deleted
clusterrolebinding.rbac.authorization.k8s.io "kube-state-metrics" deleted
clusterrolebinding.rbac.authorization.k8s.io "prometheus" deleted
configmap "alert-config" deleted
configmap "prometheus-config" deleted
service "grafana" deleted
service "kube-state-metrics" deleted
service "node-exporter" deleted
service "prometheus" deleted
deployment.apps "grafana" deleted
deployment.apps "kube-state-metrics" deleted
deployment.apps "prometheus" deleted
daemonset.apps "node-exporter" deletedCheck if all related Pods are successfully deleted
kubectl get pods -n monitorExpected output:
No resources found in monitor namespace.When all related Pods have been successfully deleted, continue to the next step.
Uninstall MogDB Apiserver
kubectl delete -k kustomize/mogdb-apiserver/Expected output:
namespace "mogdb-operator-system" deleted
serviceaccount "mogdb-apiserver" deleted
clusterrole.rbac.authorization.k8s.io "mgo-cluster-role" deleted
clusterrolebinding.rbac.authorization.k8s.io "mgo-cluster-role" deleted
secret "mgorole-admin" deleted
secret "mgouser-admin" deleted
service "mogdb-apiserver" deleted
deployment.apps "mogdb-apiserver" deletedCheck if all related Pods are successfully deleted
kubectl get pods -n mogdb-operator-systemExpected output:
NAME READY STATUS RESTARTS AGE
mogdb-operator-controller-manager-fcf875446-2d525 1/1 Running 0 28sWhen all related Pods have been successfully deleted, continue to the next step.
Uninstall MogDB Operator
kubectl delete -k kustomize/mogdb-operator/defaultExpected output:
namespace "mogdb-operator-system" deleted
customresourcedefinition.apiextensions.k8s.io "mogdbbackups.mogdb.enmotech.io" deleted
customresourcedefinition.apiextensions.k8s.io "mogdbclusters.mogdb.enmotech.io" deleted
serviceaccount "mogdb-operator-controller-manager" deleted
role.rbac.authorization.k8s.io "mogdb-operator-leader-election-role" deleted
clusterrole.rbac.authorization.k8s.io "mogdb-operator-manager-role" deleted
rolebinding.rbac.authorization.k8s.io "mogdb-operator-leader-election-rolebinding" deleted
clusterrolebinding.rbac.authorization.k8s.io "mogdb-operator-manager-rolebinding" deleted
configmap "mogdb-operator-global-config" deleted
configmap "mogdb-operator-manager-config" deleted
secret "mogdb-operator-huawei-registry" deleted
deployment.apps "mogdb-operator-controller-manager" deletedCheck if all related Pods are successfully deleted
kubectl get pods -n mogdb-operator-systemExpected output:
No resources found in mogdb-operator-system namespace.At this time, all components have been uninstalled.