一、起因
使用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
评论区