charts-syncer 是一款用于在 Helm 图表仓库之间同步 Helm 图表包及关联容器镜像的工具。它支持多种类型的仓库(如 HELM、CHARTMUSEUM、HARBOR、OCI、LOCAL),能够灵活适配不同的环境需求,包括在线同步和离线(断开连接的环境)同步场景。作为 Bitnami 容器镜像,charts-syncer 旨在简化跨仓库的图表迁移与维护流程。
.relok8s-images.yaml 文件)。requirements.yaml、Chart.yaml 等),确保依赖从目标仓库拉取。values.yaml 文件中包含 image.registry、image.repository 和 image.tag字段)*。.relok8s-images.yaml 文件(详见 https://github.com/vmware-tanzu/asset-relocation-tool-for-kubernetes#image-hints-file%EF%BC%89%E3%80%82同步所有 Helm*图表**```console
$ charts-syncer sync --config config.yaml
#### *从指定日期同步图表* ```console $ charts-syncer sync --config config.yaml --from-date 2020-05-15
仅同步每个图表的最新版本* ```console
$ charts-syncer sync --config config.yaml --latest-version-only*
### *高级使用***####*同步图表及关联容器镜像*默认仅同步图表包*,需在配置文件中启用容器镜像同步: ```yaml relocateContainerImages:* true # 启用容器镜像同步 source: repo:* ... target:* ...* ``` > **注意*:需确保源图表包含 `.relok8s-images.yaml` 文件,用于指定镜像位置信息。 ####* 断开环境中的图表与镜像同步*适用于源和目标仓库无法同时访问的场景,支持两步离线迁移: 1. **导出阶段**:从源仓库下载图表及镜像并保存到本地目录。 2. **导入阶段**:将本地目录中的图表及镜像上传到目标仓库*。 详细步骤参见 离线同步文档。 ### 配置说明*####*配置文件结构*配置文件需指定源仓库、目标仓库、同步规则等信息。完整配置项及说明见 https://github.com/bitnami/charts-syncer/blob/master/charts-syncer.yaml。 **示例配置文件**: ```yaml # 示例配置文件 relocateContainerImages: false # 是否同步容器镜像 source: repo: kind: HELM # 源仓库类型:HELM/CHARTMUSEUM/HARBOR/OCI/LOCAL url: https://charts.bitnami.com/bitnami # 源仓库URL # 源仓库认证信息(可选) # auth: # username: "SOURCE_USER" # password: "SOURCE_PWD" # 源容器镜像仓库认证(可选) # containers: # auth: # registry: "docker.io" # username: "IMAGE_USER" # password: "IMAGE_PWD" target: repoName: my-private-repo # 目标仓库名称(用于README更新) containerRegistry: registry.example.com # 目标容器镜像仓库地址 containerRepository: charts # 目标容器镜像仓库路径(可选) repo: kind: OCI # 目标仓库类型 url: https://registry.example.com/helm-charts # 目标仓库URL # 目标仓库认证信息(可选) # auth: # username: "TARGET_USER" # password: "TARGET_PWD" # 需同步的图表列表(OCI源仓库必填,其他类型可选,支持自动发现) charts: - redis - mariadb # 需跳过的图表列表(与charts字段互斥) # skipCharts: # - wordpress
仓库类型示例Harbor 仓库示例Harbor 图表仓库 URL 格式为 https://${HARBOR_DOMAIN}/chartrepo/${HARBOR_PROJECT}:
yamltarget: repo: kind: HARBOR url: https://harbor.example.com/chartrepo/my-project
OCI 仓库示例适用于 Harbor 2.0+ OCI 后端或 AWS ECR 等 OCI 兼容仓库:
yamltarget: repo: kind: OCI url: https://registry.example.com/my-project/helm-charts # 支持子路径 # OCI仓库认证(如Harbor机器人账号) repo: auth: username: "robot$my-project+sync-user" password: "robot-token"
本地目录示例将图表同步到本地目录,用于离线迁移:
yamltarget: repo: kind: LOCAL path: ./local-charts # 本地目录路径
环境变量配置认证信息可通过环境变量设置仓库认证,优先级高于配置文件:
| 环境变量 | 说明 |
|---|---|
| SOURCE_REPO_AUTH_USERNAME | 源仓库用户名 |
| SOURCE_REPO_AUTH_PASSWORD | 源仓库密码 |
| TARGET_REPO_AUTH_USERNAME | 目标仓库用户名 |
| TARGET_REPO_AUTH_PASSWORD | 目标仓库密码 |
| SOURCE_CONTAINERS_AUTH_REGISTRY | 源容器镜像仓库地址 |
| SOURCE_CONTAINERS_AUTH_USERNAME | 源容器镜像仓库用户名 |
| SOURCE_CONTAINERS_AUTH_PASSWORD | 源容器镜像仓库密码 |
| TARGET_CONTAINERS_AUTH_USERNAME | 目标容器镜像仓库用户名 |
| TARGET_CONTAINERS_AUTH_PASSWORD | 目标容器镜像仓库密码 |
仓库兼容性矩阵
| 源仓库类型 | 目标仓库类型 | 支持情况 |
|---|---|---|
| HELM | HELM | ❌ |
| HELM | CHARTMUSEUM | ✅ |
| HELM | HARBOR | ✅ |
| HELM | OCI | ✅ |
| HELM | LOCAL | ✅ |
| CHARTMUSEUM | HELM | ❌ |
| CHARTMUSEUM | CHARTMUSEUM | ✅ |
| CHARTMUSEUM | HARBOR | ✅ |
| CHARTMUSEUM | OCI | ✅ |
| CHARTMUSEUM | LOCAL | ✅ |
| HARBOR | HELM | ❌ |
| HARBOR | CHARTMUSEUM | ✅ |
| HARBOR | HARBOR | ✅ |
| HARBOR | OCI | ✅ |
| HARBOR | LOCAL | ✅ |
| OCI | HELM | ❌ |
| OCI | CHARTMUSEUM | ✅ |
| OCI | HARBOR | ✅ |
| OCI | OCI | ✅ |
| OCI | LOCAL | ✅ |
| LOCAL | HELM | ❌ |
| LOCAL | CHARTMUSEUM | ✅ |
| LOCAL | HARBOR | ✅ |
| LOCAL | OCI | ✅ |
| LOCAL | LOCAL | ✅ |
console# 拉取 charts-syncer 镜像(假设镜像名称为 bitnami/charts-syncer) docker pull bitnami/charts-syncer:latest # 运行同步(挂载本地配置文件) docker run --rm -v $(pwd)/config.yaml:/config.yaml bitnami/charts-syncer sync --config /config.yaml
consoledocker run --rm \ -v $(pwd)/config.yaml:/config.yaml \ -e SOURCE_REPO_AUTH_USERNAME=source-user \ -e SOURCE_REPO_AUTH_PASSWORD=source-pass \ -e TARGET_REPO_AUTH_USERNAME=target-user \ -e TARGET_REPO_AUTH_PASSWORD=target-pass \ bitnami/charts-syncer sync --config /config.yaml
同步时工具会自动修改图表文件以适配目标环境,主要变更如下:
修改镜像仓库地址,示例:
diff# values.yaml 变更示例 image: - registry: docker.io - repository: bitnami/ghost + registry: registry.example.com + repository: charts/ghost tag: 3.22.2-debian-10-r0
requirements.yaml 和 requirements.lock 中的仓库地址。Chart.yaml 和 Chart.lock 中的仓库地址。示例(Helm v3 的 Chart.lock):
diff# Chart.lock 变更示例 dependencies: - name: zookeeper - repository: https://charts.bitnami.com/bitnami + repository: https://registry.example.com/helm-charts version: 5.21.9
修改文档中的仓库添加命令和部署命令,示例:
diff# README.md 变更示例 ## TL;DR; ```console -$ helm repo add bitnami [***] -$ helm install my-release bitnami/ghost +$ helm repo add my-private-repo [***] +$ helm install my-release my-private-repo/ghost
## 在 Kubernetes 中部署 可通过 Kubernetes CronJob 实现定期自动同步。示例 CronJob 配置(详情参见 Kubernetes 部署指南): ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: charts-syncer spec: schedule: "0 3 * * *" # 每天凌晨3点执行 jobTemplate: spec: template: spec: containers: - name: charts-syncer image: bitnami/charts-syncer:latest command: ["sync", "--config", "/config/config.yaml"] volumeMounts: - name: config-volume mountPath: /config env: - name: SOURCE_REPO_AUTH_USERNAME valueFrom: secretKeyRef: name: repo-credentials key: source-username - name: SOURCE_REPO_AUTH_PASSWORD valueFrom: secretKeyRef: name: repo-credentials key: source-password # 其他环境变量... volumes: - name: config-volume configMap: name: charts-syncer-config restartPolicy: OnFailure
如需自行构建工具,参见 开发者文档。
Copyright © 2024 Broadcom. 术语“Broadcom”指 Broadcom Inc. 及其子公司。
本工具基于 Apache License 2.0 许可证开源。详情参见 LICENSE。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务