跳转到内容

TCR 集成指南

腾讯云容器镜像服务 (Tencent Container Registry, TCR) 是存储和分发 ModelKit 的理想选择。TCR 完全兼容 OCI (Open Container Initiative) 标准,可以无缝托管 KitOps 打包的 ModelKit。

本文档介绍如何配置 TCR 企业版与 KitOps 的集成。

  • 适用产品: TCR 企业版 / TCR 个人版
  • 适用场景: AI/ML 模型管理、MLOps 流水线
  • Agent 友好度: ⭐⭐⭐⭐⭐
  • 腾讯云账号
  • 已安装 Kit CLI
  • TCR 企业版实例(推荐)或个人版
graph TB
subgraph "TCR 企业版实例"
NS1[命名空间: ml-models]
NS2[命名空间: ml-datasets]
NS1 --> R1[仓库: sentiment-model]
NS1 --> R2[仓库: image-classifier]
NS2 --> R3[仓库: training-data]
R1 --> T1["v1.0.0 (ModelKit)"]
R1 --> T2["v1.1.0 (ModelKit)"]
R2 --> T3["latest (ModelKit)"]
end
subgraph "访问方式"
PUB[公网访问]
VPC[VPC 内网访问]
end
PUB --> NS1
VPC --> NS1
VPC --> NS2
  1. 登录 容器镜像服务控制台
  2. 选择左侧导航栏的 实例管理
  3. 点击 新建,配置以下参数:
参数说明建议值
实例名称全局唯一的实例标识ml-registry
实例地域选择与 TKE 集群相同的地域按需选择
实例规格按需求选择规格基础版/标准版
存储后端使用 COS 存储自动创建 COS Bucket
  1. 点击 确认 完成创建
Terminal window
# 使用腾讯云 CLI 创建 TCR 实例
tccli tcr CreateInstance \
--RegistryName ml-registry \
--RegistryType basic \
--TagSpecification.0.ResourceType instance \
--TagSpecification.0.Tags.0.Key env \
--TagSpecification.0.Tags.0.Value production

命名空间用于组织和隔离不同项目的 ModelKit。

  1. 在 TCR 控制台选择 命名空间
  2. 点击 新建,配置参数:
参数说明建议值
命名空间名称命名空间标识ml-models
访问级别公开或私有私有(推荐)
Terminal window
# 建议的命名空间规划
ml-models/ # 生产环境模型
ml-models-staging/ # 预发布环境模型
ml-models-dev/ # 开发环境模型
ml-datasets/ # 共享数据集
  1. 在 TCR 控制台选择 访问凭证
  2. 点击 新建,创建长期访问凭证
  3. 记录用户名和密码

!!! warning “安全提示” 长期凭证应妥善保管,建议:

- 使用 Kubernetes Secret 存储
- 定期轮换凭证
- 生产环境使用临时凭证
Terminal window
# 登录 TCR 实例
kit login ml-registry-xxxx.tencentcloudcr.com \
-u <用户名> \
-p <密码>
# 验证登录状态
kit version
Terminal window
# 设置环境变量
export TCR_REGISTRY=ml-registry-xxxx.tencentcloudcr.com
export TCR_USERNAME=<用户名>
export TCR_PASSWORD=<密码>
# 登录
echo $TCR_PASSWORD | kit login $TCR_REGISTRY -u $TCR_USERNAME --password-stdin

为了提高安全性和降低流量成本,建议配置 VPC 内网访问。

  1. 在 TCR 控制台选择 内网访问
  2. 点击 新建,配置参数:
参数说明
关联 VPC选择 TKE 集群所在的 VPC
关联子网选择合适的子网
  1. 获取内网访问地址,格式如:ml-registry-vpc.tencentcloudcr.com

TCR 会自动在关联的 VPC 中配置私有 DNS 解析,TKE 集群中的 Pod 可以直接使用内网地址访问。

Terminal window
# 在 TKE 节点或 Pod 中验证内网解析
nslookup ml-registry-xxxx.tencentcloudcr.com
# 应该解析到内网 IP(如 10.x.x.x)
Terminal window
# 创建 Secret 用于拉取 ModelKit
kubectl create secret docker-registry tcr-secret \
--docker-server=ml-registry-xxxx.tencentcloudcr.com \
--docker-username=<用户名> \
--docker-password=<密码> \
-n <命名空间>
apiVersion: v1
kind: Pod
metadata:
name: model-inference
spec:
imagePullSecrets:
- name: tcr-secret
initContainers:
- name: model-loader
image: ghcr.io/kitops-ml/kit:latest
env:
- name: TCR_PASSWORD
valueFrom:
secretKeyRef:
name: tcr-secret
key: .dockerconfigjson
# ... 其他配置
Terminal window
# 1. 打包 ModelKit
kit pack . -t ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0
# 2. 推送到 TCR
kit push ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0
# 3. 验证推送成功
kit info ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0
Terminal window
# 打包并推送多个标签
kit pack . -t $TCR_REGISTRY/ml-models/sentiment:v1.2.0
kit pack . -t $TCR_REGISTRY/ml-models/sentiment:latest
kit push $TCR_REGISTRY/ml-models/sentiment:v1.2.0
kit push $TCR_REGISTRY/ml-models/sentiment:latest
Terminal window
# 拉取 ModelKit
kit pull ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0
# 解包到指定目录
kit unpack ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0 -d ./model-files
Terminal window
# 仅拉取模型文件
kit unpack $TCR_REGISTRY/ml-models/my-model:v1.0.0 \
--filter=model \
-d ./model-only
# 拉取模型和特定数据集
kit unpack $TCR_REGISTRY/ml-models/my-model:v1.0.0 \
--filter=model \
--filter=datasets:validation \
-d ./model-with-val
Terminal window
# 推荐的命名格式
<registry>/<namespace>/<model-name>:<version>
# 示例
ml-registry.tencentcloudcr.com/ml-models/bert-chinese:v1.2.0
ml-registry.tencentcloudcr.com/ml-models/bert-chinese:latest
ml-registry.tencentcloudcr.com/ml-models-staging/bert-chinese:v1.3.0-rc1
标签类型格式用途
语义化版本v1.2.3正式发布版本
预发布版本v1.3.0-rc1候选发布版本
构建标签build-abc123CI/CD 构建产物
latestlatest最新稳定版(谨慎使用)
日期标签20240315日常构建版本
Terminal window
# 语义化版本发布流程
# 1. 开发阶段
kit push $TCR/ml-models/model:v1.2.0-dev.1
kit push $TCR/ml-models/model:v1.2.0-dev.2
# 2. RC 阶段
kit push $TCR/ml-models/model:v1.2.0-rc.1
# 3. 正式发布
kit push $TCR/ml-models/model:v1.2.0
kit push $TCR/ml-models/model:latest

配置 TCR 的镜像保留策略,自动清理过期的 ModelKit:

  1. 在 TCR 控制台选择 版本保留
  2. 配置保留规则:
规则建议配置
保留最新 N 个版本保留最新 10 个版本
保留最近 N 天的版本保留最近 90 天
排除规则排除 v* 格式的正式版本标签

对于多地域部署场景,配置 TCR 的镜像同步功能:

  1. 在 TCR 控制台选择 同步复制
  2. 配置同步规则:
# 同步规则示例
源实例: ml-registry-gz (广州)
目标实例: ml-registry-sh (上海)
同步规则:
- 命名空间: ml-models
仓库: sentiment-model
标签过滤: v* # 只同步正式版本
Terminal window
# 获取临时凭证(有效期 1 小时)
TEMP_TOKEN=$(tccli tcr GetTempToken --output text)
# 使用临时凭证登录
kit login $TCR_REGISTRY -u temp -p $TEMP_TOKEN

在 TCR 控制台配置访问白名单:

  • 仅允许 TKE 集群所在 VPC 访问
  • 配置公网访问 IP 白名单(CI/CD 服务器)

TCR 企业版支持自动安全扫描,可以检测 ModelKit 中的:

  • 已知漏洞
  • 敏感信息泄露
  • 配置安全问题
Terminal window
# 错误信息
Error: unauthorized: authentication required
# 解决方案
# 1. 检查凭证是否正确
kit login $TCR_REGISTRY -u $USERNAME -p $PASSWORD
# 2. 检查命名空间是否存在
# 3. 检查用户是否有推送权限
Terminal window
# 错误信息
Error: manifest unknown: manifest unknown
# 解决方案
# 1. 检查镜像地址和标签是否正确
kit info $TCR_REGISTRY/namespace/repo:tag
# 2. 检查是否有拉取权限
Terminal window
# 诊断步骤
# 1. 检查 VPC 内网访问是否已创建
# 2. 检查 DNS 解析
nslookup ml-registry-xxxx.tencentcloudcr.com
# 3. 检查安全组规则是否放通 443 端口