【问题标题】:kubernetes deploy with tar docker image使用 tar docker 映像部署 kubernetes
【发布时间】:2019-12-11 06:05:32
【问题描述】:

我在通过 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

任何人都可以就这个问题给我任何建议吗?

【问题讨论】:

  • 你用 docker load 加载图片了吗?
  • 图像是否存在于每个工作节点上?
  • 您必须使用 docker 加载图像。它还必须在您的节点上可用。
  • @YonahDissen 是的
  • @LouisBaumann 不,仅在主节点中。那么,我还需要在主节点和工作节点上手动复制和粘贴图像吗?我刚刚测试了它在工作节点中的图像,但我遇到了同样的问题......

标签: docker kubernetes


【解决方案1】:

我成功地将本地映像与 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 用作您的图像。

将图片复制到所有节点

这种技术的问题是您需要确保所有节点都有这个图像。
缺少镜像会导致 Pod 创建失败。

要复制它,您可以使用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

如果没有此选项,pod 创建将失败。

下面是使用该图像的示例部署:

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

结果如下图创建pods成功:

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

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2019-12-16
    • 2020-08-01
    • 2019-01-08
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多