Docker / Kubernetes - не удалось получить изображение из локального хранилища - PullRequest
0 голосов
/ 01 марта 2020

Я очень новичок в докере / kubernetes. Я создал образ docker на своем экземпляре AWS EC2, который я могу запустить, используя

sudo docker run imagename

Это успешно выполняется. Я также вижу, что изображение существует в локальном репозитории docker, когда я запускаю

sudo docker image ls

(примечание: я должен использовать sudo, или эти команды дают ошибки разрешения)

Теперь я пытаясь заставить kubernetes запустить задание, которое создает контейнер с этим изображением, но когда я это делаю, я получаю следующую ошибку:

Failed to pull image "imagename": rpc error: code = Unknown desc = Error response from daemon: pull access denied for imagename, repository does not exist or may require 'docker login'

Вот код Python / flask, который я использую, чтобы попробовать создать работу с API kubernetes. Задание успешно создается на сервере, но когда я проверяю журнал kubernetes, именно здесь я вижу ошибку.

config.load_kube_config()
api_client = client.BatchV1Api()

container = client.V1Container(
    name="premium",
    image="imagename",
    resources=client.V1ResourceRequirements(requests={'cpu':'.9'}, limits={'cpu':'2'}),
    env=[client.V1EnvVar(name='dataset', value=ds )]
    )

# Create and configurate a spec section
template = client.V1PodTemplateSpec(
    metadata=client.V1ObjectMeta(labels={"app": "premium"}),
    spec=client.V1PodSpec(restart_policy="Never", containers=[container]))

# Create the specification of deployment
spec = client.V1JobSpec(
    template=template,
    backoff_limit=4)

# Instantiate the job object
job = client.V1Job(
    api_version="batch/v1",
    kind="Job",
    metadata=client.V1ObjectMeta(generate_name = 'premium-job-'),
    spec=spec)

api_response = api_client.create_namespaced_job("default", job, pretty=True)

1 Ответ

0 голосов
/ 02 марта 2020

Я предполагаю, что Docker изображений доступны на всех узлах кластера Kubernetes. изображение должно быть доступно на всех узлах / необходимо указать свойство nodeSelector. запустить pod на том же узле, где находится ваше изображение.

Теперь идет к вашей ошибке. Я видел похожую проблему с локальными изображениями. imagePullPolicy свойство pod здесь создает проблему. его значение по умолчанию always, означающее, что k8s (точнее, kubelet) пытается вытянуть изображение, чтобы получить изображение, которое пытается выполнить docker вход в систему (может быть, просто для сравнения удаленных и локальных изображений) и получает ошибку.

Как решить проблему? Установите imagePullPolicy на ifNotPresent или never, чтобы он не пытался получить изображение (и не пытался выполнить docker вход в систему).

подробнее читайте здесь

Я даю указатель на автономный модуль. Это должно быть то же самое для работы. в конце концов, он работает только в стручках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...