告别重复操作:Harbor API批量管理镜像与项目实战指南
你是否还在手动点击界面管理上百个容器镜像?是否因项目权限配置繁琐而焦头烂额?本文将带你掌握Harbor API批量操作技巧,通过简单脚本实现项目创建、镜像清理、权限批量配置,让运维效率提升10倍。读完本文你将学会:
- 使用API批量创建标准化项目
- 一键清理过期镜像的自动化脚本
- 项目成员权限的批量配置方法
- 监控Harbor系统状态的实用工具
Harbor API概览
Harbor提供完整的RESTful API接口,所有Web界面操作均可通过API实现。API定义文件位于api/v2.0/swagger.yaml,包含认证、项目管理、镜像操作等10+类接口。服务路由配置在src/server/route.go中,核心API路径为/api/v2.0。
认证方式支持Basic Auth和Token认证,生产环境建议使用Token认证:
# 获取认证Token
curl -u "admin:Harbor12345" "https://harbor.example.com/api/v2.0/users/login" -X POST -H "Content-Type: application/json"
批量项目管理
批量创建项目
通过API批量创建符合企业规范的项目,设置统一的可见性和存储配额:
import requests
import json
base_url = "https://harbor.example.com/api/v2.0"
auth = ("admin", "Harbor12345")
headers = {"Content-Type": "application/json"}
# 项目配置列表
projects = [
{"name": "web-app", "public": False, "storage_limit": 50},
{"name": "backend-service", "public": False, "storage_limit": 100},
{"name": "tools", "public": True, "storage_limit": 20}
]
for project in projects:
url = f"{base_url}/projects"
data = {
"project_name": project["name"],
"public": project["public"],
"metadata": {"storage_limit": f"{project['storage_limit']}GB"}
}
response = requests.post(url, auth=auth, headers=headers, data=json.dumps(data))
if response.status_code == 201:
print(f"项目 {project['name']} 创建成功")
else:
print(f"项目 {project['name']} 创建失败: {response.text}")
批量查询项目信息
使用列表接口配合分页参数获取所有项目详情:
# 获取所有项目(分页)
curl -u "admin:Harbor12345" "https://harbor.example.com/api/v2.0/projects?page=1&page_size=100"
项目元数据管理通过/projects/{project_name_or_id}/metadatas接口实现,支持设置存储配额、 vulnerability 扫描策略等。
镜像批量操作
清理过期镜像
结合标签过滤和删除接口,实现自动清理30天前的非生产标签镜像:
def delete_old_tags(project, repo, days=30):
url = f"{base_url}/projects/{project}/repositories/{repo}/tags"
params = {"page": 1, "page_size": 100}
tags = requests.get(url, auth=auth, params=params).json()
for tag in tags:
create_time = datetime.fromisoformat(tag["created"].replace("Z", "+00:00"))
if (datetime.now(timezone.utc) - create_time).days > days and "prod" not in tag["name"]:
delete_url = f"{url}/{tag['name']}"
requests.delete(delete_url, auth=auth)
print(f"Deleted {project}/{repo}:{tag['name']}")
镜像复制任务管理
通过API创建跨数据中心的镜像复制任务,配置文件位于src/core/service/replication/:
// 创建复制规则请求体
{
"name": "dr-replication",
"description": "灾备复制规则",
"source_registry": {
"id": 1
},
"dest_registry": {
"id": 2
},
"trigger": {
"type": "manual"
},
"filters": [
{
"type": "name",
"value": "web-app/*"
}
]
}
权限批量配置
项目成员批量添加
通过/projects/{project_name_or_id}/members接口批量添加用户到项目:
def add_users_to_project(project_id, user_ids, role_id=3):
"""
role_id: 1-项目管理员, 2-开发人员, 3-访客
"""
url = f"{base_url}/projects/{project_id}/members"
for user_id in user_ids:
data = {
"user_id": user_id,
"role_id": role_id
}
requests.post(url, auth=auth, headers=headers, data=json.dumps(data))
LDAP用户批量导入
Harbor支持从LDAP服务批量导入用户,相关API定义在api/v2.0/swagger.yaml#L137-L169:
# 批量导入LDAP用户
curl -u "admin:Harbor12345" -X POST "https://harbor.example.com/api/v2.0/ldap/users/import" \
-H "Content-Type: application/json" \
-d '{"uid_list": ["user1", "user2", "user3"]}'
监控与自动化
系统状态监控
通过/statistics接口获取Harbor运行状态:
# 获取系统统计信息
curl -u "admin:Harbor12345" "https://harbor.example.com/api/v2.0/statistics"
返回结果包含项目总数、镜像数量、存储使用等关键指标,可集成到Prometheus监控系统,监控告警规则配置位于contrib/grafana-dashboard/。
API调用频率控制
为避免API请求过载,建议添加请求间隔控制:
import time
def rate_limited_request(url, method="get", **kwargs):
response = requests.request(method, url, **kwargs)
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 10))
time.sleep(retry_after)
return rate_limited_request(url, method, **kwargs)
return response
最佳实践与常见问题
批量操作安全策略
- 所有批量操作前先通过
GET请求验证筛选结果 - 关键操作启用审计日志,配置文件位于src/core/service/audit/
- 使用低权限API账号,通过src/core/service/rbac/配置最小权限
性能优化建议
- 大批量操作使用异步任务,通过src/jobservice/实现后台执行
- 分页查询时合理设置
page_size参数(建议50-100) - 避免在业务高峰期执行镜像清理等资源密集型操作
总结与后续学习
通过Harbor API可以实现从基础设施即代码到完整DevOps流程的闭环集成。建议进一步学习:
- Harbor SDK开发:src/pkg/client/
- 自定义Webhook开发:src/core/service/webhook/
- 高级复制策略:src/core/service/replication/
立即尝试本文提供的脚本,体验批量管理带来的效率提升!收藏本文,关注后续《Harbor API与Kubernetes集成实战》。
提示:所有API调用前请先在测试环境验证,生产环境建议启用API请求日志,配置路径src/core/service/log/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



