如何在Kubernetes部署中引用从tar文件加载的本地docker映像



我正试图从本地docker映像创建一个Kubernetes部署。并使用imagePullPolicy作为Never,这样Kubernetes就会从通过tar导入的本地docker映像中提取它。

环境

  • SingleNodeMaster  # one node deployment
    

但是Kubernetes总是试图获取私有存储库,尽管存在本地docker映像。

关于如何调试和解决这个问题,让Kubernetes从本地docker注册表中挑选图像,有什么建议吗?非常感谢。

执行的步骤

  • docker load-i images.tar
  • docker images#显示myprivatehub.com/nginx/nginxcustom:v1.18中的图像
  • kubectl创建-f local-test.yaml,imagepullPolicy为Never

错误

Pulling  pod/nginx-custom-6499765dbc-2fts2   Pulling image "myprivatehub.com/nginx/nginx-custom:v1.1.8" 
Failed   pod/nginx-custom-6499765dbc-2fts2   Error: ErrImagePull   
Failed   pod/nginx-custom-6499765dbc-2fts2   Failed to pull image "myprivatehub.com/nginx/nginx-custom:v1.1.8": rpc error: code = Unknown desc = failed to pull and unpack image "myprivatehub.com/nginx/nginx-custom:v1.1.8": failed to resolve reference "myprivatehub.com/nginx/nginx-custom:v1.1.8": failed to do request: Head "https://myprivatehub.com/v2/nginx/nginx-custom/manifests/v1.1.8": dial tcp: lookup myprivatehub.com: no such host
docker pull <imagename>
Error response from daemon: Get https://myprivatehub.com/v2/: dial tcp: lookup myprivatehub.com on 172.31.0.2:53: no such host
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-custom
namespace: default
spec:
selector:
matchLabels:
run: nginx-custom
replicas: 5 
template:
metadata:
labels:
run: nginx-custom
spec:
containers:
- image: myprivatehub.com/nginx/nginx-custom:v1.1.8
imagePullPolicy: Never
name: nginx-custom
ports:
- containerPort: 80

这是由于容器运行时与docker不同。我使用的是containerd,在将容器运行时切换到docker后,它开始工作。

这是为了更新另一种可以用来实现类似结果的方法。在这种情况下,可以使用Docker注册表。Docker注册表文件

我们可以在运行Kubernetes和安装了Docker的机器上创建一个Docker注册表。实现这一点的最简单方法之一可以如下所示:

  1. 创建一个本地私有docker注册表。如果registry:2映像不存在,那么它会下载并运行它
sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2
  1. 根据需要构建图像或从tar加载图像。对于我的示例,我创建它是为了将它添加到本地存储库中
sudo docker build -t coolapp:v1 .
  1. 构建完成后,使用此映像创建一个标记,使其表示主机和端口
sudo docker tag coolapp:v1 localhost:5000/coolapp:v1
  1. 将新标记推送到本地专用注册表
sudo docker push localhost:5000/coolapp:v1

现在在Kubernetes YAML中,我们可以指定如下部署:

apiVersion: apps/v1
kind: Deployment
metadata:
name: mycoolapp
spec:
replicas: 1
selector:
matchLabels:
app: mycoolapp
template:
metadata:
labels:
app: mycoolapp
spec:
containers:
- name: mycoolapp
image: localhost:5000/coolapp:v1
ports:
- containerPort: 3000

我们应用YAML

sudo kubectl apply -f deployment.yaml

一旦完成,我们将能够看到Kubernetes已经从本地私有存储库中提取了图像并正在运行它

最新更新