Skip to content

架构详解

整体架构

┌─────────────────────────────────────────────────────────────┐
│                      客户服务器集群                            │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               基础设施层 (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
Elasticsearch30092
MinIO API31311
MySQL32000(自动分配)

镜像仓库架构

私有镜像仓库(部署机本地)

  ├─ 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 台节点。

内部使用文档,请勿外传