一、环境准备与架构设计
在K8s集群中部署Docker与Harbor私有仓库需完成三项基础准备:
- K8s集群搭建:建议采用3节点高可用架构(1主2从),通过
kubeadm或Rancher等工具快速部署。验证集群状态需执行kubectl get nodes,确保所有节点处于Ready状态。 - 存储卷配置:Harbor需持久化存储镜像数据,推荐使用NFS或云存储(如AWS EBS)。以NFS为例,需在所有节点安装NFS客户端并挂载共享目录:
# 节点端安装NFS客户端sudo apt install nfs-common# 创建本地挂载点sudo mkdir /mnt/harbor-storage# 挂载NFS共享目录sudo mount -t nfs 192.168.1.100:/nfs/harbor /mnt/harbor-storage
- 网络策略规划:需开放443(HTTPS)、80(HTTP重定向)、22(SSH管理)端口,并通过Ingress或NodePort暴露服务。建议使用
MetalLB实现裸金属环境的负载均衡。
二、Harbor私有仓库安装与配置
Harbor作为企业级镜像仓库,提供RBAC权限控制、镜像扫描等高级功能,安装步骤如下:
1. 依赖环境安装
# 安装Docker与Docker Composecurl -fsSL https://get.docker.com | shsudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose# 验证安装docker --versiondocker-compose --version
2. Harbor部署
从GitHub获取最新版本(以v2.6.2为例):
wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-online-installer-v2.6.2.tgztar xvf harbor-online-installer-v2.6.2.tgzcd harbor
修改harbor.yml配置文件关键参数:
hostname: harbor.example.com # 需配置DNS解析http:port: 80https:port: 443certificate: /data/cert/server.crtprivate_key: /data/cert/server.keystorage_driver:name: filesystemfs_driver:rootdirectory: /mnt/harbor-storageharbor_admin_password: Harbor12345 # 默认管理员密码
执行安装脚本:
sudo ./install.sh
安装完成后,通过docker-compose ps验证服务状态,确保core、database、portal等容器均处于Up状态。
3. 客户端配置
在开发环境配置Docker信任Harbor证书:
# 将证书复制至Docker证书目录sudo mkdir -p /etc/docker/certs.d/harbor.example.comsudo cp server.crt /etc/docker/certs.d/harbor.example.com/# 重启Docker服务sudo systemctl restart docker
登录Harbor仓库:
docker login harbor.example.com
三、SpringBoot应用容器化与部署
以典型SpringBoot应用为例,演示从代码到K8s部署的全流程:
1. 应用Docker化
创建Dockerfile:
FROM openjdk:17-jdk-slimWORKDIR /appCOPY target/demo-app-0.0.1-SNAPSHOT.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]
构建镜像并推送至Harbor:
# 构建镜像(标签需包含Harbor地址)docker build -t harbor.example.com/library/demo-app:v1 .# 推送镜像docker push harbor.example.com/library/demo-app:v1
2. K8s部署配置
创建Deployment与Service的YAML文件:
# deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: demo-appspec:replicas: 3selector:matchLabels:app: demo-apptemplate:metadata:labels:app: demo-appspec:containers:- name: demo-appimage: harbor.example.com/library/demo-app:v1ports:- containerPort: 8080resources:requests:cpu: "100m"memory: "256Mi"limits:cpu: "500m"memory: "512Mi"# service.yamlapiVersion: v1kind: Servicemetadata:name: demo-app-servicespec:selector:app: demo-appports:- protocol: TCPport: 80targetPort: 8080type: NodePort
应用配置并验证:
kubectl apply -f deployment.yamlkubectl apply -f service.yaml# 验证部署状态kubectl get podskubectl get svc
四、高级配置与运维建议
-
镜像安全策略:
- 启用Harbor的镜像扫描功能(集成Clair或Trivy)
- 在K8s中配置
ImagePullSecrets:kubectl create secret docker-registry regcred \--docker-server=harbor.example.com \--docker-username=admin \--docker-password=Harbor12345 \--docker-email=admin@example.com
在Deployment中引用:
```yaml
spec:
containers: - name: demo-app
image: harbor.example.com/library/demo-app:v1
imagePullSecrets: - name: regcred
```
-
自动部署流水线:
结合Jenkins或GitLab CI实现自动化构建-推送-部署流程:// Jenkinsfile示例pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean package'}}stage('Docker Build & Push') {steps {script {docker.withRegistry('https://harbor.example.com', 'harbor-credentials') {def image = docker.build("harbor.example.com/library/demo-app:${env.BUILD_ID}")image.push()}}}}stage('Deploy to K8s') {steps {sh 'kubectl set image deployment/demo-app demo-app=harbor.example.com/library/demo-app:${BUILD_ID}'}}}}
-
监控与日志:
- 集成Prometheus监控Harbor仓库指标
- 通过EFK(Elasticsearch-Fluentd-Kibana)栈收集应用日志
五、常见问题解决方案
-
镜像推送失败:
- 检查证书配置:
curl -v https://harbor.example.com - 验证存储空间:
df -h /mnt/harbor-storage
- 检查证书配置:
-
K8s Pod启动失败:
- 查看事件日志:
kubectl describe pod <pod-name> - 检查镜像拉取权限:
kubectl logs <pod-name>
- 查看事件日志:
-
Harbor性能优化:
- 数据库调优:修改
harbor.yml中的database配置 - 启用Redis缓存:部署独立Redis服务并修改配置
- 数据库调优:修改
六、总结与最佳实践
-
安全加固:
- 定期轮换Harbor管理员密码
- 启用项目级RBAC权限控制
- 配置镜像签名验证(Notary)
-
高可用设计:
- Harbor集群部署(需共享存储)
- K8s多区域部署应对节点故障
-
成本优化:
- 镜像分层存储优化
- 合理设置Pod资源请求/限制
通过本文的完整流程,开发者可在K8s环境中快速构建企业级Docker+Harbor私有仓库体系,实现SpringBoot应用的自动化部署与高效运维。实际生产环境中,建议结合具体业务需求调整存储、网络和安全配置,并建立完善的CI/CD流程以提升交付效率。