Как исправить сбой запуска модуля Openshift с помощью NodeUnderDiskPressure?

Я запускаю openshift локально, используя

oc cluster up

Затем я создаю модуль, используя hello-pod.json с этим команда

oc create -f examples/hello-openshift/hello-pod.json

Под создается, но не может запуститься. Openshift показывает ошибку:

Reason: Failed Scheduling

Message:  0/1 nodes are available: 1 NodeUnderDiskPressure.

У меня еще много свободного места на жестком диске. Я не знаю, где искать другой журнал. Как решить проблему?


person Sean Nguyen    schedule 16.01.2018    source источник


Ответы (2)


По сути, мне просто нужно было восстановить файловую систему для конфигурации docker и kubernetes в моем домашнем пользовательском каталоге.

$ oc cluster down
$ sudo systemctl stop docker
$ sudo rm -rf /var/lib/docker
$ rm -rf ~/.kube
$ sudo systemctl start docker
$ oc cluster up

ВЫПОЛНЕНО! -- После этого я смог создавать стручки.

Вот некоторые другие вещи, которые я пробовал при определении того же NodeUnderDiskPressure, которые могут помочь вам, если это не решит проблему:

Сначала я получил доступные узлы из kubectl:

$ oc login -u system:admin
$ kubectl get nodes
NAME        STATUS    AGE       VERSION
localhost   Ready     12h       v1.7.6+a08f5eeb62

Затем я получил описание узла localhost:

$ kubectl describe node localhost
Name:           localhost
Role:           
Labels:         beta.kubernetes.io/arch=amd64
            beta.kubernetes.io/os=linux
            kubernetes.io/hostname=localhost
Annotations:        volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:         <none>
CreationTimestamp:  Mon, 05 Mar 2018 20:00:20 -0600
Conditions:
  Type          Status  LastHeartbeatTime           LastTransitionTime          Reason              Message
  ----          ------  -----------------           ------------------          ------              -------
  OutOfDisk         False   Tue, 06 Mar 2018 08:09:03 -0600     Mon, 05 Mar 2018 20:00:20 -0600     KubeletHasSufficientDisk    kubelet has sufficient disk space available
  MemoryPressure    False   Tue, 06 Mar 2018 08:09:03 -0600     Mon, 05 Mar 2018 20:00:20 -0600     KubeletHasSufficientMemory  kubelet has sufficient memory available
  DiskPressure      True    Tue, 06 Mar 2018 08:09:03 -0600     Mon, 05 Mar 2018 20:00:31 -0600     KubeletHasDiskPressure      kubelet has disk pressure
  Ready         True    Tue, 06 Mar 2018 08:09:03 -0600     Mon, 05 Mar 2018 20:00:31 -0600     KubeletReady            kubelet is posting ready status
Addresses:
  InternalIP:   192.168.0.14
  Hostname: localhost
Capacity:
 cpu:       4
 memory:    16311024Ki
 pods:      40
Allocatable:
 cpu:       4
 memory:    16208624Ki
 pods:      40
System Info:
 Machine ID:            6895f77789824d26acef6d0db236319f
 System UUID:           248A664C-33F8-11B2-A85C-FC31558EDC86
 Boot ID:           1a5cc22b-81f1-4b07-b26f-917a7d17936f
 Kernel Version:        4.13.16-100.fc25.x86_64
 OS Image:          CentOS Linux 7 (Core)
 Operating System:      linux
 Architecture:          amd64
 Container Runtime Version: docker://1.12.6
 Kubelet Version:       v1.7.6+a08f5eeb62
 Kube-Proxy Version:        v1.7.6+a08f5eeb62
ExternalID:         localhost
Non-terminated Pods:        (0 in total)
  Namespace         Name        CPU Requests    CPU Limits  Memory Requests Memory Limits
  ---------         ----        ------------    ----------  --------------- -------------
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests Memory Limits
  ------------  ----------  --------------- -------------
  0 (0%)    0 (0%)      0 (0%)      0 (0%)
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  12h       8m      2877    kubelet, localhost          Warning     EvictionThresholdMet    Attempting to reclaim imagefs
  11h       3m      136 kubelet, localhost          Warning     ImageGCFailed       (combined from similar events): wanted to free 3113113190 bytes, but freed 0 bytes space with errors in image deletion: [rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete 933861786d39 (must be forced) - image is being used by stopped container 82eca7ad6fd6"}, rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete bcccfe5352d3 (must be forced) - image is being used by stopped container 9c4ad3dc4b80"}, rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete b7b0dbc4f785 (must be forced) - image is being used by stopped container d388fa17ff84"}, rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete 0129e5e73319 (cannot be forced) - image has dependent child images"}, rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete 725dcfab7d63 (must be forced) - image is being used by stopped container 9eb3a771aa6f"}, rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete 8ec432b4cda3 (cannot be forced) - image is being used by running container a3fe6da22775"}]

Есть несколько замечаний:

  1. DiskPressure Состояние состояния в True
  2. Events в предупреждении: сначала я вижу EvictionThreshold Попытка восстановить imagefs; Я также вижу ImageGCFailed с подробной информацией об изображениях, которые нельзя удалить.

Вот отформатированный JSON сообщения ImageGCFailed в моем случае:

(combined from similar events):wanted to free 3113113190 bytes,
but freed 0 bytes space with errors in image deletion:[  
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete 933861786d39 (must be forced) - image is being used by stopped container 82eca7ad6fd6"
   },
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete bcccfe5352d3 (must be forced) - image is being used by stopped container 9c4ad3dc4b80"
   },
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete b7b0dbc4f785 (must be forced) - image is being used by stopped container d388fa17ff84"
   },
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete 0129e5e73319 (cannot be forced) - image has dependent child images"
   },
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete 725dcfab7d63 (must be forced) - image is being used by stopped container 9eb3a771aa6f"
   },
   rpc error:   code = 2 desc = Error response from daemon:{  
      "message":"conflict: unable to delete 8ec432b4cda3 (cannot be forced) - image is being used by running container a3fe6da22775"
   }
]

На основе этой информации: https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#reclaiming-node-level-resources Теперь я исследую доступные контейнеры и пытаюсь удалить их вручную:

$ docker ps -a
CONTAINER ID        IMAGE                                         COMMAND                  CREATED             STATUS                      PORTS               NAMES
a3fe6da22775        openshift/origin:v3.7.1                       "/usr/bin/openshift s"   12 hours ago        Up 12 hours                                     origin
82eca7ad6fd6        dtf-bpms/nodejs-mongo-persistent-2:4e90f728   "/bin/sh -ic 'npm sta"   3 months ago        Exited (137) 3 months ago                       openshift_s2i-build_nodejs-mongo-persistent-2_dtf-bpms_post-commit_fe89fcfd
9c4ad3dc4b80        dtf-bpms/nodejs-mongo-persistent-2:4e23c7d5   "/bin/sh -ic 'npm tes"   3 months ago        Exited (137) 3 months ago                       openshift_s2i-build_nodejs-mongo-persistent-2_dtf-bpms_post-commit_de141bcd
d388fa17ff84        dtf-bpms/nodejs-mongo-persistent-1:439d35ea   "/bin/sh -ic 'npm tes"   3 months ago        Exited (137) 3 months ago                       openshift_s2i-build_nodejs-mongo-persistent-1_dtf-bpms_post-commit_277b19ca
9eb3a771aa6f        hello-world                                   "/hello"                 3 months ago        Exited (0) 3 months ago                         serene_babbage

Теперь я буду вручную удалять все остановленные контейнеры:

$ docker rm $(docker ps -a -q)
82eca7ad6fd6
9c4ad3dc4b80
d388fa17ff84
9eb3a771aa6f
Error response from daemon: You cannot remove a running container a3fe6da22775a559fe94ab0eb5f52d55d9aca6d1f950f107d13243fa029e071f. Stop the container before attempting removal or use -f

В этом случае можно оставить контейнер openshift.

$ docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
a3fe6da22775        openshift/origin:v3.7.1   "/usr/bin/openshift s"   12 hours ago        Up 12 hours                             origin

Далее я перезапускаю openshift и докер и снова пытаюсь создать свои контейнеры и описываю узел localhost:

$ oc cluster down
$ sudo systemctl restart docker
$ oc cluster up
... (wait for cluster up start)
$ [CREATE PROJECT AND CONTAINERS]
$ oc login -u system:admin
$ kubectl describe node localhost
... (node description and header information)
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  1h        1h      2   kubelet, localhost          Normal      NodeHasSufficientMemory Node localhost status is now: NodeHasSufficientMemory
  1h        1h      2   kubelet, localhost          Normal      NodeHasNoDiskPressure   Node localhost status is now: NodeHasNoDiskPressure
  1h        1h      1   kubelet, localhost          Normal      NodeAllocatableEnforced Updated Node Allocatable limit across pods
  1h        1h      2   kubelet, localhost          Normal      NodeHasSufficientDisk   Node localhost status is now: NodeHasSufficientDisk
  1h        1h      1   kubelet, localhost          Normal      NodeReady       Node localhost status is now: NodeReady
  1h        1h      1   kubelet, localhost          Normal      NodeHasDiskPressure Node localhost status is now: NodeHasDiskPressure
  1h        1h      1   kubelet, localhost          Warning     ImageGCFailed       wanted to free 2934625894 bytes, but freed 0 bytes space with errors in image deletion: rpc error: code = 2 desc = Error response from daemon: {"message":"conflict: unable to delete 8ec432b4cda3 (cannot be forced) - image is being used by running container 4bcd2196747c"}

Вы можете видеть, что я продолжаю видеть NodeHasDiskPressure после очистки старого неиспользуемого контейнера, и изображения были выпущены из событий Docker. ВОТ ГДЕ СЛЕДУЮЩИЙ ШАГ БЫЛ УДАЛИТЬ СТАРУЮ ГРЯЗНУЮ ФАЙЛОВУЮ СИСТЕМУ DOCKER И НАЧАТЬ НОВУЮ.

person Diego Torres Fuerte    schedule 06.03.2018
comment
В моем случае у меня также были некоторые ошибки в файле журнала messages, указывающие на то, что менеджер выселения не смог удалить некоторые изображения, которые были заблокированы остановленным контейнером. Я удалил остановленные контейнеры, а затем оборванные изображения. После этого все проблемы исчезли. - person Victor; 17.05.2019

В моем случае настройка node-config.yaml устранила проблему:

1) Найдите сгенерированный файл node-config.yaml, например. под /var/lib/origin/ или вашим собственным путем конфигурации.

2) Откройте в редакторе и найдите kubeletArguments и добавьте желаемую политику выселения диска:

kubeletArguments:
  eviction-hard:
  - memory.available<100Mi
  - nodefs.available<1%
  - nodefs.inodesFree<1%
  - imagefs.available<1%

Подробное описание можно найти здесь: Документация OpenShift — пороги жесткого выселения по умолчанию

person toschneck    schedule 04.06.2018
comment
Большое спасибо, это очень помогает, когда у вас есть 100 ГБ дискового пространства, но kubelet устанавливает флаг DoskPressure узла слишком рано. - person Kirill Morozov; 17.02.2019
comment
У меня тоже сработало! - person Anuradha Fernando; 07.03.2019