Kubernetes застрял на ContainerCreating

Kubernetes застрял на ContainerCreating

Под в моем кластере Kubernetes застрял на "ContainerCreating" после запуска создания. Как мне посмотреть журналы для этой операции, чтобы диагностировать причину застревания? kubectl logsпохоже, не работает, так как контейнер должен находиться в состоянии non-pending.

решение1

kubectl describe podsбудет списокнекоторый(вероятно, большинство, но не все) событий, связанных с модулем, включая извлечение образов, запуск контейнеров.

решение2

Более подробную информацию можно будет получить в ходе мероприятий.

kubectl get events --all-namespaces  --sort-by='.metadata.creationTimestamp'

Однако учтите, что сортировка событий может работать некорректно из-за этой ошибки:https://github.com/kubernetes/kubernetes/issues/29838


Альтернативно:

Начиная с версии Kubernetes 1.18 все новые объекты имеют метаданные для применения на стороне сервера, что дает нам новый способ сортировки событий:

kubectl get events --sort-by=".metadata.managedFields[0].time"

От:https://github.com/kubernetes/kubernetes/issues/29838#issuecomment-789660546


В моем случае произошло событие, связанное с модулем:

default       13s         Warning   FailedMount               Pod          Unable to mount volumes for pod "restore-db-123-1-5f24s_default(9b7df264-2976-11ea-bb8f-42010a9a002c)": timeout expired waiting for volumes to attach or mount for pod "default"/"restore-db-123-1-5f24s". list of unmounted volumes=[nfsv]. list of unattached volumes=[nfsv default-token-hxrng]

решение3

В моем случае доступ докера к интернету был заблокирован. Решено с помощью прокси (используя комментарий sandylss):

  1. minikube stop
  2. minikube delete
  3. export http_proxy=http://user:pass@ip:port
  4. export https_proxy=http://user:pass@ip:port
  5. export no_proxy=192.168.99.0/24
  6. minikube start --logtostderr --v=0 --bootstrapper=localkube --vm-driver hyperv 
      --hyperv-virtual-switch "Primary Virtual Switch" --docker-env HTTP_PROXY=$http_proxy \
      --docker-env HTTPS_PROXY=$https_proxy --docker-env NO_PROXY=$no_proxy
    
  7. export no_proxy=$no_proxy,$(minikube ip)
  8. export NO_PROXY=$no_proxy,$(minikube ip)

Затем, чтобы проверить, есть ли у Docker доступ к интернету, выполните:

$ docker pull tutum/hello-world

в кластере (подключитесь к кластеру с помощью minikube ssh); остановите процесс, если он начал загрузку.

Моя вторая проблема заключалась в медленном интернет-соединении. Поскольку требуемые образы docker составляют порядка 100 МБ, и контейнеры docker, и модули Kubernetes оставались в состояниях \pauseи ContainerCreatingв течение 30 минут.

Чтобы проверить, загружает ли Docker образы, выполните:

$ ls -l /var/lib/docker/tmp

в кластере, который показывает временные файлы изображений, которые загружаются, в противном случае пусто.

Если вы разрабатываете в minikube и используете VPN, docker может использовать ваш VPN черезскрипач. То есть, docker будет подключен к ip:port fiddler, а fiddler подключен к VPN. В противном случае VPN не будет использоваться совместно между вашим хостом и виртуальной машиной minikube.

решение4

Единственный раз я столкнулся с этой проблемой, потому что мои объявления ресурсов случайно оказались очень-очень маленькими.

ресурсы: ограничения: процессор: 1000 м память: 1024 М запросы: процессор: 1000 м память: 1024 М

против

ресурсы: ограничения: процессор: 1000 м память: 1024 м запросы: процессор: 1000 м память: 1024 м

Использование заглавной буквы m дает очень большую разницу в использовании ресурсов. Я застрял на ContainerCreating, потому что не выделил достаточно памяти для своего контейнера.

Связанный контент