kubernetes与tar docker映像一起部署

时间:2019-11-18 14:01:54

标签: docker kubernetes

我在通过kubernetes部署docker映像时遇到问题。

一个问题是,我们不能使用任何docker映像注册表服务,例如docker hub或任何云服务。但是,是的,我将docker映像作为.tar文件。

但是,它总是失败,并显示以下消息

Warning  Failed     1s         kubelet, dell20    

Failed to pull image "test:latest": rpc
error: code = Unknown
desc = failed to resolve image "docker.io/library/test:latest":
failed to do request: Head https://registry-1.docker.io/v2/library/test/manifests/latest: dial tcp i/o timeout

我还使用IfNotPresent或Never更改部署说明。在这种情况下,无论如何都将通过ErrImageNeverPull失败。

我的猜测是:kubernetes仍然尝试使用Docker Hub,因为它https://registry-1.docker.io是为了拉取映像。我只想在本地磁盘中使用tar docker映像,而不是从某些服务中提取。

是的,图像在docker中:

docker images
REPOSITORY  TAG    IMAGE ID      CREATED     SIZE
test        latest 9f4916a0780c  6 days ago  1.72GB

有人可以给我关于这个问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我成功地在Kubernetes集群中使用了本地映像。我通过以下示例提供了解释:

唯一的先决条件是您需要确保有权访问此图像直接上载到节点。

创建图片

使用以下命令从Docker注册表中拉出默认的nginx映像:

$ docker pull nginx:1.17.5

Nginx图像仅用于演示目的。

使用以下命令将该图像的新名称标记为nginx-local

$ docker tag nginx:1.17.5 nginx-local:1.17.5

将此图像另存为nginx-local.tar执行命令:

$ docker save nginx-local:1.17.5 > nginx-local.tar

文档链接:docker save

文件nginx-local.tar用作图像。

将图像复制到所有节点

此技术的问题在于,您需要确保所有节点都具有该图像。
缺少图像会导致豆荚创建失败。

要复制它,可以使用scp。这是在计算机之间传输文件的安全方法。
scp的示例命令:

$ scp /path/to/your/file/nginx-local.tar user@ip_adddress:/where/you/want/it/nginx-local.tar

如果映像已在节点上,则需要使用以下命令将其加载到本地docker映像存储库中:

$ docker load -i nginx-local.tar

为确保已加载图像,请调用命令

$ docker images | grep nginx-local

文档链接:docker load

它应该显示如下内容:

docker images | grep nginx
nginx-local                                           1.17.5              540a289bab6c        3 weeks ago         126MB

使用本地映像创建部署

最后一部分是使用nginx-local映像创建部署。

请注意:

  • 该图像版本已在yaml文件中明确键入
  • ImagePullPolicy设置为从不ImagePullPolicy

没有此选项,则窗格创建将失败。

下面是完全使用该映像的示例部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-local
  namespace: default
spec:
  selector:
    matchLabels:
      run: nginx-local
  replicas: 5 
  template:
    metadata:
      labels:
        run: nginx-local
    spec:
      containers:
      - image: nginx-local:1.17.5
        imagePullPolicy: Never
        name: nginx-local
        ports:
        - containerPort: 80

使用以下命令创建此部署: $ kubectl create -f local-test.yaml

结果是成功创建了吊舱,如下所示:

NAME                           READY   STATUS    RESTARTS   AGE
nginx-local-84ddb99b55-7vpvd   1/1     Running   0          2m15s
nginx-local-84ddb99b55-fgb2n   1/1     Running   0          2m15s
nginx-local-84ddb99b55-jlpz8   1/1     Running   0          2m15s
nginx-local-84ddb99b55-kzgw5   1/1     Running   0          2m15s
nginx-local-84ddb99b55-mc7rw   1/1     Running   0          2m15s

此操作成功,但是我建议您使用本地docker存储库。它将简化使用图像的管理过程,并且将在您的基础结构内部。 链接到有关它的文档:Local Docker Registry