我在通过 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
Run Code Online (Sandbox Code Playgroud)
我还使用 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
Run Code Online (Sandbox Code Playgroud)
谁能给我关于这个问题的任何建议?
我成功地将本地映像与 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
Run Code Online (Sandbox Code Playgroud)
如果节点上已有镜像,则需要使用以下命令将其加载到本地 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
Run Code Online (Sandbox Code Playgroud)
最后一部分是使用 nginx-local 映像创建部署。
请注意:
如果没有此选项,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
Run Code Online (Sandbox Code Playgroud)
使用命令创建此部署:
$ 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
Run Code Online (Sandbox Code Playgroud)
此操作成功,但我建议您使用本地 docker 存储库。它将简化图像的管理过程,并将位于您的基础设施内。相关文档的链接: 本地 Docker 注册表
| 归档时间: |
|
| 查看次数: |
9052 次 |
| 最近记录: |