使用Nexus3为containerd拉取镜像进行代理和缓存

1. 概述

在局域网内部,有多个k8s节点,都需要使用公网下载镜像,占用带宽且部分镜像仓库速度慢。

这时可以使用Nexus3在内网代理所有容器镜像仓库并缓存在本地。

Nexus3介绍

官方文档: https://help.sonatype.com/repomanager3/product-information

Nexus3 (Nexus Repository Manager 3) 是一个用于存储、组织和管理软件组件(如 JAR 文件、npm 包、Docker 镜像等)的仓库管理系统。它由 Sonatype 开发并维护。Nexus Repository Manager 支持许多流行的包管理工具和格式,包括 Maven, npm, rpm, apt, PyPI , Docker

Nexus3 提供了一个 Web UI,用户可以通过浏览器轻松地管理仓库和组件。

2. 部署Nexus3

2.1 使用dokcer部署Nexus3

# 这里为演示方便,直接使用docker一键部署
docker run -d --network=host  --name nexus sonatype/nexus3

2.2 获取Nexus3默认密码

docker exec nexus cat /nexus-data/admin.password

输出

515579c3-c2f9-4c07-93e7-7d0354f98e05

2.3 登录Nexus3

使用浏览打开 http://${YOUR_SERVER_IP}:8081

账号: admin

密码: 515579c3-c2f9-4c07-93e7-7d0354f98e05

3. Nexus3创建镜像仓库代理

3.1 创建Blob Store

BlobStores.png
Create_Blob_Store.png
Create_Blob_Store_Content.png

3.2 创建 docker hub 代理

create_respository.png
docker(proxy).png
docker(proxy)-hub01.png
docker(proxy)-hub02.png
docker(proxy)-hub03.png

3.3 创建 registry.k8s.io 代理

create_respository.png
docker(proxy).png
docker(proxy)-k8s01.png
docker(proxy)-k8s02.png
docker(proxy)-k8s03.png

3.4 创建docker-group

docker-group用于将多个docker-proxy聚合,统一对外提供服务;

这样客户端可以只需要配置一个地址就可以代理多个仓库;

create_respository.png
docker(group).png
docker(group)-01.png
docker(group)-02.png
docker(group)-03.png

4. containerd配置代理

本文containerd版本为1.6.21

  1. 编辑 containerd 配置文件。通常情况下,配置文件位于 /etc/containerd/config.toml

  2. 在 config.toml 文件中,找到 [plugins."io.containerd.grpc.v1.cri"] 部分,然后编辑或添加以下内容:

    [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."docker.io".tls]
        insecure_skip_verify = true

    [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.k8s.io".tls]
        insecure_skip_verify = true
    
    [plugins."io.containerd.grpc.v1.cri".registry.headers]

    [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        # 在此配置中,“docker.io”有两个镜像端点,Containerd 将首先使用 http://nexus3.tiga.cc:8888 拉取镜像。如果 http://nexus3.tiga.cc:8888 不可用,将会使用 https://index.docker.io 。
            endpoint = ["http://nexus3.tiga.cc:8888","https://index.docker.io"] 

        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
            endpoint = ["http://nexus3.tiga.cc:8888"]
  1. 重启 containerd 服务
systemctl restart containerd

5. 验证代理

5.1 crictl命令拉取镜像

crictl pull registry.k8s.io/ingress-nginx/controller:v1.7.1

5.2 登录Nexus3查看镜像是否存在

browse.png
browse-registry.k8s.io.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容