我在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镜像创建部署。
请注意:
如果没有这些选项,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仓库