apiVersion: apps/v1 kind: Deployment metadata: name: order-service namespace: erp labels: app: order-service version: v2 module: order-management spec: replicas: 3 selector: matchLabels: app: order-service template: metadata: labels: app: order-service version: v2 spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - order-service topologyKey: kubernetes.io/hostname containers: - name: order-service image: erp-order-service:latest imagePullPolicy: IfNotPresent ports: - containerPort: 8082 name: http protocol: TCP env: - name: ORDER_SERVICE_PORT value: "8082" - name: NACOS_HOST value: "nacos.erp.svc.cluster.local" - name: NACOS_PORT value: "8848" - name: NACOS_NAMESPACE value: "public" - name: PROFILE value: "prod" # 数据库配置 - name: DB_HOST value: "mysql.erp.svc.cluster.local" - name: DB_PORT value: "3306" - name: DB_NAME value: "erp_db" - name: DB_USER valueFrom: secretKeyRef: name: erp-db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: erp-db-secret key: password # Redis配置 - name: REDIS_HOST value: "redis.erp.svc.cluster.local" - name: REDIS_PORT value: "6379" - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: erp-redis-secret key: password # Feign服务URL - name: STOCK_SERVICE_URL value: "http://stock-service" - name: FINANCE_SERVICE_URL value: "http://finance-service" - name: PLATFORM_SYNC_URL value: "http://platform-sync-service" # JVM配置 - name: JAVA_OPTS value: "-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport" resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" cpu: "1000m" livenessProbe: httpGet: path: /actuator/health port: 8082 initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /actuator/health port: 8082 initialDelaySeconds: 30 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 lifecycle: preStop: exec: command: ["sh", "-c", "sleep 5"] volumeMounts: - name: timezone mountPath: /etc/localtime readOnly: true - name: logs mountPath: /app/logs volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai - name: logs emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: order-service namespace: erp labels: app: order-service annotations: prometheus.io/scrape: "true" prometheus.io/port: "8082" prometheus.io/path: "/actuator/prometheus" spec: type: ClusterIP ports: - port: 8082 targetPort: 8082 protocol: TCP name: http selector: app: order-service --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: order-service-hpa namespace: erp spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: order-service minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 10 periodSeconds: 60 scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 - type: Pods value: 4 periodSeconds: 15 selectPolicy: Max --- # ServiceMonitor for Prometheus apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: order-service-monitor namespace: erp labels: app: order-service spec: selector: matchLabels: app: order-service endpoints: - port: http path: /actuator/prometheus interval: 15s