云原生适配:Docker镜像构建、K8s水平扩缩与日志收集

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天以上。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值