主题
架构详解
整体架构
┌─────────────────────────────────────────────────────────────┐
│ 客户服务器集群 │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 基础设施层 (bootstrap) │ │
│ │ Docker · Nginx(mirrors) · Registry(images) │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 容器编排层 (K3s v1.28/v1.35) │ │
│ │ Master×1(单机) / Master×3(HA) + Worker×N(可选) │ │
│ │ 网络: Flannel(VXLAN) 存储: local-path │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 中间件层 (yidun-infra / tidb) │ │
│ │ ZooKeeper · Kafka · MySQL · Redis · MinIO · ES │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ yidun namespace │ │ yidun-text │ │ yidun-ai │ │
│ │ 反垃圾平台主体 │ │ 文本检测 │ │ AI检测 │ │
│ │ (30+ 微服务) │ │ (8 服务) │ │ (4 模块) │ │
│ └──────────────────┘ └──────────────┘ └─────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 可观测层 (monitoring namespace) │ │
│ │ Prometheus · Grafana · SkyWalking · Kibana │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘部署工具架构
两阶段执行模型
宿主机
│
└─ deploy.sh (阶段 1~4)
│
├─ [1] 安装 Docker
├─ [2] 启动 yidun-ops 容器
├─ [3] 部署 nginx + registry
├─ [4] 导入镜像到 registry
│
└─ docker exec yidun-ops
│
└─ autoinstall-docker.sh (步骤 1~8)
│
├─ [1] 生成 Ansible 配置
├─ [2] 服务器初始化
├─ [3] (skip, 已在宿主机完成)
├─ [4] 安装 NVIDIA 驱动
├─ [5] 安装 K3s 集群
├─ [6] 部署中间件
├─ [7] 数据初始化
└─ [8] 部署业务应用ops 容器的作用
yidun-ops 容器(ubuntu:24.04)提供了隔离的运行环境,内置 Ansible、Python、Helm 等工具,避免污染宿主机环境。
关键挂载点使容器能够控制宿主机:
yaml
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 控制宿主机 Docker
- /usr/local/bin:/host/bin # 访问宿主机 kubectl/helm
- /root/.kube:/root/.kube # 访问 K8s 配置
- /root/.ssh:/root/.ssh # SSH 密钥K3s 网络架构
Pod 网段: 10.233.0.0/18 (可分配 16382 个 Pod IP)
Service 网段: 10.233.64.0/18 (可分配 16382 个 Service)
CoreDNS: 10.233.64.10
网络方案: Flannel VXLAN (overlay)
网卡绑定: k3s_flannel_iface 配置项(必须填实际网卡名)NodePort 规划
| 服务 | NodePort |
|---|---|
| Elasticsearch | 30092 |
| MinIO API | 31311 |
| MySQL | 32000(自动分配) |
镜像仓库架构
私有镜像仓库(部署机本地)
│
├─ private-registry.yidun.internal:80 (Docker Registry v2)
│ ├─ rancher/* K3s 基础组件
│ ├─ bitnami/* 中间件(Kafka/Redis/ZK/MinIO)
│ ├─ library/* 基础镜像(MySQL/Nginx)
│ ├─ elasticsearch/* ES 6.8.23(带拼音分词)
│ ├─ yidun/* 易盾业务镜像
│ └─ yidun-text/* 文本检测镜像
│
└─ mirrors.yidun.internal:80 (Nginx 文件服务器)
├─ binaries/k3s/ K3s 二进制文件
└─ ... 其他离线包
DNS 解析(写入 /etc/hosts):
<部署机IP> private-registry.yidun.internal
<部署机IP> mirrors.yidun.internal
<部署机IP> private-registry.nis.netease.com存储架构
所有中间件使用 K3s 内置的 local-path StorageClass 进行持久化存储。
K3s local-path 存储路径:
{k3s_path}/k3s/local-storage/ (默认: /data/k3s/local-storage/)
各中间件存储大小:
ZooKeeper: 8Gi × 3 (副本) + 8Gi 日志
Kafka: 基于 logRetentionBytes 滚动
MySQL: 按需扩容 (PVC 可扩展)
Redis: 内存数据,持久化到本地
MinIO: 按需 (对象存储)
ES: 20Gi × 节点数生产注意事项
local-path 是节点本地存储,不具备跨节点数据迁移能力。如果节点故障,该节点上的 PVC 数据将无法自动迁移。生产环境建议定期备份,或使用 xtrabackup 备份 MySQL 数据。
集群拓扑模式
单机模式(1 Master)
┌─────────────────────────────┐
│ Master Node │
│ │
│ K3s Control Plane │
│ + ZooKeeper × 1 │
│ + Kafka × 1 │
│ + MySQL × 1 │
│ + Redis Cluster × 1 │
│ + MinIO × 1 │
│ + Elasticsearch × 1 │
│ + 所有业务应用 │
└─────────────────────────────┘中间件副本数自动设为 1,适合 PoC/测试。
高可用模式(3 Master)
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Master-1 │ │ Master-2 │ │ Master-3 │
│ (etcd) │ │ (etcd) │ │ (etcd) │
│ │ │ │ │ │
│ ZK-0 │ │ ZK-1 │ │ ZK-2 │
│ Kafka-0 │ │ Kafka-1 │ │ Kafka-2 │
│ ES-0 │ │ ES-1 │ │ ES-2 │
└──────────┘ └──────────┘ └──────────┘
↑ ↑ ↑
└──────────────┴──────────────┘
Flannel VXLAN中间件副本数自动设为 3,任意一台节点故障不影响服务。
节点标签体系
中间件通过节点标签进行调度绑定,确保特定服务只运行在指定节点:
bash
# 每个中间件组件对应一个节点标签
kubectl label node <node> zookeeper=true
kubectl label node <node> kafka=true
kubectl label node <node> mysql=true
kubectl label node <node> rediscluster=true
kubectl label node <node> minio=true
kubectl label node <node> elasticsearch=true
# GPU 节点
kubectl label node <node> nvidia-gpushare=true配置文件中可以手动指定(填 IP),也可留空让脚本自动选择性能最好的 N 台节点。