Под в моем кластере 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):
minikube stop
minikube delete
export http_proxy=http://user:pass@ip:port
export https_proxy=http://user:pass@ip:port
export no_proxy=192.168.99.0/24
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
export no_proxy=$no_proxy,$(minikube ip)
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, потому что не выделил достаточно памяти для своего контейнера.