自动化部署实施案例
1.实施案例一: 某集团需要安装测试用的k8s集群环境
1. 1部署机器规划
目标:
- 部署docker镜像仓库;
- 部署nfs服务器;
- 部署imom和华为mbm数据库;
- 部署k8s集群,并安装kubesphere工作面板;
该集团提供了一台32核, 64GB内存, 2T 的物理机器。在使用自动化脚本部署前,需要使用virtualbox 等虚拟化工具创建虚拟机,将该物理机器划分成以下8个虚拟工作节点,并安装好centos 7.9系统,配置好ip地址。
| 宿主机名称 | IP | 用途 | 宿主机机器配置 |
|---|---|---|---|
| host_deploy | 192.168.1.104 | 部署机 | 4核, 1GB |
| host_broker_nfs | 192.168.1.101 | nfs服务器 | 1核, 0.5GB |
| host_broker_mysql | 192.168.1.102 | imom数据库 | 4核, 4GB |
| host_broker_mysql_hw | 192.168.1.103 | 华为mbm数据库 | 4核, 4GB |
| host_broker_docker_registry | 192.168.1.104 | docker镜像仓库 | 4核, 1GB |
| host_kk | 192.168.1.104 | kk部署机 | 4核, 1GB |
| k8s_master | 192.168.1.111 | k8s master节点 | 8核, 4GB |
| k8s_node1 | 192.168.1.113 | k8s 工作节点1 | 16核, 24GB |
| k8s_node2 | 192.168.1.114 | k8s 工作节点2 | 16核, 24GB |
CPU, 内存划分配置举例:


其中host_deploy, host_broker_docker_registry, host_kk 使用同一台机器, 既做部署机器,要作为docker的镜像仓库使用。
1.2 修改配置文件
将自动化安装包使用SSH客户端工具上传到 host_deploy(IP:192.168.1.104) 上/root 目录下,执行解压:
tar -xvf ansible_root20251105.tar.gz
修改 /root/ansible_root/host.ini 文件,按《1. 1部署机器规划》上的主机角色分配,配置好host.ini文件。
[root@ansible ansible_root]# cat host.ini
[host_broker_nfs]
192.168.1.101
[host_broker_mysql]
192.168.1.102
[host_broker_mysql_hw]
192.168.1.103
[host_broker_docker_registry]
192.168.1.104
[host_broker_nexus3]
[host_kk]
192.168.1.104
[k8s_master]
192.168.1.111 ansible_user=root ansible_password=123456
[k8s_node]
192.168.1.113 ansible_user=root ansible_password=123456
192.168.1.114 ansible_user=root ansible_password=123456
[host_monitor]
192.168.1.101
[all:vars]
ansible_user=root
ansible_ssh_pass=123456
此外也需要配置/root/ansible_root/vars/host.yml 文件,配置好mysql, docker镜像仓库, nfs 的地址以及账号信息。
[root@ansible vars]# cat /root/ansible_root/vars/host.yml
# 主机环境 -> kubesphere部署完成
mysql_user: "root"
mysql_password: "MYSQL_PASSWORD_123456"
docker_registry_address: "192.168.1.104:5000"
nfs_address: "192.168.1.101"
kube_cluster_name: "sie-kubesphere"
依次ping通以下宿主机,确保网络可达。
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.104
192.168.1.111
192.168.1.113
192.168.1.114
准备工作完毕后,准备开始下个阶段的安装流程。
1.3 开始自动化部署
1.3.1 所有宿主机离线安装基础软件与依赖库
在 host_deploy(IP:192.168.1.104) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh host all
同时启动另外一个ssh终端连接host_deploy(IP:192.168.1.104) 宿主机, 进入 /root/ansible_root 目录下执行以下监控命令:
./monitor.sh
执行成功后终端输出结果如下:

在monitor.sh 的ssh窗口中,会实时出现自动化脚本执行过程中,输出的日志信息:

该日志详细地描述了任务执行过程中的细节。
1.3.2 离线安装宿主机中间件(mysql, mysql_hw, nfs, docker镜像仓库)
在 host_deploy(IP:192.168.1.104) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh host_broker all

同时启动另外一个ssh终端连接host_deploy(IP:192.168.1.104) 宿主机, 进入 /root/ansible_root 目录下执行以下监控命令:
./monitor.sh

当auto.sh命令执行完毕后,可以检查docker镜像仓库,mysql 等已可正常访问:


1.3.3 离线安装k8s集群
在 host_deploy(IP:192.168.1.104) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh k8s all

同时启动另外一个ssh终端连接host_deploy(IP:192.168.1.104) 宿主机, 进入 /root/ansible_root 目录下执行以下监控命令:
./monitor.sh


当auto.sh命令执行完毕后,根据终端上输出的登录地址,账号密码,可以正常进入kubesphere面板来管理k8s集群。

至此,所有部署目标已完成。
2.实施案例二: 某集团需要在现有的k8s集群上安装imom应用
2. 1部署机器规划
目标:
- 在已有的k8s集群上安装imom应用依赖的中间件;
- 在已有的k8s集群上安装imom应用;
该集团要求在原有的k8s集群上安装应用,无需重新安装k8s集群;另外提供一台已安装好mysq的服务器(IP: 192.168.1.102) 作为imom数据库使用.
| 宿主机名称 | IP | 用途 | 宿主机机器配置 |
|---|---|---|---|
| host_broker_mysql | 192.168.1.102 | imom数据库 | 16核, 32GB |
| k8s_master | 192.168.1.111 | k8s master节点 | 8核, 16GB |
| host_deploy | 192.168.1.111 | 部署机器 | 8核, 16GB |
| host_broker_docker_registry | 192.168.1.104 | 镜像仓库 | 未知 |
因为无需部署k8s集群, 因此仅需要专注在现有k8s集群上部署imom应用即可。这里使用k8s_master作为部署机器。
1.2 修改配置文件
将自动化安装包使用SSH客户端工具上传到 host_deploy(IP:192.168.1.111) 上/root 目录下,执行解压:
tar -xvf ansible_root20251105.tar.gz
修改 /root/ansible_root/host.ini 文件,按《2.1. 部署机器规划》上的主机角色分配,配置好host.ini文件。
[root@ansible ansible_root]# cat host.ini
[host_broker_nfs]
[host_broker_mysql]
[host_broker_mysql_hw]
[host_broker_docker_registry]
[host_broker_nexus3]
[host_kk]
[k8s_master]
192.168.1.111 ansible_user=root ansible_password=123456
[k8s_node]
[host_monitor]
192.168.1.101
[all:vars]
ansible_user=root
ansible_ssh_pass=123456
配置/root/ansible_root/vars/host.yml 文件, 配置好 docker_registry_address 的地址,用于上传imom的镜像到该镜像仓库。
[root@ansible ansible_root]# cat vars/host.yml
# 主机环境 -> kubesphere部署完成
mysql_user: ""
mysql_password: ""
docker_registry_address: "192.168.1.104:5000"
nfs_address: ""
nexus3_address: ""
kube_cluster_name: "sie-kubesphere"
此外也需要配置/root/ansible_root/vars/k8s_app.yml 文件,配置好k8s应用的相关配置。
[root@ansible vars]# cat /root/ansible_root/vars/k8s_app.yml
# k8s app, 中间件安装环境配置
imom_namespace: "imom"
imom_common_namespace: "common"
hw_namespace: "mbm"
image_pull_secrets: "default-secret"
default_storage_class: "nfs-client"
external_base_url: "http://192.168.1.101:32555"
enable_imom_apps: "admin-gateway,em-tools-biz,imom-flow-biz,imom-mpm,kernel-biz,led-mes-biz,les-biz,mdm-biz,mes-report-biz,mom-eam-biz,mom-public-biz,qms-fim-biz,qms-process-control-biz,qms-spc-biz,qms-spc-cfg-biz,smt-mes-biz,imom-les-ui,imom-mes-ui,imom-mpm-ui,imom-public-ui,imom-qms-ui"
skip_imom_apps: "imom-flow-biz,mpm-biz,kernel-biz,led-mes-biz,les-biz,mdm-biz,mes-report-biz,mom-eam-biz,mom-public-biz,qms-fim-biz,qms-process-control-biz,qms-spc-biz,qms-spc-cfg-biz,smt-mes-biz"
docker_registry_address: "192.168.1.104:5000"
nfs_address: "192.168.1.102"
nexus3_address: ""
mysql_address: "192.168.1.102"
mysql_user: "root"
mysql_password: "MYSQL_PASSWORD_123456"
redis_address: "sie-redis-broker.{{ imom_common_namespace }}"
redis_master_address: "sie-redis-sentinel-master-svc.{{ imom_common_namespace }}"
redis_password: "Dme123456"
redis_mode: "SENTINEL"
minio_address: "sie-minio-broker.{{ imom_common_namespace }}"
minio_user: "admin"
minio_password: "Minio123456"
powerjob_address: "powerjob-svc.{{ imom_common_namespace }}"
# idme
idme_address: "http://192.168.1.99:8003"
idme_sub_app_id: "rdm_e3231ab62e9d4771bd0df793f62d2282_app"
# hw mbm
hw_mbm_address: "http://mbm-api-gateway.{{ hw_namespace }}:9090"
# ----------- huawei config -------- #
enable_mbm_apps: "api-gateway-service,em-service,label-service,les-service,mdm-service,mom-web,msm-service,orche-web,qm-service,sfc-service,wom-service,mpdm-service"
hw_skip_mbm_apps: ""
hw_tenant_id: "067cfa58c8404a908780bda7e934e1b1"
hw_org_name: "某集群组织名称"
hw_redis_address: "redis-cluster-service.{{ hw_namespace }}"
hw_redis_password: "Rdis123456"
hw_redis_mode: "CLUSTER"
hw_mysql_address: "192.168.1.102"
hw_mysql_user: "root"
hw_mysql_password: "MYSQL_PASSWORD_123456"
hw_minio_address: "sie-minio-broker.{{ imom_common_namespace }}"
hw_minio_user: "admin"
hw_minio_password: "Minio123456"
# 修复华为qm flyway bug
hw_gen_qm_xdm_db: "1"
依次ping通以下宿主机,确保网络可达。
192.168.1.102
192.168.1.104
192.168.1.111
准备工作完毕后,准备开始下个阶段的安装流程。
1.3 开始自动化部署
1.3.1 推送imom镜像到镜像仓库
在 host_deploy(IP:192.168.1.111) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh k8s docker_image
执行成功后可在镜像仓库上看到上传的imom镜像:

1.3.2 部署imom中间件
在 host_deploy(IP:192.168.1.111) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh k8s_app_broker all
执行成功后, 在master机器上,使用kubectl 查看相关的imom中间件已就绪。
[root@master1 ~]# kubectl get deployments -n common
NAME READY UP-TO-DATE AVAILABLE AGE
haproxy-redis 1/1 1 1 16d
kkfileview 1/1 1 1 16d
powerjob-server 1/1 1 1 16d
sie-minio-broker 1/1 1 1 16d
[root@master1 ~]# kubectl get statefulsets -n common
NAME READY AGE
sie-redis-broker-node 3/3 16d
1.3.3 部署imom 应用
在 host_deploy(IP:192.168.1.111) 宿主机上的/root/ansible_root 目录下执行以下命令:
./auto.sh k8s_app all
执行成功后, 在master机器上,使用kubectl 查看相关的imom已就绪。
[root@master1 ~]# kubectl get deployments -n imom
NAME READY UP-TO-DATE AVAILABLE AGE
imom-eam 1/1 1 1 9d
imom-flow 1/1 1 1 13d
imom-gateway 1/1 1 1 9d
imom-kernel 1/1 1 1 11d
imom-les 1/1 1 1 13d
imom-les-ui 1/1 1 1 16d
imom-mes-public 1/1 1 1 9d
imom-mes-ui 1/1 1 1 16d
imom-mpm 1/1 1 1 9d
imom-mpm-ui 1/1 1 1 16d
imom-process-control 1/1 1 1 13d
imom-public-ui 1/1 1 1 16d
imom-qms-ui 1/1 1 1 16d
imom-smt 1/1 1 1 13d
imom-spc 1/1 1 1 13d
imom-spc-config 1/1 1 1 13d
imom-tools 1/1 1 1 9d
至此,所有部署目标已完成。