你问我k8s部署难不难?我得说比养猫简单,但比养鱼难一点,我是“张三”,一个建站十年、踩坑八年的老派运维,今天不扯虚的,咱们直接上硬菜——我拿三台4核8G的腾讯云轻量服务器,跑一个日活十万的电商站,三年没崩过一次,但前半年差点把我送走。
Kubernetes部署,从半夜三点爬起来修集群到实现无人值守的三年血泪史
服务器选型:别为“高配”交智商税
第一次部署k8s,我脑子一热买了四台16核32G的服务器,结果发现node节点CPU利用率长期低于15%,血的教训:控制节点2核4G足够,工作节点4核8G起步,集群规模小于10台就别上高端硬件,后来我改用三台互通内网的阿里云轻量服务器,每月总成本不到800块,跑三个命名空间(nginx-ingress、后端API、监控栈)稳如老狗。
特别注意CPU架构必须统一,我当年混用了AMD和Intel的机器,结果跑kata容器时虚拟化层崩溃,排查了三天发现是CPU指令集差异,现在全换成鲲鹏ARM,反而因为指令集精简问题少了一半。
域名与SSL:那些年我手撕的证书
最坑爹的事:域名在阿里云,DNS解析在Cloudflare,SSL证书却在Let‘s Encrypt自动续签,因为Cloudflare的DNS记录设置了代理模式(橙云),导致cert-manager的DNS-01验证总超时,解决方案:把权威DNS迁到腾讯云DNS,cert-manager直接用HTTP-01验证,配合ingress-nginx的annotation自动重定向TLS。
SSL证书别迷信免费,某次我图省事用零信任证书,结果移动端安卓浏览器全部报错,后来改用DigiCert的通配符证书(每年600块),配合cert-manager + acme.sh自动续签,至今没掉过链子。注意:免费证书有效周期短,一旦续签失败,你的https站点会被所有浏览器标记为不安全。
程序部署:小团队最容易翻车的三个地方
镜像仓库选型血案
第一次用Docker Hub私有仓库,结果每天拉取限流200次,更新镜像时集群拉取失败导致服务中断,现在用华为云SWR(每月免费500G存储)+ Harbor做本地镜像缓存,务必配全映射:内网用Harbor域名,公网用SWR,防止单点故障。
ConfigMap与Secret的腐化问题
某次修改了ConfigMap里的数据库连接池参数,重启Pod后连接池配置还沿用旧值,排查发现忘记设置--from-literal参数,导致挂载文件模式错误。正确做法:用Helm的values.yaml管理所有配置,每次更新执行helm upgrade --reuse-values,但千万别手贱改部署里的直接引用。
裸奔的ingress-nginx
安全组默认开放了所有端口,导致某天半夜集群被挖矿病毒扫到。必须做三层防护:
- 节点安全组:仅开放22(跳板机IP白名单)、80/443(CDN回源IP)、6443(kube-apiserver,仅内网)
- 网络策略:ingress-nginx的Pod只允许来自CDN回源IP段的流量
- 应用层防护:ingress-nginx配置limit-rps、WAF规则,成本为零但能挡掉99%的扫描
长期维护:让集群自己干活
日志必须上EFK
第一次集群崩了,我用了三天才找到根因:某个Pod因为OOM被频繁重启,导致日志文件爆满占满磁盘。现在用Fluentd + Elasticsearch + Kibana三件套,设置保留3天索引,磁盘使用率超过80%自动触发告警和Pod驱逐。
备份恢复要两条腿走路
我用Velero(免费版)每天备份etcd和PV到对象存储,同时每周导出所有YAML到git仓库,某次误删namespace,三分钟就恢复了全部资源,只有当前用户会话丢失(因为有状态应用)。切记:备份恢复时要检查PV的storageclass是否匹配,之前因为迁移后存储类变成标准SSD,导致MySQL性能下降50%。
混沌工程最后救了我
有一次CDN回源IP变更,我通过ingress-nginx的访问日志发现延迟从200ms飙到2秒。后来定期用Chaos Mesh注入网络延迟故障,现在代码里预留了断路器,生产环境重试策略优化到三次自动熔断。
省钱的终极心法
- 用CVM竞价实例做工作节点:价格是包年包月的20%,配合cluster-autoscaler,晚间流量低谷自动缩容到0,比买包年包月省60%成本。
- 别买对象存储做PV:用nfs-subdir-external-provisioner挂载云硬盘,每个PV成本比对象存储便宜80%。
- 监控别买商业版:Prometheus + Grafana + AlertManager,配置算力、内存、磁盘、pod状态四个核心指标,比DataDog便宜n个量级。
最后送你一句话:没有银弹,但有套路,现在我的集群部署都在GitHub Actions里,一次push触发自动构建、测试、部署到k8s,全程30分钟,当初那些凌晨三点爬起来修集群的日子,终究成了技术债最好的学费。



发表评论