突破Docker Hub限制:awx-on-k3s私有容器registry部署与配置
突破Docker Hub限制:awx-on-k3s私有容器registry部署与配置
【免费下载链接】awx-on-k3sAn example implementation of AWX on single node K3s using AWX Operator, with easy-to-use simplified configuration with ownership of data and passwords.项目地址: https://gitcode.com/gh_mirrors/aw/awx-on-k3s
Docker Hub的拉取限制常常让开发者头疼不已,特别是在使用awx-on-k3s部署AWX时,频繁的镜像拉取很容易触发Docker Hub的速率限制,导致部署失败或中断。本文将详细介绍如何在awx-on-k3s项目中部署和配置私有容器registry,彻底解决Docker Hub限制问题,让你的AWX部署更加顺畅和自主。
为什么需要私有容器registry?
当你按照awx-on-k3s仓库的步骤部署AWX时,对Docker Hub的拉取请求会被识别为免费匿名账户,因此每6小时只能请求200次。当出现"429 Too Many Requests"消息时,说明已超出限制。此时,部署一个私有容器registry就成了理想的解决方案,它不仅能突破Docker Hub的限制,还能让你完全掌控自己的镜像数据和访问权限。
私有容器registry部署步骤
准备必要文件
首先,生成自签名证书,注意不能指定IP地址:
REGISTRY_HOST="registry.example.com" openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -out ./registry/tls.crt -keyout ./registry/tls.key -subj "/CN=${REGISTRY_HOST}/O=${REGISTRY_HOST}" -addext "subjectAltName = DNS:${REGISTRY_HOST}"修改registry/ingress.yaml中的hosts和host字段,将registry.example.com替换为你的域名:
... - hosts: - registry.example.com 👈👈👈 secretName: registry-secret-tls rules: - host: registry.example.com 👈👈👈 ...生成htpasswd字符串,用于容器registry的用户认证:
$ kubectl run htpasswd -it --restart=Never --image httpd:2.4 --rm -- htpasswd -nbB reguser Registry123! reguser:$2y$05$VLMvcWCPF0VUuHi0BXBz7eoXGZ6KRl1gataiqTXz4DdSVIXGloKiq pod "htpasswd" deleted将生成的htpasswd字符串替换到registry/configmap.yaml中:
... htpasswd: |- reguser:$2y$05$VLMvcWCPF0VUuHi0BXBz7eoXGZ6KRl1gataiqTXz4DdSVIXGloKiq 👈👈👈 ...创建Persistent Volumes所需的目录:
sudo mkdir -p /data/registry部署私有容器registry
执行以下命令部署私有容器registry:
kubectl apply -k registry部署完成后,检查registry命名空间下的资源:
$ kubectl -n registry get all,ingress NAME READY STATUS RESTARTS AGE pod/registry-7457f6c64b-sxqfp 1/1 Running 0 9s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/registry-service ClusterIP 10.43.15.228 <none> 5000/TCP 9s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/registry 1/1 1 1 9s NAME DESIRED CURRENT READY AGE replicaset.apps/registry-7457f6c64b 1 1 1 9s NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/registry-ingress <none> registry.example.com 192.168.0.221 80, 443现在,你的容器registry可以通过指定的主机名(如registry.example.com)使用了。
私有容器registry测试
Docker测试
将你的registry添加为不安全的registry,并重启Docker守护进程:
sudo tee /etc/docker/daemon.json <<EOF { "insecure-registries" : ["registry.example.com"] } EOF sudo systemctl restart docker登录到你的容器registry:
$ docker login registry.example.com Username: reguser Password: WARNING! Your password will be stored unencrypted in /home/********/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded测试镜像推送和拉取:
# 从docker.io拉取镜像 docker pull docker.io/docker/whalesay:latest # 标记为私有registry上的镜像 docker tag docker.io/docker/whalesay:latest registry.example.com/reguser/whalesay:latest # 推送到私有registry docker push registry.example.com/reguser/whalesay:latest # 删除本地镜像 docker image rm docker.io/docker/whalesay:latest docker image rm registry.example.com/reguser/whalesay:latest # 从私有registry拉取镜像 docker pull registry.example.com/reguser/whalesay:latest # 运行测试容器 docker run -it --rm registry.example.com/reguser/whalesay:latest cowsay hoge深入了解Registry
使用reg工具可以更深入地管理容器registry:
# 安装reg sudo curl -fSL https://github.com/genuinetools/reg/releases/download/v0.16.1/reg-linux-amd64 -o /usr/local/bin/reg sudo chmod +x /usr/local/bin/reg # 列出registry中的仓库和标签 reg ls -k registry.example.com reg tags -k registry.example.com/reguser/whalesay # 删除registry中的标签 reg rm -k registry.example.com/reguser/whalesay:latest配置AWX或K3s使用私有容器registry
这个私有registry不仅可以用作AWX的Execution Environment存储库,还可以作为K3s的私有registry。
配置步骤
创建registries.yaml并重启K3s:
sudo tee /etc/rancher/k3s/registries.yaml <<EOF configs: registry.example.com: auth: username: reguser password: Registry123! tls: insecure_skip_verify: true EOF # 安全重启K3s服务,不会影响正在运行的资源 sudo systemctl restart k3s检查应用的配置:
sudo $(which k3s) crictl info # 使用jq查看 sudo $(which k3s) crictl info | jq .config.registry如果希望Kubernetes能够直接从这个私有registry拉取镜像,除了在registries.yaml中写入凭据外,还可以为Pod手动创建imagePullSecrets。关于如何使用ImagePullSecrets,另一篇关于Docker Hub速率限制的指南中有详细解释。
测试配置
使用需要身份验证的私有仓库中的镜像启动Pod:
$ kubectl run whalesay -it --restart=Never --image registry.example.com/reguser/whalesay:latest --rm -- cowsay hoge ______ < hoge > ------ \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ pod "whalesay" deleted通过以上步骤,你已经成功部署并配置了awx-on-k3s的私有容器registry,彻底突破了Docker Hub的限制。现在,你可以更自由地管理和使用容器镜像,确保AWX部署和运行的稳定性。
如果你在使用过程中遇到任何问题,可以参考项目中的tips/troubleshooting.md文档获取帮助。同时,tips/dockerhub-rate-limit.md中也提供了更多关于处理Docker Hub速率限制的方法。
希望这篇指南能帮助你顺利搭建自己的私有容器registry,享受更顺畅的AWX部署体验! 🚀
【免费下载链接】awx-on-k3sAn example implementation of AWX on single node K3s using AWX Operator, with easy-to-use simplified configuration with ownership of data and passwords.项目地址: https://gitcode.com/gh_mirrors/aw/awx-on-k3s
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考