简介:本文详细阐述如何在Kubernetes集群中部署Harbor私有镜像仓库,并配置k8s使用该仓库实现镜像安全存储与高效拉取,包含环境准备、部署步骤、k8s集成及最佳实践。
在容器化部署场景中,镜像仓库是核心基础设施。Harbor作为CNCF毕业项目,提供镜像签名、漏洞扫描、RBAC权限控制等企业级功能,与Kubernetes深度集成可显著提升镜像管理效率与安全性。本文将系统讲解Harbor在k8s环境中的部署与使用方法。
| 组件 | CPU | 内存 | 存储 | 副本数 |
|---|---|---|---|---|
| Harbor核心 | 2核 | 4GB | 100GB | 1 |
| Redis | 1核 | 2GB | 10GB | 1 |
| PostgreSQL | 1核 | 2GB | 50GB | 1 |
| 镜像存储 | - | - | 500GB+ | 动态扩展 |
# 添加Harbor Helm仓库helm repo add harbor https://helm.goharbor.io# 创建命名空间kubectl create ns harbor# 准备values.yaml(关键配置示例)expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: "harbor-tls"namespace: "harbor"ingress:hosts:- host: harbor.example.compaths:- path: /pathType: ImplementationSpecificpersistence:persistentVolumeClaim:registry:storageClass: "managed-nfs-storage"size: 100Gichartmuseum:storageClass: "managed-nfs-storage"size: 10Gidatabase:storageClass: "managed-nfs-storage"size: 10Giredis:storageClass: "managed-nfs-storage"size: 5Gi
# 安装cert-manager(如未安装)kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.yaml# 部署Harborhelm install harbor harbor/harbor -n harbor -f values.yaml# 验证部署状态kubectl get pods -n harborkubectl get ingress -n harbor
kubectl get secret --namespace harbor harbor-core-env -o jsonpath="{.data.HARBOR_ADMIN_PASSWORD}" | base64 -d
curl -v https://harbor.example.com
# 创建docker-registry类型secretkubectl create secret generic regcred \--from-file=.dockerconfigjson=<(echo '{"auths":{"harbor.example.com":{"auth":"<base64-encoded-username:password>"}}}') \--type=kubernetes.io/dockerconfigjson \-n <target-namespace>
apiVersion: v1kind: Podmetadata:name: private-regspec:containers:- name: private-reg-containerimage: harbor.example.com/library/nginx:latestimagePullSecrets:- name: regcred
# 在ServiceAccount中绑定SecretapiVersion: v1kind: ServiceAccountmetadata:name: defaultnamespace: defaultimagePullSecrets:- name: regcred
# 在Harbor中配置复制规则{"name": "k8s-cluster-sync","projects": [{"project_id": 1, "resource_filter": ["**"]}],"target": {"type": "harbor","url": "https://remote-harbor.example.com","access_id": "admin","access_secret": "<password>","insecure": false},"trigger": {"type": "manual","schedule": null},"filters": ["*.img"]}
trivy:enabled: trueignoreUnfixed: falseseverity: "CRITICAL,HIGH"
数据备份:
# 备份PostgreSQL数据库kubectl exec -n harbor <postgres-pod> -- pg_dump -U postgres -h 127.0.0.1 harbor > backup.sql# 备份配置文件kubectl cp harbor-core-<pod-id>:/etc/core/app.conf ./app.conf
# ServiceMonitor配置示例apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: harborlabels:release: prometheusspec:selector:matchLabels:app: harborendpoints:- port: httppath: /metrics
检查步骤:
kubectl get secret regcred -o yamldocker login harbor.example.comkubectl logs -n harbor <ingress-controller-pod>典型问题:
诊断工具:
kubectl top pods -n harbor查看资源使用优化措施:
安全加固:
高可用设计:
成本优化:
通过系统部署Harbor镜像仓库并与Kubernetes深度集成,企业可实现:
建议结合具体业务场景,制定分阶段的实施路线图,优先保障核心业务镜像的私有化存储,逐步扩展至全量容器化应用的镜像管理。