侧边栏壁纸
博主头像
Blog博主等级

行动起来,活在当下

  • 累计撰写 211 篇文章
  • 累计创建 94 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

自建本地镜像仓库-registry

一、起因

使用k3s拉取镜像时总是会遇到拉取失败,所以如果把需要的镜像都存放到本地仓库中,每次使用只需要从本地仓库中获取,这样方便许多。

二、部署过程

选用和k3s集群同一个局域网内的服务器。

系统版本:

  • centos7.9

使用容器快速部署仓库

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

部署完成后,访问http://服务器ip:5000/v2/_catalog。可以查看当前仓库中所有镜像。

仓库镜像拉取过程:

首先要使用docker 将镜像拉取到本地,然后给镜像打tag,最后推送到仓库。

如:

docker pull bitnami/kafka:latest
docker tag bitnami/kafka:latest 192.168.1.192:5000/kafka:latest
docker push 192.168.1.192:5000/kafka:latest

由于k3s没有使用docker作为内置的CRI,而是使用container作为默认CRI。我们在拉取仓库中镜像时会发生如下报错:

Error response from daemon: Get "https://192.168.1.192:5000/v2/": http: server gave HTTP response to HTTPS client

这是由于container默认会使用https来拉取镜像。在master节点上将默认使用https改为使用http。

vi /etc/rancher/k3s/registries.yaml
mirrors:
  "192.168.1.192:5000":
    endpoint:
      - "http://192.168.1.192:5000"

其中ip和端口是仓库地址和端口。

重启k3s服务

systemctl restart k3s 

再次拉取,发现拉取成功了。

# ctr images pull 192.168.1.192:5000/kafka:latest

创建脚本快速查看仓库中有哪些镜像

vi list_repo.sh
#!/bin/bash

REGISTRY_URL="http://localhost:5000"

# 获取所有仓库
REPOS=$(curl -s ${REGISTRY_URL}/v2/_catalog | jq -r '.repositories[]')

for repo in $REPOS; do
    echo "Repository: $repo"
    # 获取仓库中的所有标签
    TAGS=$(curl -s ${REGISTRY_URL}/v2/${repo}/tags/list | jq -r '.tags[]')
    for tag in $TAGS; do
        echo "  Tag: $tag"
    done
done

测试:

[root@k3s-storage ~]# ./list_repo.sh 
Repository: kafka
  Tag: latest
Repository: zookeeper
  Tag: latest

0

评论区