"Не удалось проверить изображение XXX: идентификатор или размер изображения XXX не задан"?

Я пытаюсь развернуть контейнер Docker на экземпляре мини-куба, работающем локально, и получаю эту ошибку, когда он пытается получить (?) Образ. Образ существует в автономном реестре Docker. Образ, с которым я тестирую, собран со следующим Dockerfile:

FROM alpine:latest
ENTRYPOINT ["echo"]

Я использую fabric8io kubernetes-client библиотека для создания развертывания примерно так:

// 'kube' is an instance of io.fabric8.kubernetes.client.KubernetesClient
final Deployment deployment = kube.extensions().deployments()
        .createOrReplaceWithNew()
        .withNewMetadata()
            .withName(name)
            .withNamespace("staging")
        .endMetadata()
        .withNewSpec()
            .withReplicas(1)
            .withNewTemplate()
                .withNewMetadata()
                    .addToLabels("app", name)
                .endMetadata()
                .withNewSpec()
                    .addNewImagePullSecret()
                        // "regsecret" is the kubectl-created docker secret
                        .withName("regsecret")
                    .endImagePullSecret()
                    .addNewContainer()
                        .withName(name)
                        .withImage(imageName + ":latest")
                    .endContainer()
                .endSpec()
            .endTemplate()
        .endSpec()
        .done();

Это все работает на Arch Linux, ядро Linux 4.10.9-1-ARCH x86_64 GNU/Linux, С помощью minikube 0.18.0-1 а также kubectl-bin 1.6.1-1 от AUR, docker 1:17.04.0-1 из репозиториев сообщества и докера registry контейнер в latest (2.6.1 на момент написания этого). fabric8io kubernetes-client в версии 2.2.13,

Я проверил:

  • что самостоятельно размещенный реестр работает по HTTPS правильно
  • что изображение можно даже потянуть. docker pull а также docker run как на хосте, так и внутри виртуальной машины Minikube работают точно так, как и ожидалось
  • что изображение работает. См выше
  • что в миникубе нет конфликтов имен и т. д. Я удаляю развертывания, наборы реплик и модули между попытками и воссоздаю пространство имен, чтобы быть в безопасности. Тем не менее, я обнаружил, что это не имеет значения, что я и делаю, так как мой код очищает существующие наборы / развертывания pods / replica по мере необходимости
  • что DNS не проблема, насколько я могу судить

Я не:

  • запускать kubernetes локально (в отличие от minikube), так как пакет AUR для kubernetes занимает невероятно много времени для сборки на моей машине
  • прочитайте исходный код kubernetes, так как я не знаю golang

При проверке minikube dashboardразделы для развертываний, наборов реплик и модулей имеют одинаковую ошибку:

Failed to inspect image "registry_domain/XXX/YYY:latest": Id or size of image "registry_domain/XXX/YYY:latest" is not set
Error syncing pod, skipping: failed to "StartContainer" for "YYY" with ImageInspectError: "Failed to inspect image \"registry_domain/XXX/YYY:latest\": Id or size of image \"registry_domain/XXX/YYY:latest\" is not set"

и журналы стручка навсегда застряли в

container "YYY" in pod "YYY" is waiting to start: ImageInspectError

Поиск сообщения об ошибке приводит меня на https://github.com/kubernetes/minikube/issues/947, но это не та проблема, kube-dns работает как положено. Это единственный релевантный результат поиска, так как другие результаты, которые появляются

  • Slack архив чата, который даже не содержит соответствующего сообщения об ошибке
  • Источник kubernetes, который не полезен для меня
  • kubernetes/minikube #947, как указано выше

Я, честно говоря, не уверен, куда идти отсюда. Любой совет будет принят во внимание.

2 ответа

Решение

Kubernetes 1.6 может быть несовместим с последней версией Docker (17.xx.xx), не могли бы вы понизить версию Docker и повторить попытку.

Рекомендуемая версия Docker в Kubernetes(v1.6) - 1.12, если вы не знаете, как найти эту версию. Используйте это в Ubuntu или Debain:

apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y docker.io

Для сентос, ссылка

удалите текущую установку Docker, прежде чем пытаться это

Прежде чем что-либо удалять, вы можете попробовать minikube delete (если там нет ничего важного или что-то скопировано) и minikube start чтобы полностью удалить свой предыдущий кластер и попытаться снова вытащить изображение. Это сделало это для меня.

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