我是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)
答案 0 :(得分:0)
我假设Docker映像在Kubernetes集群的所有节点上都可用。该图像应该在所有节点上都可用/您需要提及nodeSelector
属性。在图像所在的完全相同的节点上运行pod。
现在出现错误。我在本地图像上看到了类似的问题。吊舱的imagePullPolicy
属性在这里引起问题。其默认值为always
,表示它k8s(更具体地说是kubelet)尝试拉取图像以尝试尝试进行docker登录(可能只是比较远程和本地图像)而拉取图像。
如何解决问题?将imagePullPolicy
设置为ifNotPresent
或never
,以便它不会尝试拉取图像(也不会尝试进行docker登录)。
我正在提供一个独立吊舱的指示器。工作应该是相同的。毕竟,它仅在pod中运行。