主题
部署流程详解
容器化部署全流程
宿主机侧(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.yamlops 容器的关键配置:
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 → 副本数 = 3Helm 安装顺序:
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:数据初始化
- 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
doneSQL 文件对应数据库:
| SQL 文件 | 数据库名 |
|---|---|
| antispam_base_250409.sql | antispam_base |
| cluster_base_250409.sql | cluster_base |
| yidun_model_evaluation_0409.sql | yidun_model_evaluation |
- 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