Docker与Kubernetes容器管理实战指南

一、容器生命周期管理进阶

1.1 容器日志采集与分析

容器日志是故障排查的核心依据,Docker提供docker logs命令实现基础日志采集:

  1. # 基础日志查看(支持容器ID或名称)
  2. docker logs 8f7e2a1c9b3d
  3. # 实时日志流监控(类似tail -f)
  4. docker logs -f nginx-app
  5. # 限制日志行数(最近100行)
  6. docker logs --tail=100 redis-server
  7. # 结合时间戳的日志追溯(需容器启动时配置--log-opt)
  8. docker logs --since="2023-01-01T00:00:00" web-app

生产环境建议采用集中式日志方案:

  1. 日志驱动配置:通过--log-driver=json-file/syslog/journald指定日志格式
  2. 日志轮转策略:使用--log-opt max-size=10m --log-opt max-file=3控制日志文件大小与数量
  3. K8s日志集成:通过Sidecar模式部署日志收集器(如Fluentd/Filebeat)

1.2 容器状态精准控制

容器状态管理包含启动、暂停、停止等全生命周期操作:

  1. # 容器暂停(保留内存状态)
  2. docker pause mysql-db
  3. # 恢复暂停容器
  4. docker unpause mysql-db
  5. # 优雅停止容器(发送SIGTERM信号)
  6. docker stop web-app
  7. # 强制终止容器(发送SIGKILL信号)
  8. docker kill web-app
  9. # 容器重启策略(生产环境推荐)
  10. docker run --restart=on-failure:5 --name=worker worker-image

Kubernetes提供更精细的Pod生命周期管理:

  1. # Pod重启策略配置示例
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: critical-app
  6. spec:
  7. restartPolicy: Always # Always/OnFailure/Never
  8. containers:
  9. - name: main-container
  10. image: app-image:v1

二、容器状态深度诊断

2.1 容器健康检查机制

Docker通过docker inspect命令提供容器元数据查询:

  1. # 查询容器运行状态
  2. docker inspect -f '{{.State.Running}}' 8f7e2a1c9b3d
  3. # 获取容器完整状态树
  4. docker inspect --format='{{json .State}}' nginx-app
  5. # 检查容器网络配置
  6. docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis

Kubernetes引入更完善的健康检查体系:

  1. # Pod健康检查配置示例
  2. apiVersion: v1
  3. kind: Pod
  4. spec:
  5. containers:
  6. - name: api-server
  7. image: api-image:v2
  8. livenessProbe: # 存活检查
  9. httpGet:
  10. path: /health
  11. port: 8080
  12. initialDelaySeconds: 30
  13. periodSeconds: 10
  14. readinessProbe: # 就绪检查
  15. exec:
  16. command:
  17. - cat
  18. - /tmp/healthy

2.2 资源使用监控

容器资源监控是性能调优的基础:

  1. # 实时资源监控(需安装cadvisor)
  2. docker stats nginx-app
  3. # 进程级监控(进入容器)
  4. docker exec -it mysql-db top
  5. # 磁盘使用分析
  6. docker system df

推荐生产环境监控方案:

  1. Prometheus+Grafana:采集cAdvisor暴露的容器指标
  2. EFK日志栈:Elasticsearch+Fluentd+Kibana实现日志分析
  3. 自定义监控:通过Docker Remote API开发监控插件

三、Kubernetes容器编排实践

3.1 Pod资源管理

Kubernetes通过Pod实现容器编排:

  1. # 多容器Pod配置示例
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: web-pod
  6. spec:
  7. containers:
  8. - name: web-server
  9. image: nginx:alpine
  10. ports:
  11. - containerPort: 80
  12. - name: sidecar-logger
  13. image: log-collector:v1
  14. volumeMounts:
  15. - name: shared-logs
  16. mountPath: /var/log
  17. volumes:
  18. - name: shared-logs
  19. emptyDir: {}

3.2 控制器模式应用

Kubernetes提供多种控制器实现自动化管理:

  1. Deployment:声明式应用部署,支持滚动更新
  2. StatefulSet:有状态应用管理,保证持久化存储
  3. DaemonSet:节点级守护进程部署
  4. Job/CronJob:批处理任务调度
  1. # Deployment配置示例
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: web-deploy
  6. spec:
  7. replicas: 3
  8. selector:
  9. matchLabels:
  10. app: web
  11. template:
  12. metadata:
  13. labels:
  14. app: web
  15. spec:
  16. containers:
  17. - name: web-container
  18. image: web-image:v3
  19. ports:
  20. - containerPort: 8080

四、生产环境最佳实践

4.1 安全加固方案

  1. 镜像安全:使用可信基础镜像,定期扫描漏洞
  2. 运行时安全:启用Seccomp/AppArmor限制容器权限
  3. 网络隔离:通过NetworkPolicy实现Pod间访问控制
  4. 秘密管理:使用Secret对象存储敏感信息

4.2 高可用架构

  1. 多节点部署:避免单点故障
  2. 资源配额:通过ResourceQuota限制命名空间资源使用
  3. 自动扩缩:配置Horizontal Pod Autoscaler应对流量变化
  4. 灾备方案:跨可用区部署实现地理冗余

4.3 持续交付流水线

推荐CI/CD流程:

  1. 代码提交:触发镜像构建
  2. 镜像扫描:安全漏洞检测
  3. 测试环境部署:验证功能完整性
  4. 金丝雀发布:逐步扩大流量比例
  5. 生产环境全量发布:完成版本切换

五、故障排查工具集

  1. 日志分析:kubectl logs -f
  2. 事件查询:kubectl get events —sort-by=’.metadata.creationTimestamp’
  3. 描述对象:kubectl describe pod
  4. 执行命令:kubectl exec -it — /bin/sh
  5. 端口转发:kubectl port-forward 8080:80

通过系统掌握这些容器管理技术,开发者可以构建出高可用、可扩展的容器化应用架构。建议结合具体业务场景,在测试环境验证各项配置后再应用到生产环境,同时建立完善的监控告警体系,确保系统稳定运行。