# Operator 安装与示例使用 本文档提供 Strimzi Operator 与 MongoDB Community Operator 的两种安装方式: - Helm 安装 - kubectl 安装 > 示例资源文件位于 `deploy/example`,默认使用 `juwan` 命名空间。 > 请先确保你的 Operator 能 watch 到 `juwan`,否则请改 namespace 或调整 Operator watch 范围。 ## 1) Strimzi Operator(Kafka) ### 1.1 使用 Helm 安装 ```bash kubectl create namespace kafka helm repo add strimzi https://strimzi.io/charts/ helm repo update helm install strimzi-kafka-operator strimzi/strimzi-kafka-operator -n kafka ``` ### 1.2 使用 kubectl 安装 ```bash kubectl create namespace kafka kubectl apply -f https://strimzi.io/install/latest?namespace=kafka -n kafka ``` ### 1.3 安装验证 ```bash kubectl get pods -n kafka kubectl get crd | grep kafka.strimzi.io ``` ### 1.4 应用 Kafka 示例 ```bash kubectl create namespace juwan kubectl apply -f deploy/example/kafka-strimzi-example.yaml kubectl get kafka,kafkatopic,kafkauser -n juwan ``` ## 2) MongoDB Community Operator ### 2.1 使用 Helm 安装 ```bash kubectl create namespace mongodb helm repo add mongodb https://mongodb.github.io/helm-charts helm repo update helm install mongodb-kubernetes-operator mongodb/community-operator -n mongodb ``` ### 2.2 使用 kubectl 安装 ```bash kubectl create namespace mongodb kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes-operator/master/config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml kubectl apply -k https://github.com/mongodb/mongodb-kubernetes-operator/config/rbac/ kubectl apply -k https://github.com/mongodb/mongodb-kubernetes-operator/config/manager/ ``` ### 2.3 安装验证 ```bash kubectl get pods -n mongodb kubectl get crd | grep mongodbcommunity.mongodb.com ``` ### 2.4 应用 MongoDB 示例 ```bash kubectl create namespace juwan kubectl apply -f deploy/example/mongodb-community-example.yaml kubectl get mongodbcommunity -n juwan ``` ## 3) MongoDB:哨兵集群与分片集群搭建 ### 3.1 关于“哨兵集群”的说明 MongoDB 没有 Redis Sentinel 的独立哨兵组件。 MongoDB 的高可用由 **Replica Set(副本集)** 原生完成(自动主从切换、故障恢复)。 因此在 MongoDB 场景里,“哨兵集群”通常对应为“副本集高可用集群”。 ### 3.2 MongoDB“哨兵等价”方案:副本集高可用 本仓库提供了高可用副本集 YAML:`deploy/example/mongodb-ha-replicaset-example.yaml`。 ```bash kubectl create namespace juwan kubectl apply -f deploy/example/mongodb-ha-replicaset-example.yaml kubectl get mongodbcommunity -n juwan ``` 查看副本集状态(任选一个 Pod 进入): ```bash kubectl get pods -n juwan kubectl exec -it -n juwan -- mongosh --eval "rs.status()" ``` 生产建议: - 成员数保持奇数(3/5/7) - 使用持久化卷(PVC),不要用临时盘 - 跨可用区调度(反亲和) - 开启备份与监控 ### 3.3 MongoDB 分片集群架构(Sharded Cluster) 分片集群由三层组成: - Config Server ReplicaSet(保存分片元数据,建议 3 节点) - Shard ReplicaSet(每个分片都是副本集,建议每分片 3 节点) - Mongos(路由层,对业务暴露统一入口) ### 3.4 分片集群搭建步骤(kubectl 方式) > 说明:MongoDB Community Operator 主要用于副本集管理。分片集群在社区实践中通常采用“手动编排(StatefulSet/Service)+ mongosh 初始化”。 本仓库提供了分片集群基础编排 YAML:`deploy/example/mongodb-sharded-cluster-example.yaml`。 ```bash kubectl create namespace juwan kubectl apply -f deploy/example/mongodb-sharded-cluster-example.yaml kubectl get pods,svc -n juwan ``` 1) 部署 Config Server 副本集(3 节点) - 使用 StatefulSet + Headless Service 部署 `mongod --configsvr --replSet cfg-rs` 1) 部署 Shard 副本集(例如 `shard1-rs`、`shard2-rs`,每个 3 节点) - 使用 StatefulSet + Headless Service 部署 `mongod --shardsvr --replSet ` 1) 部署 Mongos 路由层 - Deployment 部署 `mongos --configdb cfg-rs/:27019,:27019,:27019` 1) 初始化各副本集 ```bash # 初始化 Config Server RS kubectl exec -it -n juwan -- mongosh --port 27019 --eval 'rs.initiate({_id:"cfg-rs",configsvr:true,members:[{_id:0,host:"cfg-0.cfg-svc.juwan.svc.cluster.local:27019"},{_id:1,host:"cfg-1.cfg-svc.juwan.svc.cluster.local:27019"},{_id:2,host:"cfg-2.cfg-svc.juwan.svc.cluster.local:27019"}]})' # 初始化 shard1 RS kubectl exec -it -n juwan -- mongosh --port 27018 --eval 'rs.initiate({_id:"shard1-rs",members:[{_id:0,host:"shard1-0.shard1-svc.juwan.svc.cluster.local:27018"},{_id:1,host:"shard1-1.shard1-svc.juwan.svc.cluster.local:27018"},{_id:2,host:"shard1-2.shard1-svc.juwan.svc.cluster.local:27018"}]})' # 初始化 shard2 RS kubectl exec -it -n juwan -- mongosh --port 27018 --eval 'rs.initiate({_id:"shard2-rs",members:[{_id:0,host:"shard2-0.shard2-svc.juwan.svc.cluster.local:27018"},{_id:1,host:"shard2-1.shard2-svc.juwan.svc.cluster.local:27018"},{_id:2,host:"shard2-2.shard2-svc.juwan.svc.cluster.local:27018"}]})' ``` 1) 通过 Mongos 注册分片并启用分片 ```bash kubectl exec -it -n juwan -- mongosh --port 27017 --eval 'sh.addShard("shard1-rs/shard1-0.shard1-svc.juwan.svc.cluster.local:27018,shard1-1.shard1-svc.juwan.svc.cluster.local:27018,shard1-2.shard1-svc.juwan.svc.cluster.local:27018")' kubectl exec -it -n juwan -- mongosh --port 27017 --eval 'sh.addShard("shard2-rs/shard2-0.shard2-svc.juwan.svc.cluster.local:27018,shard2-1.shard2-svc.juwan.svc.cluster.local:27018,shard2-2.shard2-svc.juwan.svc.cluster.local:27018")' kubectl exec -it -n juwan -- mongosh --port 27017 --eval 'sh.enableSharding("appdb")' kubectl exec -it -n juwan -- mongosh --port 27017 --eval 'sh.shardCollection("appdb.user_events", {"userId": "hashed"})' ``` 1) 验证分片状态 ```bash kubectl exec -it -n juwan -- mongosh --port 27017 --eval 'sh.status()' ``` ## 4) 卸载(可选) ### Strimzi(Helm 安装场景) ```bash helm uninstall strimzi-kafka-operator -n kafka ``` ### MongoDB Operator(Helm 安装场景) ```bash helm uninstall mongodb-kubernetes-operator -n mongodb ```