欢迎光临
我们一直在努力

高可用返利机器人服务的容器化部署:Docker + Kubernetes 基础架构配置

高可用返利机器人服务的容器化部署:Docker + Kubernetes 基础架构配置

大家好,我是 微赚淘客系统3.0 的研发者省赚客!

为支撑日均百万级用户消息请求与毫秒级响应要求,微赚淘客系统3.0 的返利机器人服务已全面容器化,基于 Docker 构建镜像,并通过 Kubernetes(K8s)实现弹性伸缩、故障自愈与滚动发布。本文详解核心配置与部署实践。

一、Dockerfile 编写规范

服务采用 Spring Boot 2.7 开发,使用多阶段构建减小镜像体积:

# 构建阶段
FROM maven:3.8.6-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests -q

# 运行阶段
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY –from=builder /app/target/rebate-bot-*.jar app.jar
EXPOSE 8080
HEALTHCHECK –interval=30s –timeout=5s –start-period=60s –retries=3 \\
CMD curl -f http://localhost:8080/actuator/health || exit 1
ENTRYPOINT ["java", "-XX:+UseG1GC", "-Xms512m", "-Xmx512m", "-jar", "app.jar"]

关键点:

  • 使用 slim 镜像降低攻击面;
  • 启用 G1GC 优化 GC 停顿;
  • 集成 Spring Boot Actuator 健康检查端点。

二、Kubernetes Deployment 配置

定义 deployment.yaml 实现无状态服务部署:

apiVersion: apps/v1
kind: Deployment
metadata:
name: rebatebot
namespace: juwatechprod
spec:
replicas: 6
selector:
matchLabels:
app: rebatebot
template:
metadata:
labels:
app: rebatebot
spec:
containers:
name: rebatebot
image: registry.juwatech.cn/rebatebot:v1.2.3
ports:
containerPort: 8080
env:
name: SPRING_PROFILES_ACTIVE
value: "prod"
name: TZ
value: "Asia/Shanghai"
resources:
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 60
periodSeconds: 30
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
volumeMounts:
name: logs
mountPath: /app/logs
volumes:
name: logs
emptyDir: {}

三、Service 与 Ingress 暴露

通过 ClusterIP + Ingress 对外提供 HTTPS 访问:

apiVersion: v1
kind: Service
metadata:
name: rebatebotsvc
namespace: juwatechprod
spec:
selector:
app: rebatebot
ports:
protocol: TCP
port: 80
targetPort: 8080

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rebatebotingress
namespace: juwatechprod
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
spec:
tls:
hosts:
bot.juwatech.cn
secretName: juwatechtlssecret
rules:
host: bot.juwatech.cn
http:
paths:
path: /
pathType: Prefix
backend:
service:
name: rebatebotsvc
port:
number: 80

TLS 证书通过 Cert-Manager 自动签发,juwatech-tls-secret 由其管理。

四、ConfigMap 与 Secret 管理敏感配置

数据库密码、OAuth2 密钥等通过 Secret 注入:

apiVersion: v1
kind: Secret
metadata:
name: rebatebotsecret
namespace: juwatechprod
type: Opaque
data:
TAOBAO_CLIENT_SECRET: <base64encoded>
DB_PASSWORD: <base64encoded>

apiVersion: v1
kind: ConfigMap
metadata:
name: rebatebotconfig
namespace: juwatechprod
data:
application-prod.yml: |
spring:
datasource:
url: jdbc:mysql://mysql.juwatech-prod.svc.cluster.local:3306/rebate_db
username: rebate_user
password: ${DB_PASSWORD}
redis:
host: redis.juwatech-prod.svc.cluster.local

在 Deployment 中挂载:

env:
name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: rebatebotsecret
key: DB_PASSWORD
volumeMounts:
name: configvolume
mountPath: /app/config
volumes:
name: configvolume
configMap:
name: rebatebotconfig

应用启动时加载 /app/config/application-prod.yml。

五、HPA 自动扩缩容

基于 CPU 与内存使用率动态调整副本数:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: rebatebothpa
namespace: juwatechprod
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: rebatebot
minReplicas: 3
maxReplicas: 20
metrics:
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75

在大促期间,Pod 数可自动从 6 扩展至 18,保障服务稳定性。

六、Java 应用适配 K8s 环境

服务需监听 0.0.0.0 并支持优雅停机:

package juwatech.cn.bot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
public class RebateBotApplication {
public static void main(String[] args) {
// 确保绑定到所有网络接口
System.setProperty("server.address", "0.0.0.0");
SpringApplication.run(RebateBotApplication.class, args);
}

@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://bot.juwatech.cn")
.allowedMethods("GET", "POST");
}
};
}
}

同时,在 application.yml 中启用优雅关闭:

server:
shutdown: graceful
spring:
lifecycle:
timeout-per-shutdown-phase: 30s

配合 K8s Pod 的 terminationGracePeriodSeconds: 45,确保正在处理的微信消息完成后再终止。

七、日志与监控集成

  • 日志输出至 stdout,由 Fluentd 收集至 ELK;
  • 暴露 /actuator/prometheus 端点,被 Prometheus 抓取;
  • Grafana 面板监控 QPS、错误率、JVM 堆内存。

通过上述配置,返利机器人服务在 K8s 集群中实现 99.99% 可用性,单集群支持 5000+ TPS。

本文著作权归 微赚淘客系统3.0 研发团队,转载请注明出处!

赞(0)
未经允许不得转载:171主机测评 » 高可用返利机器人服务的容器化部署:Docker + Kubernetes 基础架构配置
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址