1. 项目概述:当微服务遇见云原生
三年前我接手一个遗留系统的改造项目,这个单体架构的电商平台每次发版都需要停机2小时,高峰期扩容更是噩梦。当我们把系统拆分成12个微服务后,新问题出现了:测试环境部署需要3天,生产环境经常出现"在我机器上能跑"的经典问题。直到引入Docker和Kubernetes,才真正实现了"一次构建,随处运行"的云原生理想。
这个技术组合正在重塑现代应用交付方式:Docker将应用及其依赖打包成标准化单元,Kubernetes则让这些单元在分布式环境中智能运行。2023年CNCF调查报告显示,96%的组织正在或计划使用Kubernetes,而Docker仍是容器运行时的事实标准。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计解析
2.1 微服务容器化设计原则
我们采用"单进程容器"模式,每个容器只运行一个微服务进程。以用户服务为例,其Dockerfile关键配置包括:
dockerfile复制FROM openjdk:17-jdk-alpine
COPY target/user-service-1.0.0.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
重要提示:alpine基础镜像虽小但可能缺少glibc等库,对于Java应用建议使用官方jre镜像而非精简版
分层构建策略能显著提升构建效率。下面这个优化后的Dockerfile构建时间从4分钟降至90秒:
dockerfile复制# 构建阶段
FROM maven:3.8.6-amazoncorretto-17 AS builder
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
# 运行阶段
FROM amazoncorretto:17-alpine
COPY --from=builder /target/*.jar /app.jar
2.2 Kubernetes编排设计
典型的微服务Kubernetes部署包含以下核心资源:
- Deployment:定义Pod副本数和更新策略
- Service:提供内部服务发现和负载均衡
- Ingress:管理外部访问路由
- ConfigMap/Secret:配置与敏感数据管理
以下是一个订单服务的Deployment示例:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: registry.example.com/order-service:v1.2.0
ports:
- containerPort: 8080
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
livenessProbe:
httpGet:
path: /actuator/health
