Docker / Kubernetes-无法从本地存储库提取映像

时间:2020-03-01 20:19:24

标签: python docker flask kubernetes

我是docker / kubernetes的新手。我在可以使用运行的AWS EC2实例上构建了一个Docker映像

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'

这是我用来尝试使用kubernetes API创建作业的Python /烧瓶代码。该作业已在服务器上成功创建,但是当我检查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 :(得分:0)

我假设Docker映像在Kubernetes集群的所有节点上都可用。该图像应该在所有节点上都可用/您需要提及nodeSelector属性。在图像所在的完全相同的节点上运行pod。

现在出现错误。我在本地图像上看到了类似的问题。吊舱的imagePullPolicy属性在这里引起问题。其默认值为always,表示它k8s(更具体地说是kubelet)尝试拉取图像以尝试尝试进行docker登录(可能只是比较远程和本地图像)而拉取图像。

如何解决问题?将imagePullPolicy设置为ifNotPresentnever,以便它不会尝试拉取图像(也不会尝试进行docker登录)。

read more here

我正在提供一个独立吊舱的指示器。工作应该是相同的。毕竟,它仅在pod中运行。