讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用Kubernetes部署分布式应用

雨晨吖_1356

雨晨吖_1356

发布时间:2026-09-20 08:11:37

|

184人浏览过

|

来源于php中文网

原创

StatefulSet必须用于有状态组件,因Deployment无法保障Pod稳定身份、有序启停和专属PVC绑定,否则会导致数据丢失、DNS解析失败及PV错乱。

如何用kubernetes部署分布式应用

直接上生产环境的分布式应用,不能靠 Deployment 硬扛——有状态组件(比如数据库、消息队列、向量库)必须用 StatefulSet,否则扩缩容会丢数据、DNS 解析失败、PV 绑定错乱。

为什么不能全用 Deployment 部署分布式应用

Deployment 适合无状态服务,比如 API 网关、前端、计算型微服务。但分布式系统里常含以下组件,它们依赖稳定身份和存储:

  • PostgreSQL / MySQL 主从集群:需要固定 Pod 名(pg-0pg-1)、独立 PVC、有序启停
  • Redis 哨兵或集群模式:哨兵节点需固定端口映射和 DNS 可达性,redis-sentinel-0.dify-redis-headless 这类域名只在 StatefulSet + Headless Service 下有效
  • Milvus / Elasticsearch / RocketMQ:每个实例需绑定专属 PV,且启动顺序影响元数据同步(如 Milvus 的 rootcoord 必须先于 datacoord

Deployment 部署这类组件,常见报错包括:FailedAttachVolume(PVC 多次绑定冲突)、connection refused(Pod 重启后 DNS 名失效)、etcdserver: request timed out(节点间无法建立稳定 peer 连接)。

StatefulSet 必配三要素:Headless Service + volumeClaimTemplates + 稳定网络标识

缺一不可,否则无法形成真正可用的分布式拓扑:

  • headless Service(即 clusterIP: None)是前提:它不分配 VIP,而是为每个 Pod 生成可解析的 DNS 记录,格式为 <pod-name>.<service-name>.<namespace>.svc.cluster.local
  • volumeClaimTemplates 不是写死 PVC 名,而是模板:Kubernetes 会为每个 Pod 自动创建唯一 PVC(如 www-web-0www-web-1),绑定到对应 PV
  • Pod 名必须带序号(web-0web-1),且启动/删除严格按序:扩容时先起 web-2,缩容时先删 web-2,避免脑裂

示例关键片段:

Kubernetes Skills
Kubernetes Skills

针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。

下载
apiVersion: v1
kind: Service
metadata:
  name: dify-pg-ha
spec:
  clusterIP: None  # ← 必须是 None
  selector:
    application: spilo
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: dify-postgres
spec:
  serviceName: "dify-pg-ha"  # ← 必须与 headless service 名一致
  volumeClaimTemplates:
  - metadata:
      name: pgdata
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 20Gi

etcd、Spilo、Redis-Sentinel 这类组件要额外注意初始化顺序

它们不是“拉起就通”,必须等前序组件就绪后才开始主从协商或选举,否则卡在 Pending 或反复 CrashLoopBackOff:

  • etcd 集群:3 节点需全部 Ready 后,etcdctl member list 才显示 started;若仅 1–2 个 Ready,剩余节点会不断重试连接
  • Spilo(PostgreSQL HA):依赖 etcd 或 Kubernetes 内置 leader 选举;若 etcd 未就绪,所有 Pod 日志会出现 failed to get leader lock
  • Redis 哨兵:sentinelConfig 中 quorum 必须 ≤ 实际运行的 sentinel 数量;设为 3 但只部署了 2 个 Pod,哨兵永远无法达成多数派,主节点无法被识别

验证命令要进 Pod 执行,不能只看 kubectl get pods

kubectl exec -n dify dify-postgres-0 -- patronictl list(检查 PostgreSQL 集群角色)
kubectl exec -n dify redis-sentinel-0 -- redis-cli -p 26379 SENTINEL masters(确认哨兵已发现主库)

Service 和 Ingress 暴露方式要分层设计

对外暴露 ≠ 全部走 Ingress。分布式系统内部通信必须走 ClusterIP 或 headless Service,否则跨节点流量绕过 DNS 发现逻辑,导致连接错位:

  • 组件间调用(如 Dify backend 连 PostgreSQL):用 postgres://dify-pg-ha:5432/dify,而不是 postgres://dify-pg-ha.dify.svc.cluster.local:5432 —— 后者冗余且易因 namespace 变更失效
  • 外部访问 API 或 Dashboard:用 Ingress + TLS,但路径要收敛(如 /api/* 转给 backend,/metrics 转给 prometheus)
  • 管理端口(如 etcd client port 2379、Redis sentinel port 26379):禁止暴露到公网,用 ClusterIPNodePort 限定内网访问

最容易被忽略的是 readinessProbe 设置:PostgreSQL 的探针不能只查端口,得执行 SQL(SELECT 1);Redis 哨兵得用 SENTINEL get-master-addr-by-name,否则 Pod Ready 了但实际还没加入集群。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

1873

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

2414

2023.10.07

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

96

2025.12.22

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

128

2026.06.29

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

60

2026.09.16

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

60

2026.09.16

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

40

2026.09.16

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

40

2026.09.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kubernetes官方教程手册
Kubernetes官方教程手册

共0课时 | 0人学习

Kubernetes官方中文文档
Kubernetes官方中文文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn