为kubernetes创建本地镜像仓库

通过k8s部署应用,需要从远程镜像仓库拉取镜像,默认的远程镜像为dock hub,访问这个仓库难免出现各种超时和龟速问题。那么有什么解决方案吗?

k8s直接运行本地镜像

我们可以将直接用k8s运行本地镜像将容器跑起来。但是前置条件得保证所有的node节点都有这个镜像,然后指定镜像拉取策略为imagePullPolicy: Never 即可。

1)将镜像同步到所有node节点:

假设当前镜像为spring-app:20200906-130657,将镜像tar包,然后scp到各个node节点:

docker save spring-app:20200906-130657 -o spring-app-20200906-130657.tar
scp spring-app-20200906-130657.tar 192.168.6.131:/root/Desktop/docker-image/
scp spring-app-20200906-130657.tar 192.168.6.132:/root/Desktop/docker-image/

node1执行:

docker load < spring-app-20200906-130657.tar

node2执行:

docker load < spring-app-20200906-130657.tar

2)修改你的Deployment资源得yaml文件

      containers:
      - name: spring-app
        image: spring-app:20200906-130657
        imagePullPolicy: Never

最后执行apply命令即可,当然这个方案只是下下策,每次同步它不浪费时间吗。

创建本地仓库

以本地仓库代替默认的中央仓库,每次部署时,镜像发送到本地仓库,k8s调度到具体得节点时,再本地仓库拉取镜像,就能快得多。

1)选择master节点搭建本地仓库:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

2)所有的节点要更新daemon.json,指定insecure-registries为本地仓库地址。这里我填的本地仓库地址为master节点的ip。

echo '{ "insecure-registries":    ["192.168.6.128:5000"] }' > /etc/docker/daemon.json

3)打镜像并推送

  • 如果是在本地仓库节点操作,则可以指定registry为localhost:5000或者192.168.6.128:5000
docker build -t localhost:5000/spring-app:20200906-130657 .
docker push localhost:5000/spring-app:20200906-130657
  • 如果是在其它节点操作,则必须指定registry为 192.168.6.128:5000
docker build -t 192.168.6.128:5000/spring-app:20200906-130657 .
docker push 192.168.6.128:5000/spring-app:20200906-130657

查看私有镜像仓库的所有镜像及其tag:

curl -X GET http://192.168.6.128:5000/v2/_catalog
curl -X GET http://192.168.6.128:5000/v2/spring-app/tags/list

4)部署阶段,Deployment的yaml文件要指定为:

      containers:
      - name: spring-app
        image: 192.168.6.128:5000/spring-app:20200906-130657

注意:每次打镜像时,镜像的仓库可以为localhost:5000,也可以为192.168.6.128:5000,但实际部署时yaml中的仓库必须要指定为192.168.6.128:5000。因为k8s默认将应用部署到node节点,node节点是没有安装本地仓库的,所以要在yaml指定实际镜像仓库的ip。

至此本地仓库创建完毕。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要在本地的 Kubernetes 集群中导入本地镜像文件,可以使用以下步骤: 1. 打标签:首先,需要给镜像打上标签,使其符合 Kubernetes 的要求。标签应该包含仓库地址、镜像名称和版本号。 例如,如果要将本地的镜像文件 hello-world.tar.gz 导入到 Kubernetes 中,则可以使用以下命令为其打标签: ``` docker tag hello-world:latest 127.0.0.1:5000/hello-world:latest ``` 其中,127.0.0.1:5000 是仓库地址,hello-world 是镜像名称,latest 是版本号。 2. 启动本地仓库Kubernetes 默认使用 Docker Hub 作为镜像仓库,如果要使用本地镜像文件,需要启动一个本地仓库,可以使用以下命令启动: ``` docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这将在容器中启动一个名为 registry 的本地仓库,并将其映射到主机的 5000 端口。 3. 推送镜像到本地仓库:接下来,需要将标记后的镜像推送到本地仓库中。可以使用以下命令将其推送: ``` docker push 127.0.0.1:5000/hello-world:latest ``` 这将把镜像文件上传到本地仓库中。 4. 创建 Kubernetes Pod:最后,需要创建一个 Kubernetes Pod,并将其配置为使用刚才推送到本地仓库中的镜像。可以使用以下 YAML 文件来创建 Pod: ``` apiVersion: v1 kind: Pod metadata: name: hello-world spec: containers: - name: hello-world image: 127.0.0.1:5000/hello-world:latest ports: - containerPort: 80 ``` 将上述 YAML 文件保存为 hello-world.yaml,并使用以下命令创建 Pod: ``` kubectl create -f hello-world.yaml ``` 这将创建一个名为 hello-world 的 Pod,并将其配置为使用本地仓库中的 hello-world 镜像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alphathur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值