TCR 集成指南
TCR 集成指南
Section titled “TCR 集成指南”腾讯云容器镜像服务 (Tencent Container Registry, TCR) 是存储和分发 ModelKit 的理想选择。TCR 完全兼容 OCI (Open Container Initiative) 标准,可以无缝托管 KitOps 打包的 ModelKit。
本文档介绍如何配置 TCR 企业版与 KitOps 的集成。
🎯 文档元信息
Section titled “🎯 文档元信息”- 适用产品: TCR 企业版 / TCR 个人版
- 适用场景: AI/ML 模型管理、MLOps 流水线
- Agent 友好度: ⭐⭐⭐⭐⭐
📋 前置条件
Section titled “📋 前置条件”- 腾讯云账号
- 已安装 Kit CLI
- TCR 企业版实例(推荐)或个人版
🏗️ TCR 架构说明
Section titled “🏗️ 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🛠️ 配置步骤
Section titled “🛠️ 配置步骤”1. 创建 TCR 企业版实例
Section titled “1. 创建 TCR 企业版实例”通过控制台创建
Section titled “通过控制台创建”- 登录 容器镜像服务控制台
- 选择左侧导航栏的 实例管理
- 点击 新建,配置以下参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
| 实例名称 | 全局唯一的实例标识 | ml-registry |
| 实例地域 | 选择与 TKE 集群相同的地域 | 按需选择 |
| 实例规格 | 按需求选择规格 | 基础版/标准版 |
| 存储后端 | 使用 COS 存储 | 自动创建 COS Bucket |
- 点击 确认 完成创建
通过 CLI 创建
Section titled “通过 CLI 创建”# 使用腾讯云 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 production2. 创建命名空间
Section titled “2. 创建命名空间”命名空间用于组织和隔离不同项目的 ModelKit。
通过控制台创建
Section titled “通过控制台创建”- 在 TCR 控制台选择 命名空间
- 点击 新建,配置参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
| 命名空间名称 | 命名空间标识 | ml-models |
| 访问级别 | 公开或私有 | 私有(推荐) |
# 建议的命名空间规划ml-models/ # 生产环境模型ml-models-staging/ # 预发布环境模型ml-models-dev/ # 开发环境模型ml-datasets/ # 共享数据集3. 配置访问凭证
Section titled “3. 配置访问凭证”获取长期访问凭证
Section titled “获取长期访问凭证”- 在 TCR 控制台选择 访问凭证
- 点击 新建,创建长期访问凭证
- 记录用户名和密码
!!! warning “安全提示” 长期凭证应妥善保管,建议:
- 使用 Kubernetes Secret 存储- 定期轮换凭证- 生产环境使用临时凭证使用 Kit CLI 登录
Section titled “使用 Kit CLI 登录”# 登录 TCR 实例kit login ml-registry-xxxx.tencentcloudcr.com \ -u <用户名> \ -p <密码>
# 验证登录状态kit version配置环境变量(CI/CD 推荐)
Section titled “配置环境变量(CI/CD 推荐)”# 设置环境变量export TCR_REGISTRY=ml-registry-xxxx.tencentcloudcr.comexport TCR_USERNAME=<用户名>export TCR_PASSWORD=<密码>
# 登录echo $TCR_PASSWORD | kit login $TCR_REGISTRY -u $TCR_USERNAME --password-stdin4. 配置内网访问
Section titled “4. 配置内网访问”为了提高安全性和降低流量成本,建议配置 VPC 内网访问。
创建内网访问链路
Section titled “创建内网访问链路”- 在 TCR 控制台选择 内网访问
- 点击 新建,配置参数:
| 参数 | 说明 |
|---|---|
| 关联 VPC | 选择 TKE 集群所在的 VPC |
| 关联子网 | 选择合适的子网 |
- 获取内网访问地址,格式如:
ml-registry-vpc.tencentcloudcr.com
配置 VPC 内 DNS 解析
Section titled “配置 VPC 内 DNS 解析”TCR 会自动在关联的 VPC 中配置私有 DNS 解析,TKE 集群中的 Pod 可以直接使用内网地址访问。
# 在 TKE 节点或 Pod 中验证内网解析nslookup ml-registry-xxxx.tencentcloudcr.com
# 应该解析到内网 IP(如 10.x.x.x)5. 与 TKE 集群集成
Section titled “5. 与 TKE 集群集成”配置 ImagePullSecret
Section titled “配置 ImagePullSecret”# 创建 Secret 用于拉取 ModelKitkubectl create secret docker-registry tcr-secret \ --docker-server=ml-registry-xxxx.tencentcloudcr.com \ --docker-username=<用户名> \ --docker-password=<密码> \ -n <命名空间>在 Pod 中使用
Section titled “在 Pod 中使用”apiVersion: v1kind: Podmetadata: name: model-inferencespec: 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 # ... 其他配置📦 推送 ModelKit 到 TCR
Section titled “📦 推送 ModelKit 到 TCR”基本推送流程
Section titled “基本推送流程”# 1. 打包 ModelKitkit pack . -t ml-registry-xxxx.tencentcloudcr.com/ml-models/my-model:v1.0.0
# 2. 推送到 TCRkit 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# 打包并推送多个标签kit pack . -t $TCR_REGISTRY/ml-models/sentiment:v1.2.0kit pack . -t $TCR_REGISTRY/ml-models/sentiment:latest
kit push $TCR_REGISTRY/ml-models/sentiment:v1.2.0kit push $TCR_REGISTRY/ml-models/sentiment:latest📥 从 TCR 拉取 ModelKit
Section titled “📥 从 TCR 拉取 ModelKit”# 拉取 ModelKitkit 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# 仅拉取模型文件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📊 最佳实践
Section titled “📊 最佳实践”# 推荐的命名格式<registry>/<namespace>/<model-name>:<version>
# 示例ml-registry.tencentcloudcr.com/ml-models/bert-chinese:v1.2.0ml-registry.tencentcloudcr.com/ml-models/bert-chinese:latestml-registry.tencentcloudcr.com/ml-models-staging/bert-chinese:v1.3.0-rc1标签管理策略
Section titled “标签管理策略”| 标签类型 | 格式 | 用途 |
|---|---|---|
| 语义化版本 | v1.2.3 | 正式发布版本 |
| 预发布版本 | v1.3.0-rc1 | 候选发布版本 |
| 构建标签 | build-abc123 | CI/CD 构建产物 |
| latest | latest | 最新稳定版(谨慎使用) |
| 日期标签 | 20240315 | 日常构建版本 |
# 语义化版本发布流程# 1. 开发阶段kit push $TCR/ml-models/model:v1.2.0-dev.1kit 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.0kit push $TCR/ml-models/model:latest生命周期策略
Section titled “生命周期策略”配置 TCR 的镜像保留策略,自动清理过期的 ModelKit:
- 在 TCR 控制台选择 版本保留
- 配置保留规则:
| 规则 | 建议配置 |
|---|---|
| 保留最新 N 个版本 | 保留最新 10 个版本 |
| 保留最近 N 天的版本 | 保留最近 90 天 |
| 排除规则 | 排除 v* 格式的正式版本标签 |
对于多地域部署场景,配置 TCR 的镜像同步功能:
- 在 TCR 控制台选择 同步复制
- 配置同步规则:
# 同步规则示例源实例: ml-registry-gz (广州)目标实例: ml-registry-sh (上海)同步规则: - 命名空间: ml-models 仓库: sentiment-model 标签过滤: v* # 只同步正式版本🔐 安全最佳实践
Section titled “🔐 安全最佳实践”1. 使用临时凭证
Section titled “1. 使用临时凭证”# 获取临时凭证(有效期 1 小时)TEMP_TOKEN=$(tccli tcr GetTempToken --output text)
# 使用临时凭证登录kit login $TCR_REGISTRY -u temp -p $TEMP_TOKEN2. 配置网络访问控制
Section titled “2. 配置网络访问控制”在 TCR 控制台配置访问白名单:
- 仅允许 TKE 集群所在 VPC 访问
- 配置公网访问 IP 白名单(CI/CD 服务器)
3. 启用镜像安全扫描
Section titled “3. 启用镜像安全扫描”TCR 企业版支持自动安全扫描,可以检测 ModelKit 中的:
- 已知漏洞
- 敏感信息泄露
- 配置安全问题
🔧 故障排查
Section titled “🔧 故障排查”推送失败:unauthorized
Section titled “推送失败:unauthorized”# 错误信息Error: unauthorized: authentication required
# 解决方案# 1. 检查凭证是否正确kit login $TCR_REGISTRY -u $USERNAME -p $PASSWORD
# 2. 检查命名空间是否存在# 3. 检查用户是否有推送权限拉取失败:not found
Section titled “拉取失败:not found”# 错误信息Error: manifest unknown: manifest unknown
# 解决方案# 1. 检查镜像地址和标签是否正确kit info $TCR_REGISTRY/namespace/repo:tag
# 2. 检查是否有拉取权限内网访问失败
Section titled “内网访问失败”# 诊断步骤# 1. 检查 VPC 内网访问是否已创建# 2. 检查 DNS 解析nslookup ml-registry-xxxx.tencentcloudcr.com
# 3. 检查安全组规则是否放通 443 端口