MongoDB 使用几个默认端口?在k8s单个节点部署多个实例如何处理这些端口映射关系
在 Kubernetes 上部署多个 MongoDB 实例时,确实需要处理好端口映射关系,以避免端口冲突。MongoDB 默认使用的是 27017 端口,但可以通过配置文件指定不同的端口。
MongoDB 默认端口
主端口
27017(用于客户端连接)
其他端口
- 27018(用于副本集成员之间的通信)
- 27019(用于其他用途,如内部管理)
在 Kubernetes 上部署多个 MongoDB 实例
修改 MongoDB 配置文件
每个 MongoDB 实例需要有不同的端口配置。可以在 `mongod.conf` 文件中指定不同的端口。
例如,第一个实例的配置文件 `mongod1.conf`:
net: port: 27017 bindIp: 0.0.0.0
第二个实例的配置文件 `mongod2.conf`:
net: port: 27018 bindIp: 0.0.0.0
第三个实例的配置文件 `mongod3.conf`:
net: port: 27019 bindIp: 0.0.0.0
创建 Kubernetes 配置文件
Deployment 和 Service 配置
对于每个 MongoDB 实例,创建一个单独的 Deployment 和 Service。
**第一个实例的 Deployment 和 Service**
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb1 spec: replicas: 1 selector: matchLabels: app: mongodb1 template: metadata: labels: app: mongodb1 spec: containers: - name: mongodb1 image: mongo:latest ports: - containerPort: 27017 volumeMounts: - mountPath: /data/db name: mongodb1-data command: ["mongod", "--config", "/etc/mongod1.conf"] volumeMounts: - mountPath: /etc/mongod1.conf name: config-volume subPath: mongod1.conf volumes: - name: mongodb1-data emptyDir: {} - name: config-volume configMap: name: mongodb-configmap items: - key: mongod1.conf path: mongod1.conf --- apiVersion: v1 kind: Service metadata: name: mongodb1-service spec: selector: app: mongodb1 ports: - protocol: TCP port: 27017 targetPort: 27017 type: ClusterIP
第二个实例的 Deployment 和 Service
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb2 spec: replicas: 1 selector: matchLabels: app: mongodb2 template: metadata: labels: app: mongodb2 spec: containers: - name: mongodb2 image: mongo:latest ports: - containerPort: 27018 volumeMounts: - mountPath: /data/db name: mongodb2-data command: ["mongod", "--config", "/etc/mongod2.conf"] volumeMounts: - mountPath: /etc/mongod2.conf name: config-volume subPath: mongod2.conf volumes: - name: mongodb2-data emptyDir: {} - name: config-volume configMap: name: mongodb-configmap items: - key: mongod2.conf path: mongod2.conf --- apiVersion: v1 kind: Service metadata: name: mongodb2-service spec: selector: app: mongodb2 ports: - protocol: TCP port: 27018 targetPort: 27018 type: ClusterIP
第三个实例的 Deployment 和 Service
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb3 spec: replicas: 1 selector: matchLabels: app: mongodb3 template: metadata: labels: app: mongodb3 spec: containers: - name: mongodb3 image: mongo:latest ports: - containerPort: 27019 volumeMounts: - mountPath: /data/db name: mongodb3-data command: ["mongod", "--config", "/etc/mongod3.conf"] volumeMounts: - mountPath: /etc/mongod3.conf name: config-volume subPath: mongod3.conf volumes: - name: mongodb3-data emptyDir: {} - name: config-volume configMap: name: mongodb-configmap items: - key: mongod3.conf path: mongod3.conf --- apiVersion: v1 kind: Service metadata: name: mongodb3-service spec: selector: app: mongodb3 ports: - protocol: TCP port: 27019 targetPort: 27019 type: ClusterIP
创建 ConfigMap
创建一个 ConfigMap 来存储不同的 MongoDB 配置文件。
apiVersion: v1 kind: ConfigMap metadata: name: mongodb-configmap data: mongod1.conf: | net: port: 27017 bindIp: 0.0.0.0 mongod2.conf: | net: port: 27018 bindIp: 0.0.0.0 mongod3.conf: | net: port: 27019 bindIp: 0.0.0.0
应用配置
将所有的配置文件应用到 Kubernetes 集群中。
kubectl apply -f mongodb1-deployment.yaml kubectl apply -f mongodb2-deployment.yaml kubectl apply -f mongodb3-deployment.yaml kubectl apply -f mongodb-configmap.yaml
验证部署
确保所有 Pod 和 Service 都正确运行。
kubectl get pods kubectl get services
测试连接
从另一个 Pod 中测试连接到各个 MongoDB 服务。
kubectl run -it --rm --image=busybox test-mongo -- sh
在容器内执行
apk add busybox-extras telnet mongodb1-service 27017 telnet mongodb2-service 27018 telnet mongodb3-service 27019
通过上述步骤,你可以在 Kubernetes 单个节点上部署多个 MongoDB 实例,并正确处理端口映射关系。