使用 tar docker 镜像部署 kubernetes

2024-03-02

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

一个问题是,我们无法使用任何 docker 镜像注册表服务,例如docker hub 或任何云服务。但是,是的,我有 .tar 文件形式的 docker 映像。

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

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 https://registry-1.docker.io为了拉图像。我只想在本地磁盘中使用 tar docker 映像,而不是从某些服务中拉取。

是的,镜像在 docker 中:

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

谁能给我关于这个问题的任何建议?


我成功地将本地映像与 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

文档链接:码头工人保存 https://docs.docker.com/engine/reference/commandline/save/

File 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

文档链接:码头工人负载 https://docs.docker.com/engine/reference/commandline/load/:

它应该显示类似这样的内容:

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

使用本地映像创建部署

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

请注意:

  • 图片版本为里面明确输入yaml 文件。
  • ImagePullPolicy 设置为Never. 图片拉取策略 https://kubernetes.io/docs/concepts/containers/images/

如果没有此选项,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

结果是pod创建成功,如下图:

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 存储库。它将更轻松地管理图像过程,并将位于您的基础设施内。 有关它的文档链接:本地 Docker 注册表 https://docs.docker.com/registry/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 tar docker 镜像部署 kubernetes 的相关文章

随机推荐