简介

本教程主要用于构建一个物理服务器自动化交付的系统,当一个物理服务器上电、配置好IPMI、RAID后。通过PXE可自动安装好一个操作系统在系统盘,并配置好网卡、SSH连接信息。

功能概览

cloudpods 云平台支持 Baremetal(物理机) 管理,提供的功能如下:

  1. 自动化上架: 物理机上架加电启动后,自动注册到云管平台,自动分配BMC IP地址,初始化IPMI账号密码,自动上报物理机硬件配置(CPU、内存、序列号、网卡、磁盘等)

  2. 自动化装机: 根据配置要求自动配置 RAID,自动分区格式化磁盘,自动部署操作系统镜像,自动初始化操作系统账号密码,自动分配IP地址,可以植入配置文件

  3. 生命周期管理: 支持物理机自动化开机,关机,重装系统,远程带外管理,卸载操作系统等操作

  4. 与虚拟机共享镜像: 使用虚拟机镜像部署物理机,便于虚拟机和物理机统一操作系统运行环境

  5. API 支持: 以上操作均支持API操作,便于与其他系统的自动化流程集成

  6. 服务器型号支持: 支持Dell、HP、华为、浪潮、联想、超微等主流x86/ARM服务器厂商和机型

  7. RAID 控制器支持: LSI MegaRaid, HP Smart Array, LSI MPT2SAS, LSI MPT3SAS, Mrarvell RAID等 (也支持软RAID)

  8. 转换为宿主机: 直接将物理机转换为运行虚拟机的宿主机

  9. 托管已有服务器: 托管已有并装好系统的物理机

  10. 支持 Legacy(传统模式)或者UEFI的 PXE 引导网络启动

支持安装的操作系统

  • openEuler: 22.03 LTS SP3, 22.03 LTS SP4, 24.03 LTS SP2

  • CentOS: 7.9, 8 stream, 9 stream, 10 stream

  • Debian: 11, 12, 13

  • Ubuntu Server: 20.04 LTS, 22.04 LTS, 24.04 LTS, 25.04

  • AnolisOS: 8.8. 8.10

  • OpenCloudOS: 8.8, 8.10, 9.2, 9.4

  • Rocky Linux: 8.x, 9.x, 10.x

  • Alma Linux: 8.x, 9.x, 10.x

Docker Compose 快速安装和使用

使用 Docker Compose 快速部署 Cloudpods Baremetal 物理机管理服务。(单节点)

环境准备

服务器配置要求

  • 最低配置要求: CPU 4核, 内存8 GiB, 存储 200GiB

  • docker 版本: ce-26.1.3+

    • docker 建议安装最新的 ce 版本,新版本已经包含 docker-compose 插件

    • docker 需要开启容器网络以及 iptables

    • 底层系统推荐使用Rocky Linux 9+ / Debian 12+

服务器网卡要求

  • 外网网卡:用于管理和下载文件,连接物理机IPMI。

  • 内网网卡:用于PXE+DHCP ,让需要PXE启动的物理服务器网卡在一个广播域。(可只配置IP和掩码)

安装配置Docker CE

国内参考文档:https://help.mirror.nju.edu.cn/docker-ce/?mirror=NJU

官方文档安装:Install Docker Engine 

部署运行 Cloudpods Baremetal 服务

在部署机器上创建 cloudpods-baremetal 目录,并且进入该目录。

1
2
3
cd /opt
mkdir cloudpods-baremetal
cd cloudpods-baremetal

使用下面的命令,把运行物理机管理的 docker compose 配置文件下载下来。

1
curl https://raw.githubusercontent.com/yunionio/ocboot/master/compose/baremetal/docker-compose.yml -o docker-compose.yaml

PS:也可以用国内的Gitee下载:https://gitee.com/songxwn/ocboot/raw/master/compose/baremetal/docker-compose.yml

在 cloudpods-baremetal 目录运行下面的 docker compose 命令正式开始安装

运行服务,注意需要设置 LISTEN_INTERFACE 和 PUBLIC_IP 两个环境变量。

  • LISTEN_INTERFACE: 服务监听的网卡,比如 eth0 ,此网卡会负责接受 DHCP 请求。(即内网网卡)

  • PUBLIC_IP: 服务监听的 IP 地址,为对应 LISTEN_INTERFACE 网卡上的 IP 地址,可通过 ip addr show 查看对应网卡上的地址。

下面命令假设 eth0 网卡上的 ip 地址为 10.168.222.205,具体设置请根据自己的环境设置。

1
LISTEN_INTERFACE=eth0 PUBLIC_IP=10.168.222.205 docker compose up -d

等服务启动完成后,就可以登陆 https://$PUBLIC_IP 访问前端服务,默认登陆用户密码为:admin 和 admin@123

纳管物理机教程

物理机管理服务部署完成后,接下来纳管物理机测试。

注意

  • 待纳管的物理机需要和运行服务的节点在同一个广播域下(内网网卡)

  • 该广播域中需要禁用其他 dhcp 服务,因为 baremetal 物理机管理服务会运行 dhcp 服务

  • 如果待管理的物理机运行在其他广播域,则需要在交换机上配置 dhcp relay 到物理机管理服务的 PUBLIC_IP 地址

待纳管的物理机信息:

  • 型号: Lenovo RD640

  • IPMI 带外信息:

    • IP: 192.168.222.203

    • 用户: root

    • 密码: YourIPMI@Password

  • BIOS/UEFI引导选项设置 PXE 网络启动为第一启动顺序

1. 创建网段

纳管物理机,需要创建PXE、IPMI、物理机 3个类型的 IP 子网。

  • PXE类型: 该网段用于物理机的 PXE 网络引导启动和裸金属(安装操作系统)

  • IPMI 类型: 用于记录物理机 BMC 带外控制的地址

  • 物理机类型:用于物理机的业务网段,可配置VLAN。

这三个网段最好是运行服务所在节点网络可达的,请根据自己的网络环境设置。

点击前端“网络/IP子网/新建”,创建以下的三个子网。

创建一个PXE类型的子网

假设需要给物理机 PXE 启动的网段为 192.168.77.100 到 192.168.77.200,网关为 192.168.77.1,并设置 dhcp_relay 为 PUBLIC_IP,名称为 bmnet-0,服务器类型选择PXE。

注意:

  • 此物理机类型网段的开始和结束 ip 范围,以及默认网关是和实际环境网络环境相关的,是对应到交换机和路由器上的配置,注意划分的 ip 不要和已有环境的冲突了

  • 这里一定要设置 dhcp_relay 为 PUBLIC_IP,在这个环境中是 192.168.77.12,请根据自己环境修改。

    • 因为 baremetal-agent 服务只会响应从 dhcp_relay 过来的单播 dhcp 请求,用 docker compose 部署的服务中包含了一个 dhcp_relay 服务,也监听到 PUBLIC_IP 上,会把 dhcp 广播 relay 到 agent 服务。

创建一个 IPMI 类型的子网

该网段需要包含物理机的 ipmi ip,假设为 192.168.222.200 到 192.168.222.210,网关为 192.168.222.1,名称为 ipmi-0,类型为IPMI。

创建一个物理机类型的业务子网

该网段需要包含物理机的业务网卡的网段,其他要求一样。

查看创建好的3个网段

2.1 PXE引导注册纳管物理机(有IPMI&BMC)

在Web管理控制台添加物理机,点击”主机/基础资源/物理机/添加”,选择 “PXE 注册引导”,输入对应的物理机纳管信息。

  • 名称: test-bm-songxwn

  • IPMI 信息(这些以具体机器所在环境为准)

    • IPMI 地址: 192.168.222.203

    • IPMI 用户名: root

    • IPMI 密码: YourIPMI@Password

  • 管理口 MAC 地址: 00:0C:29:01:3E:C1

    • PXE 网络启动的网卡 MAC 地址,如果物理机支持 Redfish API 可以不填,平台能自动探测到
  • 管理口 IP: 选择刚才创建的 bmnet-0 子网

创建完成后,在物理机列表可以看到机器处于“准备中”的状态,并且探测到了品牌为 Lenovo 。(得确保IPMI 可连接到)

可以通过访问物理机的带外控制台,会看到物理机开始 PXE 引导,如果网络配置没有问题,物理机会获得物理机管理服务下发的 grub 引导配置。

获取 grub 配置后,物理机会从管理服务的 PUBLIC_IP 下载内核和 initramfs。

下载完成后,就会进入 yunionos 内存系统。

之后平台的服务会通过 ssh 远程探测收集物理机的硬件信息,等物理机变成“运行中”的状态,就算纳管成功了。

勾选对应的物理机,点击启用,就可以进行后续的安装操作系统等操作。

2.2 预注册纳管物理机(无IPMI&BMC)

  • 适用于无IPMI&BMC的物理机,PXE服务器需要注册MAC地址才能被引导。

  • 注意勾选无BMC控制器。

  • 注意选择管理口IP,为PXE 子网。

3. 导入装机镜像

点击“主机/系统镜像/上传”按钮,导入需要装机的镜像。

等待镜像状态变成“可用”,就可以将此镜像用于安装操作系统了。

Debian 12 AND64 通用物理机QCOW2镜像

https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

或是点击社区镜像在线导入

等待镜像状态变成“可用”,就可以将此镜像用于安装操作系统了。

4. 为物理机安装操作系统)

前提条件:物理机PXE已启动 YunionOS For PXE 系统

  • YunionOS For PXE 是一个通过网络PXE启动,在内存中临时运行的工具系统

  • 用于启动后由Cloudpods Baremetal 系统连接检测所有硬件信息,并根据硬件信息来配置网卡、硬盘、密码/密钥来安装系统。

安装系统到物理机硬盘

点击“主机/基础资源/物理机”

选择一个物理机 点击更多选择启用,然后选择安装操作系统。

配置安装信息

  • 配置系统主机名

  • 配置安装系统镜像

  • 配置硬盘 (可配置软RAID)

  • 配置root密码/公钥

  • 配置网络 (可配置Bond 和 VLAN)

  • 最后点击新建则开始安装,安装日志可去主机 - 裸金属查看。

操作说明

1. 将服务放到后台运行

可以使用 ‘-d/–detach’ 参数把所有服务放到后台运行,命令如下:

1
2
3
4
5
6
# 所有服务放到后台运行
# 下面命令假设 eth0 网卡上的 ip 地址为 10.168.222.205,具体设置请根据自己的环境设置。
$ LISTEN_INTERFACE=eth0 PUBLIC_IP=10.168.222.205 docker compose up -d

# 服务放到后台后,可以通过 logs 自命令查看输出日志
$ docker compose logs -f

2. 登陆 climc 命令行容器

如果要使用命令行工具对平台做操作,可以使用下面的方法进入容器:

1
2
3
4
5
6
7
$ docker exec -ti cloudpods-baremetal-climc-1 bash
Welcome to Cloud Shell :-) You may execute climc and other command tools in this shell.
Please exec 'climc' to get started

# source 管理员认证信息
bash-5.1# source /etc/yunion/rcadmin
bash-5.1# climc user-list

3. 登录物理机 pxe 内存系统

当物理机通过 pxe 启动成功后,会引导进入一个内存 linux 系统,可以通过下面的方式 ssh 进入这个系统,遇到错误的时候方便排查。

1
2
3
4
5
6
7
8
# 1. 进入 climc 容器
docker exec -ti cloudpods-baremetal-climc-1 bash

# 2. 查看物理机 id
climc host-list

# 3. ssh 到 host 的内存系统
climc host-ssh $对应物理机id

另外也可以通过 climc host-logininfo $对应物理机id 获取 root 用户的登录密码。

如果物理机 pxe 内存系统上报登录信息失败,则会设置成默认的密码:mosbaremetal,对应逻辑可参考通知代码

4. 查看服务配置和持久化数据

所有服务的持久化数据都是存储在 cloudpods-baremetal/data 目录下面的,所有配置都是自动生成的,一般不需要手动修改,下面对各个目录做说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tree data
data
├── etc
│ ├── nginx
│ │ └── conf.d
│ │ └── default.conf # 前端 nginx 配置
│ └── yunion
│ ├── *.conf # cloudpods 各个服务配置
│ ├── pki # 证书目录
│ ├── rcadmin # 命令行认证信息
├── opt
│ └── cloud
│ └── workspace
│ └── data
│ └── glance # 镜像服务存储的镜像目录
└── var
└── lib
├── influxdb # influxdb 持久化数据目录
└── mysql # mysql 数据库持久化数据目录

5. 删除所有容器

所有服务的持久化数据都是存储在 cloudpods-baremetal/compose/data 目录下面的,删除容器不会丢失数据,下次直接用 docker compose up 重启即可,操作如下:

1
2
# 删除服务
$ docker compose down

升级

更新 compose 配置文件

当上游的 ocboot/compose/baremetal/docker-compose.yml 更新了,就可以通过 curl 命令下载最新的配置文件,然后重新启动就可以了,步骤如下:

1
2
3
4
5
6
7
8
9
10
11
# 注意切换到对应的 cloudpods-baremetal 目录

cd /opt/cloudpods-baremetal

# 下载配置文件

curl https://raw.githubusercontent.com/yunionio/ocboot/master/compose/baremetal/docker-compose.yml -o docker-compose.yaml

# 重启服务

docker compose up -d

重启 compose 服务

拉取最新的 docker-compose.yml 配置文件后,使用下面命令重启服务就行了。

1
2
3
4
5
6
7
cd /opt/cloudpods-baremetal

docker compose down

# 下面命令假设 eth0 网卡上的 ip 地址为 10.168.222.205,具体设置请根据自己的环境设置。

LISTEN_INTERFACE=eth0 PUBLIC_IP=10.168.222.205 docker compose up

已成功测试安装系统

  • Centos 7

  • Ubuntu 24.04

运维技术交流群

发送邮件到 ➡️ [email protected]

或者关注WX公众号:网工格物

微信扫码

博客(最先更新)

https://songxwn.com/