K8s环境下Docker+Harbor私有仓库部署SpringBoot应用全攻略
2025.10.10 18:46浏览量:0简介:本文详细介绍在Kubernetes环境下搭建Docker与Harbor私有镜像仓库的完整流程,涵盖环境准备、Harbor安装配置、Docker镜像推送及SpringBoot应用部署,提供可落地的操作指南。
一、环境准备与前提条件
1.1 Kubernetes集群基础要求
Kubernetes集群需满足以下核心条件:
- 版本要求:建议使用1.18+稳定版本,确保支持Ingress、StatefulSet等关键功能
- 节点资源:至少2个Worker节点(建议4核8G+配置),预留10%资源用于系统组件
- 网络插件:需部署Calico/Flannel等CNI插件,确保Pod间网络互通
- 存储方案:配置StorageClass(如NFS/Ceph),为Harbor提供持久化存储
1.2 Docker环境配置
在所有节点执行以下操作:
# 安装Docker CEcurl -fsSL https://get.docker.com | sh# 配置cgroup驱动(与kubelet一致)cat > /etc/docker/daemon.json <<EOF{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://<mirror>.mirror.aliyuncs.com"]}EOFsystemctl restart docker
1.3 Helm安装配置
推荐使用Helm3管理Harbor部署:
# 安装Helmcurl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh && ./get_helm.sh# 添加Harbor仓库helm repo add harbor https://helm.goharbor.io
二、Harbor私有仓库搭建
2.1 部署架构设计
推荐采用高可用架构:
2.2 Helm部署Harbor
创建values-custom.yaml自定义配置:
expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: "harbor-tls"namespace: "harbor"ingress:hosts:- core: harbor.example.com- notary: notary.example.compersistence:persistentVolumeClaim:registry:storageClass: "managed-nfs-storage"accessMode: ReadWriteOncesize: 100Gidatabase:internal:password: "Harbor12345"
执行部署命令:
kubectl create ns harborhelm install harbor harbor/harbor -f values-custom.yaml -n harbor
2.3 关键配置验证
- 检查Pod状态:
kubectl get pods -n harbor | grep -v Running | wc -l
- 验证Ingress路由:
curl -I https://harbor.example.com
- 初始化管理员账户:
kubectl logs -n harbor <harbor-core-pod> | grep "admin password"
三、Docker镜像管理
3.1 镜像推送配置
配置Docker信任证书:
mkdir -p /etc/docker/certs.d/harbor.example.comscp root@harbor-server:/path/to/ca.crt /etc/docker/certs.d/harbor.example.com/
登录Harbor仓库:
docker login harbor.example.com# 输入用户名/密码(admin/初始化密码)
3.2 镜像构建规范
推荐使用多阶段构建的Dockerfile示例:
# 基础镜像层FROM eclipse-temurin:17-jdk-jammy as builderWORKDIR /appCOPY . .RUN ./gradlew bootJar# 运行时镜像层FROM eclipse-temurin:17-jre-jammyWORKDIR /appCOPY --from=builder /app/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","app.jar"]
3.3 镜像命名规范
遵循以下命名规则:
harbor.example.com/<project>/<app-name>:<version>-<env># 示例:harbor.example.com/devops/user-service:1.0.2-prod
四、SpringBoot应用部署
4.1 Kubernetes部署清单
创建deployment.yaml示例:
apiVersion: apps/v1kind: Deploymentmetadata:name: user-servicespec:replicas: 3selector:matchLabels:app: user-servicetemplate:metadata:labels:app: user-servicespec:containers:- name: user-serviceimage: harbor.example.com/devops/user-service:1.0.2-prodports:- containerPort: 8080resources:requests:cpu: "500m"memory: "512Mi"limits:cpu: "1000m"memory: "1Gi"envFrom:- configMapRef:name: user-service-config- secretRef:name: user-service-secrets
4.2 配置管理方案
ConfigMap配置示例:
kubectl create configmap user-service-config \--from-literal=SPRING_PROFILES_ACTIVE=prod \--from-literal=SERVER_PORT=8080 \--from-literal=DB_URL=jdbc
//db-cluster:5432/userdb
Secret加密配置:
kubectl create secret generic user-service-secrets \--from-literal=DB_PASSWORD=$(openssl rand -base64 32)
4.3 服务暴露与监控
创建Service资源:
apiVersion: v1kind: Servicemetadata:name: user-servicespec:selector:app: user-serviceports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
配置Ingress路由:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: user-service-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /spec:rules:- host: api.example.comhttp:paths:- path: /userspathType: Prefixbackend:service:name: user-serviceport:number: 80
五、运维与优化建议
5.1 镜像安全扫描
配置Harbor自动扫描:
启用Trivy集成:
# 在values-custom.yaml中添加trivy:enabled: trueignoreUnfixed: falseskipUpdate: false
创建扫描策略:
curl -X POST "https://harbor.example.com/api/v2.0/projects/1/policies/vulnerability" \-H "accept: application/json" \-H "Content-Type: application/json" \-d '{"name": "critical-only","project_id": 1,"severity": "critical","automated": true}'
5.2 性能优化建议
- 镜像优化:
- 使用Distroless基础镜像
- 启用Layer缓存
- 压缩镜像层
- 部署优化:
- 配置PodDisruptionBudget
- 启用HPA自动扩缩容
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: user-service-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: user-serviceminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
5.3 备份恢复方案
- 定期备份配置:
```bash备份Harbor数据库
kubectl exec -n harbor— \
pg_dump -U postgres -h localhost harbor > harbor_backup.sql
备份持久化数据
kubectl cp -n harbor
2. 灾难恢复流程:- 重建K8s集群- 重新部署Harbor- 恢复数据库备份- 导入镜像数据# 六、常见问题解决方案## 6.1 镜像推送失败排查1. 检查证书有效性:```bashopenssl s_client -connect harbor.example.com:443 -showcerts
- 验证权限配置:
kubectl logs -n harbor <harbor-core-pod> | grep "permission denied"
6.2 Pod启动异常处理
检查镜像拉取:
kubectl describe pod <pod-name> | grep "Failed to pull image"
查看容器日志:
kubectl logs -n <namespace> <pod-name> --previous
6.3 性能瓶颈分析
资源监控:
kubectl top pods -n <namespace> --containers
网络诊断:
kubectl get endpoints <service-name>kubectl describe svc <service-name>
通过以上完整方案,开发者可以在Kubernetes环境中构建安全、高效的Docker+Harbor私有镜像仓库,并实现SpringBoot应用的标准化部署。建议结合具体业务场景调整参数配置,定期进行安全审计和性能优化。

发表评论
登录后可评论,请前往 登录 或 注册