Docker镜像构建最佳实践

多阶段构建可显著减小最终镜像体积,基础镜像推荐使用Alpine或Distroless。通过分层优化减少构建时间,高频变更层放在Dockerfile下部。典型示例:

# 构建阶段
FROM golang:1.18 as builder
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /app

# 运行阶段
FROM alpine:latest  
COPY --from=builder /app /app
ENTRYPOINT ["/app"]

镜像扫描工具Trivy或Clair应在CI/CD流水线中集成,确保无CVE漏洞。镜像标签遵循语义化版本规范,禁止使用latest标签。

Kubernetes水平扩缩策略

HorizontalPodAutoscaler配置需结合自定义指标,CPU/Memory基础指标配合Prometheus Adapter采集QPS、延迟等业务指标。示例配置:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: payment-service
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: payment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: External
    external:
      metric:
        name: http_requests_per_second
        selector:
          matchLabels:
            app: payment
      target:
        type: AverageValue
        averageValue: 500

PDB(PodDisruptionBudget)确保最小可用实例数,滚动更新策略设置maxSurge/maxUnavailable控制发布节奏。

云原生日志收集方案

Fluent Bit作为DaemonSet部署,通过轻量级处理管道转发日志到中心系统。典型架构:

App Pods -> Stdout -> Docker JSON Log -> Fluent Bit -> (Kafka/Elasticsearch/Loki)

Loki相比ELK栈节省70%存储成本,适合Kubernetes动态环境。日志标签应包含:

fluent-bit.io/parser: json
fluent-bit.io/exclude: "false"

日志采样配置示例(10%采样率):

[INPUT]
    Name tail
    Path /var/log/containers/*.log
    Parser docker
    Tag kube.*
    Mem_Buf_Limit 5MB
    Skip_Long_Lines On
    Refresh_Interval 10
    Sample 10

关键日志需设置独立输出通道,敏感信息通过Filter插件进行脱敏处理。日志保留策略建议按分级设置,生产环境核心业务日志保留30天以上。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐