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