避坑指南:Harbor v2.13.0的Helm Chart在ARM64服务器部署时,镜像替换与PVC配置的那些坑

张开发
2026/4/10 23:08:33 15 分钟阅读

分享文章

避坑指南:Harbor v2.13.0的Helm Chart在ARM64服务器部署时,镜像替换与PVC配置的那些坑
ARM64架构下Harbor v2.13.0 Helm部署深度避坑指南在ARM64架构的Kubernetes集群上部署Harbor时即使对于经验丰富的运维工程师来说也可能会遇到一系列令人头疼的问题。不同于x86架构的顺畅体验ARM64环境下的镜像兼容性、存储配置和权限管理都需要特别关注。本文将聚焦于Harbor v2.13.0版本在ARM64服务器上的实际部署经验分享那些官方文档没有明确说明的坑和解决方案。1. ARM64镜像替换不只是改个地址那么简单当你在ARM64服务器上运行默认的Harbor Helm Chart时第一个报错通常是exec format error。这是因为官方镜像仓库(goharbor/)只提供amd64架构的镜像。虽然修改repository地址到第三方源(如ghcr.io/octohelm/)是必要步骤但实际操作中还有更多细节需要注意。1.1 镜像源的选择与验证目前主流的ARM64兼容Harbor镜像源有镜像源维护者更新频率已验证版本ghcr.io/octohelm/社区开发者较高v2.13.0docker.io/arm64v8/非官方移植较低v2.12.0私有构建自行编译自定义全版本重要提示不同镜像源可能存在细微行为差异特别是Trivy扫描器和Registry组件建议先在测试环境验证扫描功能。修改values.yaml时除了替换repository地址还需要注意tag的匹配# 原配置 image: repository: goharbor/nginx-photon tag: v2.13.0 # ARM64修改后 image: repository: ghcr.io/octohelm/harbor/nginx-photon tag: v2.13.0 # 必须保持与Chart版本一致1.2 镜像拉取策略优化在ARM64环境下由于镜像可能需要从海外仓库拉取建议调整pullPolicy并配置镜像缓存image: pullPolicy: IfNotPresent # 避免每次重新拉取 pullSecrets: - regcred # 预先创建的docker-registry secret对于生产环境更推荐搭建本地镜像缓存# 预先拉取关键镜像到所有节点 for image in nginx-photon harbor-portal harbor-core; do docker pull ghcr.io/octohelm/harbor/$image:v2.13.0 done2. PVC配置多组件存储的权限迷宫Harbor由多个有状态组件组成每个都需要独立的持久化存储。在ARM64环境中存储配置不当会导致各种难以诊断的问题。2.1 存储类与访问模式Harbor组件对存储的要求差异很大组件所需容量访问模式关键需求Registry≥5GiReadWriteMany高IOPSTrivy≥5GiReadWriteOnce低延迟Redis≥1GiReadWriteOnce内存映射Database≥1GiReadWriteOnce事务安全典型的NFS配置示例# values.yaml关键配置 persistence: enabled: true resourcePolicy: keep persistentVolumeClaim: registry: existingClaim: harbor-registry-pvc accessMode: ReadWriteMany size: 5Gi trivy: existingClaim: harbor-trivy-pvc accessMode: ReadWriteOnce size: 5Gi2.2 权限与所有权问题ARM64架构下的文件权限问题尤为突出特别是使用NFS时。一个实用的解决方案是在initContainer中预先设置正确的权限# 在values.yaml中添加initContainer配置 registry: initContainers: - name: volume-permissions image: busybox:1.35 command: [sh, -c, chown -R 10000:10000 /storage] volumeMounts: - name: registry-data mountPath: /storage对于Trivy组件还需要特别注意安全上下文配置trivy: securityContext: runAsUser: 1000 fsGroup: 10003. Helm安装过程中的特殊参数调整即使完成了镜像和存储配置直接安装仍可能失败。以下是几个ARM64专属的调整项。3.1 资源请求与限制ARM64节点的资源分配需要更精确的计算# values.yaml调整示例 resources: limits: cpu: 2 memory: 2Gi requests: cpu: 0.5 memory: 1Gi特别是Core组件在ARM64上需要更多内存core: resources: limits: memory: 4Gi # 比x86架构增加1Gi3.2 健康检查调优ARM64的启动时间通常较长需要延长探针超时livenessProbe: initialDelaySeconds: 180 # 默认60可能不足 periodSeconds: 20 readinessProbe: initialDelaySeconds: 60 failureThreshold: 54. 安装后验证与故障排查安装完成后以下命令可以帮助验证部署状态# 检查所有Pod状态 kubectl -n harbor get pods -o wide # 查看特定容器的日志 kubectl -n harbor logs -f deployment/harbor-core --tail50 # 测试端口连通性 kubectl -n harbor get svc telnet node-ip 30002常见问题及解决方案Pod卡在ContainerCreating检查镜像是否已正确拉取kubectl describe pod pod-name验证PVC绑定状态kubectl get pvc -n harborCore组件不断重启查看数据库连接配置kubectl exec -it deployment/harbor-core -- cat /etc/core/app.conf增加数据库连接超时在values.yaml中设置core.config.database.maxOpenConns: 50Trivy扫描失败检查缓存目录权限kubectl exec -it deployment/harbor-trivy -- ls -la /home/scanner/.cache更新漏洞数据库kubectl exec -it deployment/harbor-trivy -- trivy --cache-dir /home/scanner/.cache update在ARM64生产环境运行Harbor近半年后最大的教训是每次升级前务必在测试环境验证镜像兼容性。曾经因为一个次要版本升级导致Trivy适配器镜像不兼容不得不回滚整个部署。现在我们的流程是先在ARM64测试集群验证所有组件再同步到生产环境。

更多文章