【发布时间】:2020-03-01 20:19:24
【问题描述】:
我对 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/flask 代码。该作业在服务器上成功创建,但是当我检查 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)
【问题讨论】:
-
您的集群是否有权从您将其推送到的存储库中拉取此图像?
-
它们在同一台服务器上,所以我认为是这样,但我不知道如何检查。我没有将存储库推送到任何地方,它只是在 EC2 实例上,通过运行
sudo docker images ls很明显。这就是我试图从中拉出来的地方。 -
docker image ls显示您的 local 机器上的内容。 kubernetes 从镜像仓库中拉取 -
因此,如果映像存在于 EC2 实例(本地)上,并且我的 kubernetes 运行在同一个实例上,我该如何弥补这一差距?我必须将它推送到外部存储库才能拉取它吗?
-
AWS 有一个您可以推送到的注册表。一般来说,为了启动一个 pod,它必须从注册表中提取。
标签: python docker flask kubernetes