有奖捉虫:云通信与企业服务文档专题,速来> HOT

操作场景

目前大多数开源应用的容器镜像(例如 Kubernetes、TensorFlow 等),都托管在境外镜像托管平台(例如 DockerHub、quay.io 等),在国内拉取镜像时可能存在网络问题导致拉取速度慢、甚至无法成功拉取等问题。常见解决方法为手动将镜像 Pull 到本地,再 Push 到自主搭建的镜像仓库进行手动同步,过程极其繁琐且无法覆盖全部仓库及最新镜像版本。腾讯云 容器镜像服务 TCR 企业版提供主流境外镜像托管平台加速服务, 可以有效解决境外镜像拉取难导致开源应用无法顺利部署的问题。本文将介绍 TKE 集群如何通过 TCR 加速服务实现境外镜像拉取加速。

限制条件

加速服务目前仅面向容器服务 TKE、容器镜像服务 TCR 用户。
加速服务目前只支持腾讯云 私有网络 VPC 访问,公网访问能力暂未开放,相关域名可以访问但无法提供实际的加速功能。

操作步骤

对于 TKE 集群,DockerHub 平台(docker.io)内公开镜像已默认配置加速,如需加速其他平台内镜像仓库,例如 quay.io,则需要进行相关配置。集群运行时为 Docker 或 Containerd,配置方法有所不同:
集群运行时为 Docker 的配置
集群运行时为 Containerd 的配置
对于运行时为 Docker 的节点,由于 Docker 本身不支持 docker.io 以外的加速配置,使用 docker.io 之外的境外容器镜像时,需要执行以下命令更改镜像地址的域名,将 quay.io 替换为 quay.tencentcloudcr.com。示例如下:
docker pull quay.tencentcloudcr.com/k8scsi/csi-resizer:v0.5.0
对于运行时为 Containerd 的节点,由于 Containerd 本身支持任意镜像仓库的加速地址配置,可以通过修改 Containerd 配置,实现不更改镜像地址就可自动加速拉取镜像,适用于大量境外镜像的场景,可减少大量地址修改的繁琐步骤。
1. TKE 添加节点或者使用节点池,可以将节点写入自定义脚本,通过脚本可以统一修改增量节点的 Containerd 配置、添加境外镜像的加速地址。脚本示例如下:
sed -i '/\\[plugins\\.cri\\.registry\\.mirrors\\]/ a\\\\ \\ \\ \\ \\ \\ \\ \\ [plugins.cri.registry.mirrors."quay.io"]\\n\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ endpoint = ["https://quay.tencentcloudcr.com"]' /etc/containerd/config.toml

或者手动修改存量节点的 Containerd 配置(/etc/containerd/config.toml),添加类似如下配置:
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."quay.io"]
endpoint = ["https://quay.tencentcloudcr.com"]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://mirror.ccs.tencentyun.com"]

说明
您还可以使用 Ansible 批量修改存量节点的 Containerd 配置,详情请参见 使用 Ansible 批量操作 TKE 节点
2. 执行以下命令重启 Containerd。示例如下:
systemctl restart containerd

3. 执行以下命令,使用原始镜像地址拉取镜像。示例如下:
crictl pull quay.io/k8scsi/csi-resizer:v0.5.0