淘客app容器化部署方案:Docker与Kubernetes在返利系统中的实践

淘客app容器化部署方案:Docker与Kubernetes在返利系统中的实践

大家好,我是省赚客APP研发者阿可!省赚客APP(juwatech.cn)作为高并发导购返利平台,包含商品解析、佣金计算、订单回调、搜索推荐等多个微服务模块。为提升资源利用率、实现弹性伸缩与快速迭代,我们全面采用 Docker + Kubernetes 容器化部署架构。本文将结合实际配置文件与部署脚本,详解从镜像构建到 K8s 编排的完整实践。

Docker 镜像标准化:多阶段构建 Java 应用

以佣金计算服务 rebate-calculation-service 为例,使用多阶段构建减小镜像体积:

Dockerfile 复制代码
# 构建阶段
FROM maven:3.8.6-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests -Dspring.profiles.active=prod

# 运行阶段
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/target/rebate-calculation-service-1.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-XX:+UseG1GC", "-Xmx512m", "-jar", "app.jar"]

构建并推送至私有 Harbor 仓库:

bash 复制代码
docker build -t harbor.juwatech.cn/micro/rebate-calculation-service:1.0.3 .
docker push harbor.juwatech.cn/micro/rebate-calculation-service:1.0.3

Kubernetes Deployment:声明式部署微服务

每个服务对应一个 Deployment,确保副本数与滚动更新策略:

yaml 复制代码
# rebate-calculation-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rebate-calculation
  namespace: juwatech-prod
spec:
  replicas: 4
  selector:
    matchLabels:
      app: rebate-calculation
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: rebate-calculation
    spec:
      containers:
      - name: rebate-calculation
        image: harbor.juwatech.cn/micro/rebate-calculation-service:1.0.3
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"
        - name: JAVA_OPTS
          value: "-Xmx512m -Xms512m"
        resources:
          requests:
            memory: "300Mi"
            cpu: "200m"
          limits:
            memory: "600Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 5

Service 与 Ingress:暴露内部服务

通过 ClusterIP Service 供内部调用,Ingress 对外提供 API 网关入口:

yaml 复制代码
# rebate-calculation-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: rebate-calculation-svc
  namespace: juwatech-prod
spec:
  selector:
    app: rebate-calculation
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
yaml 复制代码
# api-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: juwatech-api-ingress
  namespace: juwatech-prod
  annotations:
    nginx.ingress.kubernetes.io/rate-limit: "10"
    nginx.ingress.kubernetes.io/rate-limit-window: "1m"
spec:
  rules:
  - host: api.juwatech.cn
    http:
      paths:
      - path: /rebate
        pathType: Prefix
        backend:
          service:
            name: rebate-calculation-svc
            port:
              number: 80

ConfigMap 与 Secret:配置外置

数据库连接、Redis 地址等敏感信息通过 Secret 管理,非敏感配置用 ConfigMap:

yaml 复制代码
# application-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: rebate-calculation-config
  namespace: juwatech-prod
data:
  application.yml: |
    spring:
      datasource:
        url: jdbc:mysql://mysql.juwatech.cn:3306/juwatech_commission
        username: ${DB_USER}
        password: ${DB_PASSWORD}
      redis:
        host: redis.juwatech.cn
        port: 6379

在 Deployment 中挂载:

yaml 复制代码
spec:
  containers:
  - name: rebate-calculation
    volumeMounts:
    - name: config-volume
      mountPath: /app/config
      readOnly: true
  volumes:
  - name: config-volume
    configMap:
      name: rebate-calculation-config

Secret 以环境变量注入:

yaml 复制代码
env:
- name: DB_USER
  valueFrom:
    secretKeyRef:
      name: db-credentials
      key: username
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: db-credentials
      key: password

HPA 自动扩缩容:应对流量高峰

基于 CPU 和自定义指标(如 RabbitMQ 队列长度)自动扩缩:

yaml 复制代码
# rebate-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: rebate-calculation-hpa
  namespace: juwatech-prod
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: rebate-calculation
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  - type: Pods
    pods:
      metric:
        name: rabbitmq_queue_messages_ready
      target:
        type: AverageValue
        averageValue: "50"

需配合 Prometheus Adapter 暴露 RabbitMQ 指标。

日志与监控集成

所有容器日志输出到 stdout,由 Filebeat 采集至 ELK;同时通过 Micrometer 暴露 /actuator/prometheus 指标,由 Prometheus 抓取:

java 复制代码
// juwatech.cn.config.MetricsConfig
@Configuration
public class MetricsConfig {
    @Bean
    MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
        return registry -> registry.config().commonTags("application", "rebate-calculation");
    }
}

本文著作权归聚娃科技省赚客app开发者团队,转载请注明出处!

相关推荐
杨了个杨898212 分钟前
阿里云 ACR Docker 镜像分发
阿里云·docker·云计算
Plastic garden41 分钟前
K8s(13) 题目回答
kubernetes
vistaup42 分钟前
群晖 hermes docker 安装无法自动启动 gateway
docker·hermes
willhuo1 小时前
射击训练系统 Docker 部署方案(OpenCloudOS 9.4)
运维·docker·容器
“码”力全开1 小时前
解耦安防黑盒:基于 Docker 容器化与 GB28181/RTSP 双协议架构的 AI 边缘计算视频平台(全源码交付)
人工智能·docker·架构
Plastic garden1 小时前
K8s(12)RuoYi on K8s 全流程 · 全思路 · 全排错 · 全配置
云原生·容器·kubernetes
休息一下…1 小时前
能用的Docker镜像
运维·docker·容器
AI服务老曹1 小时前
解耦安防黑盒:基于 Docker 的国标 GB28181 与 RTSP 统一接入 AI 视频管理平台架构设计(附源码交付与边缘计算实践)
人工智能·docker·音视频
ai产品老杨2 小时前
突破安防碎片化僵局:基于 Docker 与边缘计算的 AI 视频管理平台异构架构设计(附 GB28181/RTSP 统一接入与源码交付)
人工智能·docker·边缘计算
极客先躯2 小时前
高级java每日一道面试题-2026年02月08日-实战篇[Docker]-如何实现容器的快照和恢复?
java·运维·docker·容器·备份·持久化·恢复