首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

运维必备:基于 Harbor 的 Helm Charts 批量拉取,从配置到自动化脚本

  • 25-04-18 15:00
  • 2482
  • 11155
juejin.cn

引言

在企业级 Kubernetes 环境中,Harbor 作为主流的镜像与 Helm Chart 管理工具,常被用于存储 Helm Charts。但在迁移、备份或离线部署场景中,批量拉取 Harbor 中的 Charts 可能面临效率低下或权限问题。本文将通过 Helm CLI + Shell 脚本的组合方案,实现一键化批量导出操作。


一、环境准备与 Helm 仓库配置

1.1 添加 Harbor 仓库

通过 Helm 命令行工具关联 Harbor 仓库,需指定项目路径和认证信息:

bash
代码解读
复制代码
# 配置变量(按实际环境修改) HARBOR_URL="https://harbor.example.com" PROJECT_NAME="your-project" USERNAME="admin" PASSWORD="your-password" # 添加 Helm 仓库 helm repo add harbor-repo ${HARBOR_URL}/chartrepo/${PROJECT_NAME} \ --username=${USERNAME} \ --password=${PASSWORD} # 强制更新仓库索引(避免缓存导致列表不全) helm repo update --force-update harbor-repo

注意:若 Harbor 版本 ≥2.6.0,需确保已弃用 ChartMuseum 并启用 OCI 兼容模式。

1.2 验证仓库可见性

bash
代码解读
复制代码
helm search repo harbor-repo # 应显示 Charts 列表

若列表为空,检查 Harbor 控制台 → 目标项目 → Helm Charts 是否已上传 Charts。


二、自动化批量拉取脚本

2.1 脚本核心逻辑

创建 pull-all-charts.sh,实现以下功能: • 动态获取 Charts 列表 • 按 Chart 名称创建目录 • 下载所有历史版本

bash
代码解读
复制代码
#!/bin/bash # 定义变量 REPO_NAME="harbor" # Helm 仓库名称 OUTPUT_DIR="./harbor-charts" mkdir -p "${OUTPUT_DIR}" # 获取所有 Charts 列表(格式:仓库名/Chart名) CHARTS=$(helm search repo ${REPO_NAME} -l | awk 'NR>1 {print $1}') # 遍历每个 Chart for CHART in ${CHARTS}; do # 提取 Chart 名称(去掉仓库名前缀) SHORT_NAME=$(echo "${CHART}" | sed "s|${REPO_NAME}/||") # 获取该 Chart 的所有版本 VERSIONS=$(helm search repo "${CHART}" --versions -o json | jq -r '.[].version') # 下载每个版本 for VERSION in ${VERSIONS}; do echo "正在拉取: ${SHORT_NAME} (版本 ${VERSION})" helm pull "${CHART}" --version "${VERSION}" --destination "${OUTPUT_DIR}" done done echo "所有 Charts 已下载到: ${OUTPUT_DIR}"

2.2 运行脚本

bash
代码解读
复制代码
chmod +x pull-all-charts.sh && ./pull-all-charts.sh

输出目录结构示例:

markdown
代码解读
复制代码
harbor-charts/ ├── nginx/ │ ├── nginx-1.2.3.tgz │ └── nginx-4.5.6.tgz └── redis/ ├── redis-7.0.0.tgz └── redis-8.1.0.tgz

三、常见问题与解决方案

3.1 权限错误(403 Forbidden)

• 原因:用户权限不足或认证信息过期 • 修复:

bash
代码解读
复制代码
# 重新配置仓库凭据 helm repo update harbor-repo --username=${USERNAME} --password=${PASSWORD}

需确保 Harbor 用户至少具备 Guest 角色。

3.2 Charts 列表不全

• 原因:Helm 缓存或分页限制 • 方案:改用 Harbor API 直接获取(示例片段):

bash
代码解读
复制代码
# 分页查询仓库列表 PAGE=1 while true; do REPO_PAGE=$(curl -s -k -u "${USERNAME}:${PASSWORD}" \ "${HARBOR_URL}/api/v2.0/projects/${PROJECT_ID}/repositories?page=${PAGE}&page_size=50") # 解析并追加到列表... done

完整脚本可参考网页3的 API 调用逻辑。

3.3 下载中断或超时

• 优化:增加重试机制

bash
代码解读
复制代码
for VERSION in ${VERSIONS}; do until helm pull "${CHART}" --version ${VERSION}; do echo "Retrying ${VERSION}..." sleep 10 done done

四、扩展应用场景

4.1 仅拉取最新版本

修改版本获取逻辑:

bash
代码解读
复制代码
VERSIONS=$(helm search repo "${CHART}" --versions -o json | jq -r '.[0].version')

4.2 与 CI/CD 流水线集成

在 GitLab CI 中配置阶段任务:

yaml
代码解读
复制代码
pull-charts: stage: deploy script: - apk add helm jq - ./pull-all-charts.sh artifacts: paths: - harbor-charts/

4.3 离线环境分发

打包成压缩文件后传输:

bash
代码解读
复制代码
tar czvf harbor-charts-$(date +%Y%m%d).tgz harbor-charts/

五、总结

通过本文方案,您可以:

  1. 快速备份:全量保存 Harbor 中的 Helm Charts
  2. 简化迁移:跨集群或跨 Harbor 实例同步 Charts
  3. 支持离线部署:与 Air-Gapped 环境无缝衔接

建议将脚本与定时任务结合(如 CronJob),实现定期自动化备份。对于大规模环境,可参考网页7的 API 分页方案优化性能。

注:本文转载自juejin.cn的ydswin的文章"https://juejin.cn/post/7491487414633447458"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

133
开发工具
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top