Skip to content

部署流程详解

容器化部署全流程

宿主机侧(deploy.sh)

阶段 1:安装 Docker

bash
# 检查 Docker 是否已安装
if command -v docker && docker info; then
    # 跳过,已安装
else
    cd nisp/docker_install && bash install.sh
fi

使用 docker_install/ 目录下的离线安装包:

docker_install/
├── docker-26.1.4.tgz      # Docker 二进制
├── docker.service          # systemd 服务文件
├── daemon.json             # Docker 配置(含 insecure-registry)
├── docker-compose          # docker-compose 二进制
└── install.sh              # 安装脚本

阶段 2:启动 ops 容器

加载并启动 yidun-ops 容器:

bash
docker load -i ops/ops.tar
cd nisp-x86-260525
docker-compose up -d   # 使用 ops/docker-compose.yaml

ops 容器的关键配置:

yaml
# ops/docker-compose.yaml
services:
  ubuntu-container:
    image: ubuntu:24.04-ops1020
    container_name: yidun-ops
    privileged: true
    volumes:
      - ../nisp:/nisp
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.ssh:/root/.ssh
      - /usr/local/bin:/host/bin    # kubectl 访问桥梁
      - /root/.kube:/root/.kube     # kubeconfig

阶段 3:部署 nginx + registry

nginx:    bootstrap/roles/nginx/files/yidun-nginx/
          提供 mirrors.yidun.internal 文件服务

registry: bootstrap/roles/registry/files/registry/
          提供 private-registry.yidun.internal 镜像仓库

阶段 4:导入镜像到 registry

自动扫描并导入以下目录的镜像:

image_k3s_amd64_*/      K3s 相关镜像
image_infra_amd64_*/    中间件相关镜像

同时更新 /etc/hosts,将所有内部域名解析到本机 IP。

阶段 5~8:委托 ops 容器执行

bash
docker exec -it yidun-ops bash -c "cd /deploy/k3s && bash autoinstall-docker.sh"

容器内侧(autoinstall-docker.sh)

步骤 1:生成 Ansible 配置

根据 auto-docker.conf 动态生成:

bootstrap/inventory/dev/group_vars/all.yml

yaml
deploy_control_host: "{{ groups['controller'][0] }}"
yidun_registry_server: "private-registry.yidun.internal"
docker_data_root: "/data/docker"
docker_bip: "172.18.0.1/16"
bootstrap_etc_hosts:
  - "<IP> private-registry.yidun.internal"
  - "<IP> mirrors.yidun.internal"

bootstrap/inventory/dev/hosts.ini

ini
[all:vars]
ansible_connection=ssh
ansible_port=22
ansible_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa

[controller]
192.168.1.10

[nvidia]
# GPU 节点(如有)

k3s_ansible/inventory/dev/group_vars/all.yml

yaml
k3s_release_version: v1.35.3+k3s1
k3s_root_data_dir: /data/k3s
k3s_flannel_iface: eth0
k3s_server:
  cluster-cidr: "10.233.0.0/18"
  service-cidr: "10.233.64.0/18"
  disable: [servicelb, traefik]
k3s_agent:
  kubelet-arg:
    - max-pods=200
    - container-log-max-size=10Mi

步骤 2:服务器初始化

执行 bootstrap/controller.yml(跳过 docker role,宿主机已装):

bootstrap role:
  - 设置主机名(可选)
  - 写入 /etc/hosts
  - 系统参数优化(sysctl、内核参数)
  - 配置时区
  - 安装基础工具

scripts role:
  - 部署运维脚本
  - 配置 helm

步骤 5:安装 K3s 集群

调用第三方 Ansible Role k3s_ansible/roles/ansible-role-k3s/

bash
ansible-playbook -i inventory/dev/host.ini cluster.yml -b

安装完成后自动创建 kubectl/helm wrapper 脚本(因为二进制在宿主机,通过挂载点访问)。

步骤 6:部署中间件

节点打标签(按配置或自动选最优节点):

bash
kubectl label node <node> zookeeper=true
kubectl label node <node> kafka=true
# ...

副本数调整(根据集群节点数自动设置):

节点数 < 3  →  副本数 = 节点数
节点数 >= 3 →  副本数 = 3

Helm 安装顺序

00-cluster-admin  →  CoreDNS/Dashboard/metrics-server
01-devops         →  Namespace/devops DaemonSet
06-nvidia-gpushare  →  (仅有 GPU 节点时)
---
apps_name 列表中的中间件(顺序按配置):
  01-zookeeper
  02-mysql (tidb namespace)
  03-kafka
  05-rediscluster
  06-minio
  07-elasticsearch

每个中间件安装后等待所有 Pod Ready,再安装下一个。

步骤 7:数据初始化

  1. MySQL 初始化:解压 SQL 包,逐库导入
bash
# 连接方式:127.0.0.1:NodePort(默认)或配置文件中的 db_host
for sql_file in *.sql; do
    db_name=$(basename $sql_file .sql)
    mysql -h $db_host -P $db_port -u admin -p'eHSkDv7c77*j' \
        --default-character-set=utf8mb4 \
        $db_name < $sql_file
done

SQL 文件对应数据库:

SQL 文件数据库名
antispam_base_250409.sqlantispam_base
cluster_base_250409.sqlcluster_base
yidun_model_evaluation_0409.sqlyidun_model_evaluation
  1. Elasticsearch 初始化
bash
cd k3s-yidun-apps/yidun-platform/02-build/init-elasticsearch/antispam
export ELASTICSEARCH_HOST="127.0.0.1:30092"
bash docker-entrypoint.sh

步骤 8:部署业务应用

部署顺序

bash
# 1. antispam-business(最先,其他服务依赖它)
cd k3s-yidun-apps/yidun-platform/01-app/antispam-business
bash install.sh

# 2. 所有平台服务(textonly=true 时只装文本相关)
cd k3s-yidun-apps/yidun-platform/01-app
bash install-all.sh

# 3. 文本检测服务
cd k3s-yidun-apps/yidun-text
bash install.sh

# 4. AI 检测(注释掉,按需开启)
# cd k3s-yidun-apps/yidun-ai/yidun-private-video && bash install.sh
# cd k3s-yidun-apps/yidun-ai/yidun-private-audio && bash install.sh
# cd k3s-yidun-apps/yidun-ai/yidun-private-image && bash install.sh

断点续传机制

状态文件存储在 .deploy_state/ 目录:

.deploy_state/
├── host_step_1_docker.done        # deploy.sh 阶段1
├── host_step_2_ops_container.done
├── host_step_3_nginx_registry.done
├── host_step_4_import_images.done
├── step_1_config.done             # autoinstall-docker.sh 步骤1
├── step_2_server_init.done
├── step_4_nvidia.done
├── step_5_k3s.done
├── step_6_middleware.done
├── step_7_data_init.done
└── step_8_apps_deploy.done

每个 .done 文件记录完成时间:

2025-05-25 10:30:00

强制重执行

bash
# 重新执行步骤 6 和 7(中间件+数据)
FORCE_STEP=6,7 bash autoinstall-docker.sh

# 重置宿主机侧所有步骤
rm -f .deploy_state/host_step_*

# 重置容器内所有步骤
rm -f .deploy_state/step_*

升级流程

bash
# 进入 ops 容器
docker exec -it yidun-ops bash
cd /deploy/k3s/k3s-yidun-apps/yidun-platform/01-app

# 升级所有模块
bash install-all.sh upgrade

# 升级特定模块
cd antispam-rule
bash install.sh upgrade

卸载流程

bash
# 删除业务应用
bash install-all.sh delete

# 删除中间件(谨慎!数据会丢失)
helm uninstall -n yidun-infra kafka-yidun
helm uninstall -n yidun-infra zookeeper-yidun
# ...

# 卸载 K3s(在各节点执行)
/usr/local/bin/k3s-uninstall.sh    # master
/usr/local/bin/k3s-agent-uninstall.sh  # worker

内部使用文档,请勿外传