实时部署微服务时,我直接上配置,别整那些虚头巴脑的铺垫。选Docker+Kubernetes,别搞Kubernetes+Docker,这玩意儿你懂的,管它名字叫什么,部署起来就一个字:乱。你要是没在生产环境扛过流量,别碰Kubernetes,它不是银弹,只是个复杂到没朋友的工具。发Docker镜像时加--build-arg,别忘记改构建参数,否则你启动十次都报错。容器编排用K8s,别用Swarm,Swarm在分布式高并发下会吃掉你的CPU,而且你可能会在某个深夜发现,你的Pod总是在一个节点上死循环。
我现在用的是K8s的Deployment+Service+Ingress组合,这三样东西跑起来就稳。Deployment的replicas设3,但别搞太多,除非你准备好了自动扩缩容的规则。Service用ClusterIP,别用NodePort,除非你有特殊需求。Ingress配置SSL证书时,千万别用let's encrypt,它会因为DNS解析慢导致证书失效。正确定义好ingress-nginx的配置,外部访问才不会出问题。记得把ingress的tls部分写成snippet,别硬编码,这样维护起来更轻松。
部署过程中最恶心的是镜像拉取失败,尤其是私有仓库。设置pullPolicy为IfNotPresent,但别指望它能自动拉取。你得在K8s集群里提前拉过镜像,否则每次重启都得等它拉取。更恶心的是,有些镜像需要特定的arch,比如arm64,你得在部署命令里指定--platform=linux/arm64,否则会报错。还有,别用kubectl apply,用kubectl replace,不然你可能在凌晨三点发现,你的服务莫名其妙重启了三回,连日志都没留下。
微服务都用istio做服务网格,别用consul或者etcd,那些玩意儿现在都跟不上趋势了。istio的sidecar注入需要在namespace里加标签,比如istio-injection=enabled,这一步千万别漏。配置istio的VirtualService时,记得用http.redirect和http.route,别用tcp,除非你真需要。网络策略配置要小心,别把整个服务都暴露出去,否则会像被捅了刀子一样,整个系统都崩溃。istio的mTLS配置要提前测试,别等到线上才发现鉴权失败。
你要是用docker compose部署,别用默认的networks配置,单独定义个bridge网络比默认的好用多了,也不会出现容器互相访问失败的问题。docker compose的depends_on功能别当真,它不保证服务启动顺序,你得自己用脚本或者healthcheck控制。环境变量要写成.env文件,别硬编码在docker-compose.yml里,这样你改起来方便,也不怕别人看到敏感信息。容器日志要用--log-driver=json-file,别用syslog,否则你可能在排查问题时找不到关键日志。
日志聚合用ELK stack,别用Grafana或者Prometheus,它们虽然能做监控,但日志处理不如ELK专业。Elasticsearch配置时,别忘记加cluster.name和node.name,否则你的日志会分散在多个索引里,根本找不到。Logstash的filter部分写成grok格式,别用正则,这样匹配更准确。Kibana的可视化部分,别用默认的dashboard,自己写query语句才能看到真实数据。微服务日志要打上traceID,这样你才能追查某个请求到底走了哪个链路。
配置文件用Consul或者etcd,别用本地的,不然你一重启就没了。Consul的KV存储要加acl,别以为没人会拿你的数据。etcd的集群别用单节点,至少三个节点,不然你随时可能因为一个节点挂掉导致整个系统崩溃。配置文件同步用etcdctl,别用kubectl,它不支持实时同步。访问Consul的API要带token,不然你的配置会被随便改。微服务配置项最好用YAML,别用JSON,结构清晰,不容易出错。
业务逻辑分离用Spring Cloud或者Dubbo,别用Dubbo+Spring Boot+K8s,那玩意儿你懂的,容易出问题。微服务注册中心用Nacos,别用Eureka,消息队列用Kafka,别用RabbitMQ,Kafka性能高,而且集群管理方便。消息队列的分区数要根据并发量预估,别随便设个10,那可能撑不住。数据库用MySQL集群,别用单机,主从复制+binlog同步才是正道。数据库连接池用HikariCP,别用C3P0,它会吃掉你的内存。
监控用Prometheus+Grafana,别用Zabbix,它配置太麻烦。Prometheus的服务发现别用静态配置,用K8s的ServiceMonitor,这样会自动发现所有服务。指标采集要加--enable-server-metrics,别漏了。Grafana的dashboard别照搬,自己写query,把每个微服务的CPU、内存、请求延迟都画出来。别用Service mesh的监控,它会当成额外开销,你的CPU飙升你会心疼。
部署时别用kubectl apply,用kubectl replace,否则可能会出现重复资源的问题。别用helm,它会让你的部署变得复杂。每次修改配置,都重新生成yaml文件,别直接改,这样你不会在某天发现你的服务突然没了。容器启动参数写成命令行,别用ENV变量,这样更可控。镜像版本别用latest,用具体tag,比如v1.0.0,这样能回滚。微服务之间的调用时间别超过500ms,否则你会被限流。
如果你用的是K8s的HPA,别跟它玩心跳,它不是你想象的那么智能。HPA的scaleInterval设成1m,别设成5s,会把你CPU打爆。自动扩缩容别用CPU指标,用请求延迟或者QPS,这样更合理。别用kubectl rollout status,用kubectl get hpa,看它实际的replicas变化。如果你用的是阿里云的K8s服务,别用默认的弹性伸缩策略,它可能总是在错误的时候缩容。微服务的副本数别设成5,2-3个就足够了,多了反而不稳定。
别用kubectl describe看日志,用kubectl logs -f直接看,不然你可能在等十分钟才看到问题。日志滚动策略用logrotate,别用docker的默认配置,它不够灵活。微服务别用Nginx做负载均衡,用K8s的Service做,更简单。Service的type设为LoadBalancer,别用ClusterIP,否则外界无法访问。别用NodePort,它会暴露所有节点的端口,安全问题一大堆。如果服务无法访问,先看Service的endpoint是否为空,再看Deployment的readinessProbe是否正常。
别忽视容器的资源限制,CPU和内存分配太随意,会让你的集群频繁OOM。每个容器的limit和request要合理设置,别盲目调高。使用kubectl describe pod看看每个容器的资源使用情况,别只看CPU利用率。如果服务经常重启,先看livenessProbe和readinessProbe的配置,可能你的健康检查没设置好。微服务之间通信用istio的DestinationRule,别用K8s的Service,它更灵活。别用普通TCP做服务发现,用istio的mTLS,这样更安全。
别用kubectl rollout undo,用kubectl rollout history和kubectl rollout revert,这样控制更精确。每次部署前先做一次canary发布,别直接全量上线,这样能发现问题。canary发布用kubectl apply -f canary.yaml,别用helm,它太复杂。docker image的build命令带--no-cache,别用默认,否则你可能被旧镜像拖后腿。用docker buildx build做多平台构建,别用docker build,它不支持arm64。部署时记得切换context,用kubectl config set-context,别每次写全路径。
实测 | 微服务部署 | 建议收藏
实时部署微服务时,我直接上配置,别整那些虚头巴脑的铺垫。选Docker+Kubernetes,别搞Kubernetes+Docker,这玩意儿你懂的,管它名字叫什么,部署起来就一个字:乱。你要是没在生产环境扛过流量,别碰Kubernetes,它不是银弹,只是个复杂到没朋友的工具。发Docker镜像时加--build-arg,别忘记改构建参数,否则你启动十次都
DevOps实战AI1 次阅读
Related
延伸阅读

纯干货 | Angular Signals的17种样式方案前端工程 · 2026-07-14

新手必看:Cassandra性能优化实战 | 9分钟学会数据库 · 2026-07-10

DeepSeek V4源码解析:趋势预判 | 未来五年预判大模型资讯 · 2026-07-10

保姆级教程 | PostgreSQL优化:性能优化实战数据库 · 2026-07-10

4个MongoDB索引SQL调优,性能提升10倍数据库 · 2026-07-14

OpenAI官方 | Codex定价成本优化 | 文档不再手写Codex智能 · 2026-07-10