- 更新 Gitea runner 配置,支持优化的 CI/CD 环境 - 完善 Harbor HTTPS 配置和远程访问支持 - 优化 Harbor 日志配置,改用 json-file 驱动 - 添加 Docker 构建加速和代理缓存脚本 - 新增完整的文档和使用指南 - 添加 AI 开发工具集成配置 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Harbor 维护模块
概述
这是 macOS 工具集中的 Harbor 维护模块,提供完整的 Harbor 容器镜像仓库管理解决方案,包括服务部署、自动备份、健康监控和一键恢复功能。
功能特性
- ✅ 一键部署: Docker Compose 快速部署 Harbor 服务
- ✅ 自动备份: 双重定时任务保障 (cron + launchd)
- ✅ 安全恢复: 支持一键恢复和安全回滚
- ✅ 健康监控: 实时监控服务状态和数据完整性
- ✅ 数据迁移: 支持从现有 Harbor 无损迁移
- ✅ K8s 镜像管理: 自动预下载和推送 Kubernetes 相关镜像
- ✅ macOS 集成: 原生支持 macOS 系统特性
目录结构
harbor/
├── harbor.yml # Harbor 配置文件
├── docker-compose.yml # Docker 服务配置
├── harbor-data-protection.sh # 主管理脚本
├── harbor-backup.sh # 快速备份脚本
├── harbor-restore.sh # 快速恢复脚本
├── harbor-k8s-images.sh # Kubernetes 镜像预下载脚本
├── k8s-images.list # Kubernetes 镜像配置列表
├── common/ # Harbor 通用配置
└── README.md # 本文档
快速开始
1. 环境准备
确保系统已安装:
- Docker Desktop for Mac
- Git (用于版本控制)
2. 初始化设置
# 进入项目目录
cd /path/to/macos/harbor
# 复制环境配置文件
cp .env.example .env
# 根据需要修改配置(可选)
nano .env
# 初始化设置(自动配置定时任务等)
./harbor-data-protection.sh setup
3. 启动服务
# 启动 Harbor 服务
./harbor-data-protection.sh start
# 检查服务状态
./harbor-data-protection.sh health
4. 访问 Harbor
- Web 界面: https://localhost:8443
- Registry API: https://localhost:8443/api/v2.0/
- 管理员账号: admin / admin123
Docker 登录 (本地访问):
echo "admin123" | docker login localhost:8443 -u admin --password-stdin
Docker 登录 (远程访问):
echo "admin123" | docker login 192.168.1.83:8443 -u admin --password-stdin
远程访问说明:
- Harbor 已配置支持远程 IP 访问 (192.168.1.83:8443)
- 证书包含 localhost, 127.0.0.1, 和 192.168.1.83
- 可以从局域网内的其他机器推送和拉取镜像
使用说明
服务管理
# 启动服务
./harbor-data-protection.sh start
# 停止服务
./harbor-data-protection.sh stop
# 重启服务
./harbor-data-protection.sh restart
# 健康检查
./harbor-data-protection.sh health
# 查看统计信息
./harbor-data-protection.sh stats
Kubernetes 镜像管理
# 同步所有 Kubernetes 镜像到 Harbor
./harbor-k8s-images.sh sync
# 查看 Harbor 中的 Kubernetes 镜像
./harbor-k8s-images.sh list
# 清理旧镜像 (保留最近 10 个版本)
./harbor-k8s-images.sh cleanup 10
# 查看镜像配置文件
./harbor-k8s-images.sh config
备份操作
# 手动备份(自动命名)
./harbor-backup.sh
# 手动备份(指定名称)
./harbor-backup.sh my-backup-20231019
# 查看备份文件
ls -la ~/ops/backups/harbor/
恢复操作
# 查看可用备份
./harbor-restore.sh
# 从指定备份恢复
./harbor-restore.sh harbor-20231019-120000.tar.gz
高级操作
# 完整功能菜单
./harbor-data-protection.sh help
# 重新初始化设置
./harbor-data-protection.sh setup
# 查看统计信息
./harbor-data-protection.sh stats
配置说明
环境变量 (.env)
| 变量名 | 默认值 | 说明 |
|---|---|---|
HARBOR_DOMAIN |
192.168.1.83 | Harbor 服务器域名 |
HARBOR_HTTP_PORT |
8080 | HTTP 端口 |
HARBOR_HTTPS_PORT |
8443 | HTTPS 端口 |
HARBOR_ADMIN_PASSWORD |
admin123 | 管理员密码 |
HARBOR_DATA_DIR |
~/ops/data/harbor | Harbor 数据目录 |
HARBOR_BACKUP_DIR |
~/ops/backups/harbor | 备份存储目录 |
HARBOR_BACKUP_RETENTION_DAYS |
30 | 备份保留天数 |
HARBOR_BACKUP_INTERVAL_HOURS |
12 | 自动备份间隔(小时) |
Harbor 配置 (harbor.yml)
主要配置项:
hostname: Harbor 服务器地址http.port: HTTP 服务端口https.port: HTTPS 服务端口harbor_admin_password: 管理员密码data_volume: 数据存储路径
迁移说明
从现有 Harbor 迁移
如果已经有运行的 Harbor 实例,可以按照以下步骤无损迁移:
-
备份现有数据
# 停止现有服务 cd ~/harbor/harbor && docker-compose down # 备份数据目录 tar -czf harbor-backup-$(date +%Y%m%d-%H%M%S).tar.gz ~/harbor-data -
使用新模块
# 部署新模块 ./init-ops.sh # 恢复数据 ./harbor-restore.sh harbor-backup-*.tar.gz -
验证迁移结果
# 检查服务状态 ./harbor-data-protection.sh health # 验证镜像数量 ./harbor-data-protection.sh stats
备份机制
自动备份
系统提供双重保障的自动备份:
- Cron 任务: 传统 Unix 定时任务
- Launchd 任务: macOS 原生定时任务
默认每 12 小时自动备份一次,保留 30 天的备份文件。
备份内容
- Harbor 配置文件 (harbor.yml)
- Docker Compose 配置
- Harbor 数据目录 (包括镜像数据、数据库等)
- 通用配置目录
备份位置
~/ops/backups/harbor/
├── harbor-20231019-120000.tar.gz # 备份文件
├── harbor-20231019-120000.tar.gz.meta # 备份元数据
└── safety-backup-*.tar.gz # 恢复时的安全备份
恢复机制
安全恢复流程
- 停止服务: 安全停止所有 Harbor 服务
- 安全备份: 自动创建当前状态的安全备份
- 数据恢复: 从指定备份恢复数据
- 服务启动: 重启服务并验证状态
- 完整性检查: 验证数据完整性
恢回滚
如果恢复出现问题,可以使用安全备份回滚:
./harbor-restore.sh safety-backup-20231019-130000.tar.gz
监控和日志
健康检查内容
- Docker 环境状态
- Harbor 各服务运行状态
- 数据卷完整性
- 镜像仓库数量统计
- 备份状态检查
- 定时任务状态
日志文件位置
~/ops/logs/
├── harbor-protection.log # 主脚本日志
├── harbor-backup_stdout.log # 备份输出日志
└── harbor-backup_stderr.log # 备份错误日志
查看日志
# 查看主日志
tail -f ~/ops/logs/harbor-protection.log
# 查看定时任务日志
tail -f ~/ops/logs/harbor-backup_*.log
故障排除
常见问题
-
Docker 服务未启动
# 启动 Docker Desktop open /Applications/Docker.app -
端口冲突
# 检查端口占用 lsof -i :8080 lsof -i :8443 -
权限问题
# 设置脚本权限 chmod +x harbor-*.sh -
定时任务未执行
# 检查 launchd 任务 launchctl list | grep harbor # 检查 cron 任务 crontab -l | grep harbor
手动恢复定时任务
# 重新加载 launchd 任务
launchctl unload ~/Library/LaunchAgents/com.ljwx.harbor.backup.plist 2>/dev/null || true
launchctl load -w ~/Library/LaunchAgents/com.ljwx.harbor.backup.plist
# 重新设置 cron 任务
./harbor-data-protection.sh setup
性能优化
备份优化
- 调整备份频率:修改
HARBOR_BACKUP_INTERVAL_HOURS - 调整保留策略:修改
HARBOR_BACKUP_RETENTION_DAYS - 使用外部存储:修改
HARBOR_BACKUP_DIR到外部磁盘
服务优化
- 调整 Docker 资源限制
- 使用外部数据库(PostgreSQL)
- 配置 CDN 或反向代理
- 优化存储性能
安全建议
- 定期备份: 确保自动备份正常运行
- 异地备份: 将重要备份同步到云存储
- 访问控制: 配置防火墙规则限制访问
- 定期更新: 定期更新 Harbor 版本
- 监控告警: 配置服务状态监控
- SSL 证书: 使用有效的 SSL 证书
升级指南
Harbor 版本升级
# 1. 备份当前数据
./harbor-backup.sh pre-upgrade-$(date +%Y%m%d)
# 2. 停止服务
./harbor-data-protection.sh stop
# 3. 更新镜像版本
# 编辑 harbor.yml 或 docker-compose.yml,修改镜像标签
# 4. 启动服务
./harbor-data-protection.sh start
# 5. 验证升级
./harbor-data-protection.sh health
集成说明
与 CI/CD 集成
# CI 脚本示例
./harbor-backup.sh ci-pre-build-$(BUILD_NUMBER)
# 执行构建任务
./harbor-restore.sh ci-pre-build-$(BUILD_NUMBER).tar.gz
与监控系统集成
# 健康检查 API 调用
./harbor-data-protection.sh health
echo $?
🐙 Kubernetes 镜像管理详解
支持的镜像类型
Harbor Kubernetes 镜像管理脚本支持以下类型的镜像:
核心组件
- Kubernetes 控制平面: kube-apiserver, kube-controller-manager, kube-scheduler, kube-proxy
- 存储组件: etcd, Ceph RBD/CSDI 驱动
- 网络组件: Calico, Flannel CNI 插件
服务网格
- Istio: Proxyv2, Pilot, Citadel
- Ingress 控制器: NGINX Ingress Controller
监控和日志
- Prometheus: Prometheus Server, AlertManager
- Grafana: 数据可视化平台
- 日志收集: Fluent Bit, Elasticsearch, Kibana
安全组件
- 证书管理: Cert Manager (Controller, Webhook, CA Injector)
- 身份认证: OIDC Discovery Provider
CI/CD 工具
- 容器构建: Kaniko
- GitOps: ArgoCD, Argo Workflows
- 构建工具: Jenkins X
数据库和中间件
- 数据库: PostgreSQL, MySQL, MongoDB
- 缓存: Redis
- 消息队列: RabbitMQ, Apache Kafka
镜像配置管理
镜像配置文件 k8s-images.list 支持:
# 标准格式
<源镜像>:<标签> <目标别名> <描述>
# 多架构镜像支持
--multi-arch <源镜像>:<标签> <目标别名> <描述>
示例配置:
# Kubernetes 核心组件
k8s.gcr.io/kube-apiserver:v1.28.0 kube-apiserver Kubernetes API Server
k8s.gcr.io/kube-proxy:v1.28.0 kube-proxy Kubernetes Proxy
# 多架构镜像
--multi-arch k8s.gcr.io/kube-apiserver:v1.28.0 kube-apiserver-multi Kubernetes API Server (Multi-arch)
# 网络组件
quay.io/calico/cni:v3.26.0 calico/cni Calico CNI Plugin
环境变量配置
# Harbor 连接配置
export HARBOR_DOMAIN=localhost
export HARBOR_PORT=8443
export HARBOR_USER=admin
export HARBOR_PASSWORD=admin123
export HARBOR_PROJECT=kubernetes
# 清理配置
export CLEANUP_LOCAL_IMAGES=false # 是否清理本地临时镜像
# 日志配置
export LOG_FILE=~/ops/logs/harbor-k8s-images.log
export IMAGES_CONFIG_FILE=./k8s-images.list
使用场景
1. 离线环境部署
# 下载所有需要的 K8s 镜像到 Harbor
./harbor-k8s-images.sh sync
# 在离线环境中使用 Harbor 作为镜像源
kubectl create namespace k8s-image-sync
2. 多架构支持
# 自动下载并推送多架构镜像
# 在 k8s-images.list 中使用 --multi-arch 标记
./harbor-k8s-images.sh sync
3. 定期同步
# 设置定时任务,定期同步最新镜像
crontab -e
# 添加: 0 2 * * * cd /path/to/harbor && ./harbor-k8s-images.sh sync
4. 镜像版本管理
# 查看当前 Harbor 中的镜像
./harbor-k8s-images.sh list
# 清理旧版本,保留最新版本
./harbor-k8s-images.sh cleanup 5
故障排除
常见问题
-
镜像拉取失败
# 检查网络连接 curl -I https://k8s.gcr.io # 检查 Docker 配置 docker info -
Harbor 连接失败
# 检查 Harbor 服务状态 ./harbor-data-protection.sh health # 检查网络连通性 curl -k https://localhost:8443/api/v2.0/health -
权限问题
# 重新登录 Harbor echo "admin123" | docker login localhost:8443 -u admin --password-stdin # 检查项目权限 ./harbor-k8s-images.sh list -
多架构镜像问题
# 检查 Docker 版本是否支持多架构 docker version --format '{{.Server.Arch}}' # 启用 Docker 实验性功能(如果需要) export DOCKER_CLI_EXPERIMENTAL=enabled
日志查看
# 查看镜像同步日志
tail -f ~/ops/logs/harbor-k8s-images.log
# 查看详细错误信息
grep "ERROR" ~/ops/logs/harbor-k8s-images.log
性能优化
并发处理
脚本支持并发拉取和推送镜像,可以通过以下方式优化:
# 增加 Docker 并发限制
export DOCKER_CLIENT_TIMEOUT=120
export COMPOSE_HTTP_TIMEOUT=120
存储优化
# 清理本地镜像以节省空间
export CLEANUP_LOCAL_IMAGES=true
# 定期清理 Docker 缓存
docker system prune -f
网络优化
# 配置镜像加速器(如果需要)
# 在 /etc/docker/daemon.json 中添加:
# {
# "registry-mirrors": ["https://your-mirror.com"]
# }
许可证
MIT License - 可自由使用和修改
支持
如有问题或建议,请通过以下方式联系:
- 查看日志文件排查问题
- 检查 GitHub Issues
- 提交新的 Issue 或 Pull Request