Назад | Перейти на главную страницу

В kubernetes время от времени не может подключиться к другому контейнеру в ЖЕ ПОДЕ

У меня сложная система, развернутая в 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.

Я проверил много журналов, статусов и все, что могу придумать, но не нашел никаких проблем. Если вам нужно что-нибудь еще для диагностики проблемы, я могу предоставить. Любые предложения и подсказки будут очень полезны. Спасибо.