У меня сложная система, развернутая в k8s, и в одном из подов есть 2 контейнера, монго и метрики. некоторая связанная информация из kubectl -n app_ns describe pod app-mongo
как показано ниже (удалена некоторая несвязанная информация):
containers:
- args:
- --config=/data/configdb/mongod.conf
- --dbpath=/data/db
- --replSet=app-mongo
- --port=27017
- --bind_ip=0.0.0.0
- --auth
- --keyFile=/data/configdb/key.txt
command:
- mongod
image: mongo:3.6.8
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- mongo
- --eval
- db.adminCommand('ping')
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: mongodb
ports:
- containerPort: 27017
name: mongodb
protocol: TCP
readinessProbe:
exec:
command:
- mongo
- --eval
- db.adminCommand('ping')
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
- command:
- sh
- -ec
- /bin/mongodb_exporter -mongodb.uri mongodb://$METRICS_USER:$METRICS_PASSWORD@localhost:27017
-mongodb.socket-timeout=15s -mongodb.sync-timeout=1m -web.metrics-path=/metrics
-web.listen-address=:9216
image: ssalaues/mongodb-exporter:0.6.1
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- sh
- -ec
- /bin/mongodb_exporter -mongodb.uri mongodb://$METRICS_USER:$METRICS_PASSWORD@localhost:27017
-test
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 14
successThreshold: 1
timeoutSeconds: 23
name: metrics
теперь проблема в том, что капсула app-mongo
будет время от времени перезапускаться.
kubectl -n app-ns get pod -w
NAME READY STATUS RESTARTS AGE
mongodb-0 2/2 Running 0 46s
mongodb-0 2/2 Running 1 2m19s
mongodb-0 2/2 Running 2 4m52s
mongodb-0 2/2 Running 3 6m57s
mongodb-0 2/2 Running 4 9m47s
mongodb-0 2/2 Running 5 12m
mongodb-0 2/2 Running 6 14m
mongodb-0 1/2 CrashLoopBackOff 6 16m
mongodb-0 2/2 Running 7 18m
вы можете видеть, он перезапускался много раз, и время кажется случайным. Иногда он перезапускается через 4 или 5 месяцев, иногда через полчаса.
И я заметил, что metrics
comtainer перезапустится вот так. но mongo
контейнер кажется нормальным. он просто перезапускается 1 или 2 раза в день.
и я также вхожу в metrics
контейнер вроде этого:
kubectl -n app_ns exec -it app-mongo --container=metrics sh
и в оболочке я запускаю:
/bin/mongodb_exporter -mongodb.uri mongodb://root:the_password@localhost:27017 -test
Иногда он вернет правильное сообщение, но иногда он вернет:
ERRO[0000] Cannot connect to server using url mongodb://****:****@localhost:27017: no reachable servers source="connection.go:84"
ERRO[0000] Can't connect to MongoDB: Cannot connect using uri: mongodb://root:mongopassw0rd@localhost:27017 source="mongodb_exporter.go:104"
/
И за это время я обнаружил, что он не может подключиться к localhost 27017
с телнетом.
И версия докера - 19.03, версия Kubernetes - 1.15.11. ОС - centos 7.6.
Я проверил много журналов, статусов и все, что могу придумать, но не нашел никаких проблем. Если вам нужно что-нибудь еще для диагностики проблемы, я могу предоставить. Любые предложения и подсказки будут очень полезны. Спасибо.