MongoDB Operator 篇
MongoDB Community Kubernetes Operator
介绍
MongoDB Operator 是一种 Kubernetes 上的部署工具,它通过使用 Kubernetes Operator 框架来管理 MongoDB 集群。使用 MongoDB Operator 可以在 Kubernetes 上轻松地部署、管理和维护 MongoDB 集群。MongoDB Operator 提供了以下功能:
1、部署 MongoDB 集群:MongoDB Operator 可以自动部署 MongoDB 集群,并根据需要扩展集群中的节点。
2、管理 MongoDB 集群:MongoDB Operator 可以自动化管理 MongoDB 集群中的各个节点,包括数据节点、副本集节点和分片节点。MongoDB Operator 可以确保集群的可用性和稳定性。
3、扩展 MongoDB 集群:MongoDB Operator 可以根据需要自动扩展 MongoDB 集群中的节点,以满足应用程序对数据库资源的需求。
4、数据备份和恢复:MongoDB Operator 可以自动化执行数据备份和恢复操作,以确保 MongoDB 数据库的可靠性和恢复性。
5、集群监控和警报:MongoDB Operator 可以自动监控 MongoDB 集群的各个节点,并提供警报机制来通知管理员有关问题的发现和解决方案。
使用 MongoDB Operator,开发人员和管理员可以更轻松地管理和维护 MongoDB 集群,并且可以更容易地实现自动化和可伸缩性。
部署
在 Kubernetes 上部署 MongoDB Operator 需要进行以下步骤:
1、安装 Kubernetes
MongoDB Operator 需要运行在 Kubernetes 集群上。如果您还没有安装 Kubernetes,可以根据官方文档进行安装:https://kubernetes.io/docs/setup/
2、部署 Operator
可以使用 Kubernetes 的 kubectl 命令行工具来部署 MongoDB Operator。您可以使用以下命令来下载并部署 Operator:
k create ns mongo
alias mongo='kubectl -nmongo'
alias mongodb='kubectl -nmongodb'
Helm安装
helm repo add mongodb https://mongodb.github.io/helm-charts
helm install community-operator mongodb/community-operator --namespace mongodb --create-namespace
k get ns
helm list -nmongodb
mongodb get pod
待确认
helm install community-operator mongodb/community-operator --set operator.watchNamespace="mongodb"
apply 配置文件
git clone https://github.com/mongodb/mongodb-kubernetes-operator.git
vi deploy/clusterwide/cluster_role_binding.yaml
mongodb apply -f deploy/clusterwide/
mongo apply -k config/rbac --namespace mongodb
mongodb apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
mongodb get crd |grep mongodb
mongodb apply -k config/rbac/ --namespace mongodb
mongodb get role,rolebinding,serviceaccount | grep operator
https://github.com/mongodb/mongodb-kubernetes-operator/issues
securityContext:
readOnlyRootFilesystem: true
runAsUser: 2000
allowPrivilegeEscalation: false
~~securityContext:
seccompProfile:
type: RuntimeDefault~~
docker pull quay.io/mongodb/mongodb-kubernetes-operator:0.7.8
mongodb get pod
Install and Upgrade the Community Kubernetes Operator
3、部署 MongoDB 资源
在成功部署 MongoDB Operator 后,可以使用 Kubernetes 的 YAML 文件来部署 MongoDB 资源。MongoDB Operator 支持部署 MongoDB 副本集和分片集群。以下是一个 MongoDB 副本集的 YAML 文件示例:
mongodb apply -f config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml
mongodb describe mongodbcommunity
mongodb describe pod example-mongodb-0
mongodb describe pvc
no persistent volumes available for this claim and no storage class is set
没有 STORAGECLASS
The PersistentVolumeClaim “logs-volume-example-mongodb-0” is invalid: spec: Forbidden: is immutable after creation except resources.requests for bound claims
这个错误提示意味着你正在尝试修改一个已经创建的 PVC(Persistent Volume Claim)的 spec 字段中的某些字段,这是不允许的。
在 Kubernetes 中,一旦 PVC 被创建并绑定到了某个 PV(Persistent Volume),它的一些字段就会变为不可变的,包括 accessModes、storageClassName、volumeMode 和 dataSource。如果你尝试修改这些字段中的任何一个,就会出现类似于 spec: Forbidden: is immutable after creation 的错误。
不过,resources.requests 字段是一个例外,因为它可以在 PVC 被绑定后进行修改。这个字段定义了 PVC 所请求的存储资源大小。如果 PVC 已经被绑定到 PV,你仍然可以通过修改 resources.requests.storage 字段来增加或减少 PVC 所请求的存储大小。
waiting for first consumer to be created before binding
这个消息表示 Kubernetes 正在等待第一个 Pod 通过 PVC(Persistent Volume Claim)来请求绑定到 PV(Persistent Volume),然后将它们绑定在一起。在 Kubernetes 中,PVC 和 PV 是分别定义的,并且在绑定之前它们之间并没有任何联系。
当你创建一个 PVC 时,Kubernetes 会自动为它寻找一个符合要求的 PV,并将它们绑定在一起。但是,在 PVC 和 PV 的绑定之前,Kubernetes 并不会创建 PV。相反,它会等待第一个请求来绑定它们。这是因为 Kubernetes 希望能够有效地利用可用的存储资源,只有在确实有 Pod 需要使用存储资源时才会创建它们。
因此,当你看到 waiting for first consumer to be created before binding 消息时,这意味着你已经创建了一个 PVC,但是还没有任何 Pod 请求绑定它。如果你的 Pod 依赖于该 PVC,请确保它们已经被正确地配置来使用该 PVC。一旦有 Pod 请求绑定该 PVC,Kubernetes 就会创建相应的 PV,并将它们绑定在一起。
apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: example-mongodb
spec:
members: 3
以上 YAML 文件将创建一个名为 example-mongodb 的 MongoDB 副本集,该副本集将包含 3 个成员。
4、应用 YAML 文件:可以使用以下命令将上述 YAML 文件应用到 Kubernetes 集群中:
kubectl apply -f <YAML文件名>
5、检查状态:可以使用以下命令检查 MongoDB 副本集的状态:
kubectl get mongodb example-mongodb
以上步骤可以让您在 Kubernetes 上轻松部署 MongoDB Operator 并创建 MongoDB 资源。需要注意的是,这里提供的部署方式只是其中一种方式,如果您有其他部署方式,也可以根据实际情况进行部署。