Kubernetes pod, как сообщается, работает, пока он не

Я получаю странную ошибку: сообщается, что модуль работает через api-сервер k8s. Но контейнер, который запускал приложение, был фактически закрыт, только контейнер паузы gcr.io/google_containers/pause:0.8.0 работает, а не фактический контейнер.

$ docker ps -a | grep ms-issue
1754ddbbfbd8        agencyrev/workflow.microservice.issue:v0.0.9                          "npm start"            2 days ago          Exited (1) 11 hours ago                       k8s_workflow-microservice-issue.458c077c_rc--ms-issue--v0.0.9-btryt_staging_18d44bae-dac7-11e5-889c-00155d08db02_965dee2f
30c0addd88ef        gcr.io/google_containers/pause:0.8.0                                  "/pause"               2 days ago          Up 2 days                                     k8s_POD.b5de0404_rc--ms-issue--v0.0.9-btryt_staging_18d44bae-dac7-11e5-889c-00155d08db02_e427af83

Как видите, контейнер приложения был завершен 11 часов назад, но /pause::0.8.0 все еще работает, вот почему он сообщается, как работает. Я заметил эту проблему, потому что я продолжал получать ошибку Dial failed: connection refused в kube-proxy, И не только этот модуль, у меня есть несколько других модулей (того же хоста), которые тоже сталкивались с этим.

Я не знаю, что вызвало это, но возможно ли это? И как?

Я использую kubernetes версии v1.1.7

$ kubetctl version
Client Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.7", GitCommit:"e4e6878293a339e4087dae684647c9e53f1cf9f0", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.7", GitCommit:"e4e6878293a339e4087dae684647c9e53f1cf9f0", GitTreeState:"clean"}

$ docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 2c2c52b-dirty
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 2c2c52b-dirty
OS/Arch (server): linux/amd64

$ uname -a
Linux dev-coreos-k8s_14 4.1.5-coreos #2 SMP Thu Aug 13 09:18:45 UTC 2015 x86_64 Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz GenuineIntel GNU/Linux

Проблема выше приводит к другой проблеме, что я не могу остановить стручок без --grace-period=0 вариант (статус всегда был на Terminating со стандартным льготным периодом 30 с). И даже если после остановки стручка, pause контейнер все еще там. Я должен был остановить это с docker stop

2 ответа

Похоже, это относится к тому модулю / образу, который вы используете. Можете ли вы проверить журналы и посмотреть, почему этот модуль вышел? Можете ли вы попробовать любое другое изображение из Docker Hub?

И Kubernetes, и демон Docker сообщат, что Pod/ контейнер (есть разница) запущен, если в контейнере работает PID one или если PID один из всех контейнеров в Pod работает. Таким образом, у вас может быть запущено что-то вроде супервизора, сценария оболочки или другой системы инициализации в пользовательском пространстве, которая затем порождает больше процессов, или что-то еще, порождающее дополнительные процессы. Жизненный цикл контейнеров и контейнеров обозначен PID 1, поэтому --grace-period=0 немедленно убивает PID 1, в противном случае, когда вы собираетесь сделать убийство, он на самом деле сначала отправляет SIG_TERM который, скорее всего, PID 1 реагирует, но продолжает работать.

Другие вопросы по тегам