mongo-k8s-sidecar
mongo-k8s-sidecar copied to clipboard
Name conflict when I use `mongo` as StatefulSet's name
Kubernets version:
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:28:34Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
The following StatefulSet gave me a very quiky bug.
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
app: mongo
spec:
ports:
- port: 27017
selector:
app: mongo
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: mongo
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo
command:
- mongod
- "--replSet"
- rs0
- "--bind_ip"
- 0.0.0.0
- "--smallfiles"
- "--noprealloc"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-pv
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar:latest
volumeMounts:
- name: mongo-pv
mountPath: /data/db
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "app=mongo"
- name: KUBERNETES_MONGO_SERVICE_NAME
value: "mongo"
volumeClaimTemplates:
- metadata:
name: mongo-pv
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: mongo
resources:
requests:
storage: 10Gi
Here is the error log from mongo-sidecar:
Error in workloop RangeError [ERR_SOCKET_BAD_PORT]: Port should be > 0 and < 65536. Received tcp://172.20.177.53:27017.
at lookupAndConnect (net.js:1065:13)
at Socket.connect (net.js:1034:5)
at Object.connect (net.js:107:35)
at Connection.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/connection/connection.js:412:25)
at Pool.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/connection/pool.js:666:16)
at Server.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/topologies/server.js:399:17)
at Server.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/server.js:368:17)
at open (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/db.js:229:19)
at Db.open (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/db.js:252:44)
at getDb (/opt/cvallance/mongo-k8s-sidecar/src/lib/mongo.js:32:11)
I digged into mongo-sidecar's image, and debugged its environment variable.
It turns out that at https://github.com/cvallance/mongo-k8s-sidecar/blob/master/src/lib/config.js#L79
The process.env.MONGO_PORT
has the value of tcp://172.20.177.53:27017
.
There is an environment variable name conflicts with kubernettes' default environment variable.
I would suggest giving each config file a prefix so that I won't accidentally run into name conflict, or put an note in the docs to remind everyone to avoid using mongo
as the name of statefulset.
Had the same conflict issue while trying to expose this mongo via LoadBalancer. Would anyone know how to expose properly this type of service? Thanks for this amazing project.
i‘m have same mistake. i set the evn MONGO_PORT after the mongo cluster is health. kubectl exec the pods , enter command "mongo" "rs.status()" .i find the cluster is health. thank u very much .