一、环境准备与架构设计
1.1 Kubernetes集群基础配置
建议采用3节点集群架构(1主2从),通过kubeadm工具快速初始化:
# 主节点初始化kubeadm init --pod-network-cidr=10.244.0.0/16# 节点加入集群kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
需验证集群状态:
kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready control 5d v1.28.0worker-1 Ready <none> 5d v1.28.0
1.2 存储类配置优化
针对Harbor持久化存储需求,建议配置NFS或云存储CSI驱动:
# storageclass-nfs.yaml 示例apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: nfs-storageprovisioner: k8s-sigs.io/nfs-subdir-external-provisionerparameters:archiveOnDelete: "false"
二、Harbor私有仓库部署
2.1 安装前环境检查
- 确保节点满足4核8G最低配置
- 配置稳定的域名解析(如harbor.example.com)
- 准备HTTPS证书(推荐Let’s Encrypt)
2.2 Helm Chart部署方案
# 添加Harbor Helm仓库helm repo add harbor https://helm.goharbor.io# 自定义values.yaml配置expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: harbor-tlspersistence:persistentVolumeClaim:registry:storageClass: "nfs-storage"size: 50Gi# 执行安装helm install harbor harbor/harbor -f values.yaml
2.3 仓库管理最佳实践
- 项目命名规范:
<团队>-<环境>-<应用>(如dev-team1-springboot) - 镜像标签策略:
<版本>-<构建号>-<环境>(如v1.2.0-1024-prod) - 自动化清理策略:配置保留最近3个版本
三、Docker镜像构建优化
3.1 多阶段构建实践
# 基础构建阶段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.2 镜像安全加固
- 使用
docker scan进行漏洞检测 - 配置非root用户运行:
RUN groupadd -r appuser && useradd -r -g appuser appuserUSER appuser
- 最小化基础镜像(推荐使用
distroless镜像)
四、K8s部署SpringBoot应用
4.1 完整Deployment配置
# springboot-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: springboot-appspec:replicas: 3selector:matchLabels:app: springboottemplate:metadata:labels:app: springbootspec:containers:- name: springbootimage: harbor.example.com/dev-team1/springboot:v1.2.0-1024-prodports:- containerPort: 8080resources:requests:cpu: "500m"memory: "512Mi"limits:cpu: "1000m"memory: "1Gi"livenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10
4.2 配置管理方案
4.2.1 ConfigMap使用
kubectl create configmap app-config --from-file=application.yml
# 在Deployment中引用envFrom:- configMapRef:name: app-config
4.2.2 Secret加密管理
# 创建加密的Secretkubectl create secret generic db-credentials \--from-literal=username=admin \--from-literal=password=$(openssl rand -base64 16)
五、高级运维配置
5.1 镜像自动更新策略
配置ImagePullSecrets和自动更新:
# 在namespace级别创建secretkubectl create secret docker-registry regcred \--docker-server=harbor.example.com \--docker-username=admin \--docker-password=Harbor12345 \--docker-email=admin@example.com# 在Deployment中引用spec:template:spec:imagePullSecrets:- name: regcred
5.2 监控与日志方案
5.2.1 Prometheus监控配置
# ServiceMonitor示例apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: springboot-monitorspec:selector:matchLabels:app: springbootendpoints:- port: webpath: /actuator/prometheusinterval: 30s
5.2.2 日志收集方案
配置EFK(Elasticsearch-Fluentd-Kibana)堆栈:
# Fluentd DaemonSet配置片段containers:- name: fluentdimage: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearchenv:- name: FLUENT_ELASTICSEARCH_HOSTvalue: "elasticsearch.logging.svc"- name: FLUENT_ELASTICSEARCH_PORTvalue: "9200"
六、故障排查指南
6.1 常见问题处理
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 镜像拉取失败 | 网络策略限制 | 检查NetworkPolicy配置 |
| 应用启动失败 | 资源不足 | 调整requests/limits |
| 健康检查失败 | 端口配置错误 | 验证livenessProbe配置 |
| 日志未收集 | 权限问题 | 检查serviceAccount权限 |
6.2 调试技巧
- 使用
kubectl logs -f <pod-name>实时查看日志 - 通过
kubectl exec -it <pod-name> -- bash进入容器调试 - 配置临时调试容器:
kubectl run debug --image=busybox --restart=Never --rm -it -- bash
七、性能优化建议
7.1 镜像优化
- 镜像大小控制在500MB以内
- 使用分层构建减少层数
- 启用镜像压缩(Harbor支持)
7.2 部署优化
- 配置HPA自动扩缩容:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: springboot-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: springboot-appminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
7.3 网络优化
- 配置Ingress负载均衡策略:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: springboot-ingressannotations:nginx.ingress.kubernetes.io/load-balance: "round_robin"spec:rules:- host: app.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: springboot-serviceport:number: 8080
本文提供的完整方案已在生产环境验证,可帮助企业快速构建安全、高效的容器化应用交付体系。建议结合具体业务场景进行参数调优,并定期进行安全审计和性能基准测试。