当前位置: 首页 > news >正文

【云原生与DevOps】03-K8s生产环境部署Checklist:你踩过这18个坑吗

专栏:云原生 & DevOps
难度:进阶
标签:Kubernetes生产环境checklist踩坑最佳实践


前言

K8s 在测试环境跑得好好的,一到生产就出问题。本文总结了真实血泪经验中的18个坑,每一条都是真实事故凝练的经验。


坑1:没配资源 limits,被一个Pod打挂整个节点

resources:requests:cpu:"250m"memory:"256Mi"limits:cpu:"1000m"memory:"512Mi"

教训:requests用于调度,limits用于限制。不配 limits,一个内存泄漏的 Pod 会把节点内存耗尽,导致 OOMKill 雪崩。


坑2:镜像标签用 latest,滚动更新失效

# 错误image:myapp:latest# 正确image:myapp:1.2.3-abc1234# 包含git commit hash

教训:latest不是版本,imagePullPolicy: Always会导致每次都拉镜像,降低启动速度。


坑3:没配健康检查,流量打到未就绪的Pod

readinessProbe:httpGet:path:/health/readyport:8080initialDelaySeconds:10periodSeconds:5failureThreshold:3livenessProbe:httpGet:path:/health/liveport:8080initialDelaySeconds:30periodSeconds:10failureThreshold:3

教训:readinessProbe控制是否接收流量,livenessProbe控制是否重启容器,两者缺一不可。


坑4:PodDisruptionBudget 没配,滚动更新导致服务中断

apiVersion:policy/v1kind:PodDisruptionBudgetmetadata:name:myapp-pdbspec:minAvailable:2# 滚动时保持至少2个可用selector:matchLabels:app:myapp

坑5:没配 HPA,突发流量直接挂

apiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:myapp-hpaspec:scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:myappminReplicas:2maxReplicas:20metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:70

坑6:ConfigMap 热更新不生效

默认情况下 Pod 不会感知 ConfigMap 的变更。解决方案:

  1. 使用 Reloader(推荐):https://github.com/stakater/Reloader
  2. 将配置版本写入 Deployment annotation,触发滚动更新
# 方案2:在annotation中记录configmap版本spec:template:metadata:annotations:configmap-version:"v3"# 改这里触发滚动更新

坑7:Service 类型用 NodePort 暴露生产服务

生产环境应使用 LoadBalancer 或 Ingress,NodePort 端口范围有限且难以管理。


坑8:没配 Pod 反亲和性,所有副本跑在同一节点

affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:-labelSelector:matchLabels:app:myapptopologyKey:"kubernetes.io/hostname"

坑9:Secret 明文写在 YAML 里推送到 Git

使用 Sealed Secrets 或 Vault:

# 安装 Sealed Secretshelm repoaddsealed-secrets https://bitnami-labs.github.io/sealed-secrets helminstallsealed-secrets sealed-secrets/sealed-secrets-nkube-system# 加密Secretkubeseal-oyaml<secret.yaml>sealed-secret.yaml

坑10:命名空间没做资源配额,Dev环境把生产资源耗尽

apiVersion:v1kind:ResourceQuotametadata:name:dev-quotanamespace:developmentspec:hard:requests.cpu:"4"requests.memory:8Gilimits.cpu:"8"limits.memory:16Gicount/pods:"20"

坑11:没配terminationGracePeriodSeconds,应用被强杀

spec:terminationGracePeriodSeconds:60# 给应用60秒优雅退出时间containers:-name:myapplifecycle:preStop:exec:command:["/bin/sh","-c","sleep 5"]# 等待LB摘除此Pod

坑12 - 坑18(核心原则速览)

坑号问题解决方案
12etcd 没备份配置 etcd 自动备份到 S3/OSS
13节点磁盘打满,Pod 被驱逐配置 evictionHard 阈值,及时清理镜像
14日志直接写容器内,重启丢失使用 DaemonSet 收集日志(Filebeat/Fluentd)
15RBAC 给了 cluster-admin,权限过大遵循最小权限原则
16镜像拉取无重试,冷启动失败配置 imagePullPolicy: IfNotPresent
17单 Master 高可用差生产至少3个 Master 节点
18升级 K8s 版本前未测试在独立集群先验证,看 Changelog

结语:这18个坑没有一个是"偶然"发生的,都有据可查。把这个 checklist 贴在你们团队的部署规范里,可以避免80%的生产事故。

http://www.gsyq.cn/news/1604784.html

相关文章:

  • Python操控AutoCAD完全指南:5个实战技巧提升设计效率
  • 从矩阵运算到密码实践:深入理解Hill密码的加解密机制
  • BiliTools终极指南:如何用跨平台工具箱高效管理B站资源
  • .NET DES加密实战:从原理到安全实现的完整指南
  • SAP FI 实战解析:会计凭证冲销与反记账的配置与报表影响
  • 【紧急预警】ChatGPT Plus个人账户额度正被动态收紧!3类高危使用行为触发自动降额(附2024Q2真实审计日志)
  • 办收据登报挂失多钱?收据登报挂失怎么办理?遗失声明怎么写
  • SQL注入核心原理与实战:数字型、字符型、搜索型注入深度解析
  • 从选型到实战:深入解析瓷片电容在电路设计中的核心应用
  • 全栈接口测试实战指南:从工具选型到自动化框架构建
  • 深入解析MSP-GANG430量产编程器底层协议与DLL API开发指南
  • SetDPI:3步掌握Windows命令行DPI调整的终极方案
  • MTEX工具箱:材料科学家必备的晶体学纹理分析利器
  • 3步实现Gmail账号自动化生成:告别繁琐手动注册的Python解决方案
  • 【课程设计/毕业设计】基于 SpringBoot+Vue 的考勤数据统计分析系统 企业员工日常出勤管控服务平台设计与实现【附源码、数据库、万字文档】
  • 信用卡拒付率高达83%?ChatGPT Plus国内订阅的5大支付陷阱,金融级风控专家亲授合规替代方案
  • TVS管实战选型指南:从关键参数到电路防护设计
  • 三分钟快速上手:哔咔漫画下载器终极指南,打造个人永久漫画库
  • HOG+SVM:从特征提取到行人检测的经典实践
  • 企业级应用逻辑漏洞挖掘实战:从越权访问到业务安全防御
  • 移动端API签名逆向实战:从抓包到算法还原的完整方法论
  • 即插即用 | 重塑跨维度交互,GAM注意力机制在ResNet上的实战优化(附完整代码)
  • 鼎阳示波器软件选件权限深度解析与升级实践
  • 科研绘图告别手动调参!Okbiye 一站式 AI 制图,分档额度适配全学科论文出图
  • 5分钟彻底解决Windows更新故障:Reset Windows Update Tool实战手册
  • 不用啃 SPSS!Paperxie 一站式数据分析模块,打通实证论文数据全流程落地
  • 【MicroPython】RP2040固件烧录实战与Thonny环境配置全攻略
  • 如何通过3个步骤用Winhance中文版彻底优化Windows系统性能
  • Playwright+Python自动化测试环境搭建与脚本录制实战指南
  • python爬虫实战项目|第95篇:爬虫系统AI智能化升级