OpenStack 2025.1 + Ceph 三节点部署手册

从单机到三节点:我的OpenStack 2025.1生产环境搭建复盘,附赠一键网络检查脚本 本文详细记录了从单机到三节点的OpenStack 2025.1生产环境搭建过程,重点分享了多节点集群架构设计、硬件配置优化及网络调试经验。针对Ubuntu 24.04的依赖变化提供了解决方案,并附赠一键网络检查脚本,帮助开发者规避常见部署陷阱,实现稳定高效的云计算环境部署。 阅读详情

OpenStack 2025.1 + Ceph 三节点部署手册

openEuler 24.03 LTS SP4(最小化安装)+ Kolla-Ansible 22.2.0(容器化)+ Ceph 18.2.2(RPM 原生)
完全按本文档顺序复制粘贴即可复现当前集群。所有命令均已按"在哪台执行"标注。
安全提示:文中含明文口令,仅限内网实验环境。


0. 部署规划

0.1 虚拟机规划(VMware Workstation 17.5.2)

项配置
虚机 ×36 vCPU / 12 GB 内存 / 80G 系统盘 + 2×60G OSD 盘(sdb、sdc)
guestOSrhel8-64,BIOS 引导,vhv.enable = TRUE(嵌套虚拟化,compute 节点必须)
ISOopenEuler-24.03-LTS-SP4-x86_64-dvd.iso(ISO 存放路径不能含中文,否则 vmx 乱码)
系统安装最小化安装,只勾 sda,双网卡 DHCP,主机名 controller / compute1 / compute2,root 密码 **********8

宿主机前提:VMware 嵌套虚拟化要求宿主关闭 Hyper-V/VBS。Win11 上需依次执行:bcdedit /set hypervisorlaunchtype off、bcdedit /set vsmlaunchtype off、导入注册表禁用 DRTM(HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard 下 Enabled=0)后重启。三者缺一都会报 VT-x/EPT 不可用。

0.2 网络规划

网络VMware网段节点地址
管理网VMnet1(仅主机)192.168.172.0/24controller=.11,compute1=.12,compute2=.13
内部 VIP--192.168.172.100(keepalived+haproxy)
外部网络VMnet8(NAT)192.168.182.0/24DHCP,网关 192.168.182.2

0.3 版本对应表

组件版本来源
OSopenEuler 24.03 LTS SP4(内核 6.6.0)官方 ISO
Ceph18.2.2-13.oe2403sp4(reef)openEuler 官方 RPM 源
kolla-ansible22.2.0(= OpenStack 2025.1 Epoxy)pypi
ansible-core2.18.19pypi(随 kolla-ansible 依赖)
容器镜像2025.1-rocky-10quay.nju.edu.cn / openstack.kolla
Docker服务端 moby-engine 25.0.3(openEuler 源)+ CLI 静态 27.3.1(NJU)见第 3 章

0.4 镜像源汇总(全部国内可用,实测)

用途源备注
dnf / RPMopenEuler 官方(OS/EPOL/everything/update)无需改动,ceph/moby 都在里面
piphttps://pypi.tuna.tsinghua.edu.cn/simple清华
OpenStack 容器镜像quay.nju.edu.cn,namespace openstack.kolla南京大学;quay.io 直连基本不可用
Docker CLI 静态包mirrors.nju.edu.cn/docker-ce/linux/static/stable/x86_64/docker-27.3.1.tgz
ansible-galaxy不可用(galaxy.ansible.com artifact 302 → AWS 被墙)用 pip 安装 ansible 完整 bundle 替代,见 4.3
测试用虚机镜像repo.openeuler.org/openEuler-24.03-LTS-SP4/virtual_machine_img/x86_64/openEuler-24.03-LTS-SP4-x86_64-qcow2.xz 或 cirros 官方 download.cirros-cloud.net

1. 操作系统基础配置(三节点都执行)

1.1 主机名与 hosts

# 各节点分别设置主机名(示例为 controller)
hostnamectl set-hostname controller

# 三节点追加 hosts 映射
grep -q "^192.168.172.11 controller" /etc/hosts || printf "192.168.172.11 controller\n192.168.172.12 compute1\n192.168.172.13 compute2\n" >> /etc/hosts

1.2 网卡静态化(NetworkManager)

openEuler 最小安装双网卡名默认为 enp0s17(VMnet1 管理网)与 enp0s18(VMnet8 NAT)。每台节点把 .11/.12/.13 替换成自己的地址:

# 管理网:静态(每台替换地址;不给 gateway,默认路由走 NAT 口)
nmcli con add type ethernet con-name mgmt0 ifname enp0s17 \
  ipv4.method manual ipv4.addresses 192.168.172.11/24

# NAT 口:DHCP,默认路由与 DNS 从这里拿
nmcli con add type ethernet con-name nat0 ifname enp0s18 ipv4.method auto

nmcli con up mgmt0 && nmcli con up nat0
ip -br a    # 确认 enp0s17 静态 IP、enp0s18 拿到 192.168.182.x

1.3 SSH 三节点互信

# 每台生成密钥(一路回车)
[ -f /root/.ssh/id_ed25519 ] || ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519 -q

# 每台把三台的公钥都写进 authorized_keys(可用 ssh-copy-id 逐台做,或手动汇总)
ssh-copy-id -o StrictHostKeyChecking=no root@controller
ssh-copy-id -o StrictHostKeyChecking=no root@compute1
ssh-copy-id -o StrictHostKeyChecking=no root@compute2
ssh-keyscan -H controller compute1 compute2 >> /root/.ssh/known_hosts 2>/dev/null

# 验证 9/9 通
for h in controller compute1 compute2; do ssh -o BatchMode=yes $h hostname; done

1.4 SELinux、防火墙、时间同步

# SELinux 设为 Permissive(strict 模式未验证)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
getenforce    # Permissive

# 实验环境直接关防火墙(openEuler ceph-mon 会因 firewalld 拦 3300/6789 卡在 probing)
systemctl stop firewalld && systemctl disable firewalld

# 时间同步(openEuler 自带 chrony,保持默认即可)
systemctl enable --now chronyd && chronyc tracking | head -2

1.5 pip 源与基础包

# pip 源 → 清华
mkdir -p /etc
printf "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\ntrusted-host = pypi.tuna.tsinghua.edu.cn\n" > /etc/pip.conf

# 基础包
dnf install -y python3-pip python3-libselinux lvm2 chrony uuid
python3 -c "import selinux; print('selinux-ok')"    # ansible 必需

dnf 源不用改:openEuler 24.03 SP4 自带的 OS/EPOL/everything/update 源包含 ceph 全套和 moby-engine,直接可用。此前尝试的 cephadm 容器化路线(需拉 quay.io 镜像)在当前网络不可行,直接用 RPM 原生部署 Ceph。


2. Ceph 部署(RPM 原生,三节点手工集群)

2.1 安装 Ceph RPM(三节点)

dnf install -y ceph-mon ceph-osd ceph-mds ceph-common ceph-volume
rpm -q ceph-mon ceph-osd ceph-mds ceph-common ceph-volume
# ceph-mon-18.2.2-13.oe2403sp4.x86_64

2.2 在 controller 初始化集群配置

# 生成 ceph.conf(fsid 用 uuidgen 生成后固定下来,下文以实际 FSID 为例)
FSID=$(uuidgen); echo "FSID=$FSID"    # 记下它,后面 monmap 要用
mkdir -p /etc/ceph /var/lib/ceph/tmp /var/lib/ceph/bootstrap-osd

cat > /etc/ceph/ceph.conf <<EOF
[global]
fsid = $FSID
mon initial members = controller compute1 compute2
mon host = 192.168.172.11,192.168.172.12,192.168.172.13
public network = 192.168.172.0/24
cluster network = 192.168.172.0/24
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 64
osd pool default pgp num = 64
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
EOF

# 密钥三件套
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring \
  --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring \
  --gen-key -n client.bootstrap-osd --cap mon 'allow profile bootstrap-osd'

# **关键防坑**:openEuler 的 ceph-mon --mkfs 会自动生成默认 client.admin/bootstrap 密钥、
# 忽略 keyring 里的同名实体,导致集群内 admin 密钥不一致。先把 admin/bootstrap 密钥
# 合并进 mon.keyring,mkfs 时就会一起写入。
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

# monmap:显式登记 3 个 mon(v2+v1 双端口)
monmaptool --create --clobber \
  --addv controller "[v2:192.168.172.11:3300/0,v1:192.168.172.11:6789/0]" \
  --addv compute1   "[v2:192.168.172.12:3300/0,v1:192.168.172.12:6789/0]" \
  --addv compute2   "[v2:192.168.172.13:3300/0,v1:192.168.172.13:6789/0]" \
  --fsid $FSID /tmp/monmap-bin

chmod 644 /etc/ceph/ceph.conf
chmod 600 /etc/ceph/ceph.client.admin.keyring /tmp/ceph.mon.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

2.3 分发到 compute1 / compute2(controller 执行)

for h in compute1 compute2; do
  scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring /tmp/ceph.mon.keyring $h:/etc/ceph/
  scp /tmp/monmap-bin $h:/tmp/monmap-bin
  ssh $h "mkdir -p /var/lib/ceph/bootstrap-osd"
  scp /var/lib/ceph/bootstrap-osd/ceph.keyring $h:/var/lib/ceph/bootstrap-osd/
done

2.4 各节点启动 mon(三节点都执行)

H=$(hostname -s)
mkdir -p /var/lib/ceph/mon/ceph-$H
chown -R ceph:ceph /var/lib/ceph/mon/ceph-$H /etc/ceph /var/lib/ceph/bootstrap-osd
restorecon -R /etc/ceph /var/lib/ceph 2>/dev/null || true

sudo -u ceph ceph-mon --cluster ceph --mkfs -i $H --monmap /tmp/monmap-bin --keyring /tmp/ceph.mon.keyring
touch /var/lib/ceph/mon/ceph-$H/done
systemctl enable --now ceph-mon@$H
sleep 6 && systemctl is-active ceph-mon@$H

三台 mon 都起来后 ceph -s 应显示 3 mon quorum。若 mgr 启动失败过,先 systemctl reset-failed ceph-mgr@$H。

2.5 注册 mgr keyring 并启动 mgr(三节点都执行)

openEuler 的 ceph-mgr@.service 要求密钥文件预先存在于 /var/lib/ceph/mgr/ceph-$H/keyring:

H=$(hostname -s)
mkdir -p /var/lib/ceph/mgr/ceph-$H
# controller 上执行(mon quorum 就绪后);compute 节点从 controller scp 过去即可
ceph auth get-or-create mgr.$H mon 'allow profile mgr' osd 'allow *' mds 'allow *' \
  -o /var/lib/ceph/mgr/ceph-$H/keyring
chown -R ceph:ceph /var/lib/ceph/mgr
systemctl enable --now ceph-mgr@$H

2.6 创建 OSD(三节点,各 2 块盘)

ceph-volume lvm create --data /dev/sdb
ceph-volume lvm create --data /dev/sdc
ls /var/lib/ceph/osd/ | wc -l    # 全集群共 6 个

2.7 创建 RBD 池(controller)

for p in images volumes vms; do
  ceph osd pool create $p 64
  rbd pool init $p
done
ceph health     # 期望 HEALTH_OK

2.8 生成 OpenStack 对接凭据与配置(controller)

mkdir -p /etc/kolla/config/glance /etc/kolla/config/cinder/cinder-volume /etc/kolla/config/nova

ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=images' \
  mgr 'profile rbd pool=images' -o /etc/kolla/config/glance/ceph.client.glance.keyring
ceph auth get-or-create client.cinder mon 'profile rbd' \
  osd 'profile rbd pool=volumes, profile rbd pool=vms' \
  mgr 'profile rbd pool=volumes, profile rbd pool=vms' \
  -o /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring
ceph auth get-or-create client.nova mon 'profile rbd' \
  osd 'profile rbd pool=vms, profile rbd pool=volumes' \
  mgr 'profile rbd pool=vms, profile rbd pool=volumes' \
  -o /etc/kolla/config/nova/ceph.client.nova.keyring

for d in glance cinder/cinder-volume nova; do cp /etc/ceph/ceph.conf /etc/kolla/config/$d/ceph.conf; done

3. Docker 安装(三节点)

openEuler 的 moby-engine 只有服务端没有 CLI,且其 /etc/sysconfig/docker 默认参数与 kolla 生成的 daemon.json 冲突,必须按以下顺序处理:

# 1) 服务端(openEuler 源)
dnf install -y moby-engine

# 2) CLI:NJU 静态二进制补齐(kolla 由 systemd 以 /usr/bin/docker start -a 管理容器,没有 CLI 一切免谈)
curl -sL --max-time 120 -o /tmp/docker.tgz \
  "https://mirrors.nju.edu.cn/docker-ce/linux/static/stable/x86_64/docker-27.3.1.tgz"
tar xzf /tmp/docker.tgz -C /tmp docker/docker --strip-components=1
install -m 755 /tmp/docker /usr/local/bin/docker
ln -sf /usr/local/bin/docker /usr/bin/docker      # **必须**,否则 kolla-* unit 全部 203/EXEC
docker --version

# 3) 移除 sysconfig 里与 daemon.json 冲突的 --log-driver=journald
sed -i "s/--log-driver=journald//g" /etc/sysconfig/docker

# 4) daemon.json:桥与 iptables 全关(容器网络由 kolla/neutron 接管),限制日志
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
 "bridge": "none",
 "ip-forward": false,
 "iptables": false,
 "log-driver": "json-file",
 "log-opts": {"max-file": "5", "max-size": "50m"}
}
EOF

# 5) docker SDK(ansible docker 模块依赖)
pip3 install docker

systemctl enable --now docker && systemctl is-active docker

4. kolla-ansible 安装与配置(仅 controller)

4.1 Python 虚拟环境

python3 -m venv /opt/kolla-venv
/opt/kolla-venv/bin/pip install -U pip
/opt/kolla-venv/bin/pip install "kolla-ansible==2025.1"
/opt/kolla-venv/bin/kolla-ansible --version    # 22.2.0

4.2 ansible 依赖:用完整 bundle 替代 galaxy

galaxy.ansible.com 的 artifact 下载被墙(302 → AWS),不要跑 ansible-galaxy 拉取,直接用 pip 的 ansible 大包(内含 kolla 需要的全部 collections):

/opt/kolla-venv/bin/pip install ansible
# 验证 collections 齐全
/opt/kolla-venv/bin/ansible-galaxy collection list | \
  grep -E "community.general|community.docker|ansible.posix|community.crypto|ansible.netcommon|ansible.utils"
/opt/kolla-venv/bin/kolla-ansible install-deps

4.3 复制配置模板与 inventory

mkdir -p /etc/kolla
cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/multinode /root/multinode

4.4 编写 /root/multinode(全文替换)

[control]
controller ansible_host=192.168.172.11

[network]
controller ansible_host=192.168.172.11

[compute]
compute1 ansible_host=192.168.172.12
compute2 ansible_host=192.168.172.13

[monitoring]
controller ansible_host=192.168.172.11

[storage]
controller ansible_host=192.168.172.11

[loadbalancer]
controller ansible_host=192.168.172.11

[deployment]
localhost ansible_connection=local

inventory 必须保留完整 multinode 模板结构(各服务组是 [control] 的 children)。只留 [control]/[compute] 会导致大量服务无处部署。也不要去 sed 模板里的注释行(曾把 #compute01 api_interface=em1 弄成未注释行,污染 compute 节点配置)。

4.5 编写 /etc/kolla/globals.yml(全文替换)

---
kolla_base_distro: "rocky"
openstack_release: "2025.1"
docker_registry: "quay.nju.edu.cn"
docker_namespace: "openstack.kolla"

kolla_internal_vip_address: "192.168.172.100"
network_interface: "enp0s17"
neutron_external_interface: "enp0s18"

enable_haproxy: "yes"
enable_cinder: "yes"
enable_cinder_backend_lvm: "no"
enable_heat: "no"
enable_neutron_provider_networks: "yes"
enable_opensearch: no
openstack_service_workers: "3"

# —— openEuler 适配 ——
redhat_pkg_install:
  - git
  - iputils
  - sudo
enable_docker_repo: false          # 不加 docker-ce 源(openEuler 上装不上且失败会残留 /etc/yum.repos.d/docker.repo)
docker_packages:
  - moby-engine
skip_cinder_backend_check: yes     # 外部 Ceph 场景必须,否则 prechecks 因无 lvm 后端报错

4.6 生成密码

/opt/kolla-venv/bin/kolla-genpwd -p /etc/kolla/passwords.yml
grep keystone_admin_password /etc/kolla/passwords.yml    # 记下 admin 密码

4.7 两个必打补丁(openEuler + 22.2.0 特有)

补丁一:prechecks 兼容 openEuler 24.03 / ansible 2.18。
编辑 /opt/kolla-venv/share/kolla-ansible/ansible/roles/prechecks/vars/main.yml:

# ① 版本门槛行改为(原始为 ansible_version_min: '2.19')
docker_version_min: '18.09'
docker_py_version_min: '3.4.1'
ansible_version_min: '2.18'
ansible_version_max: '2.20'

# ② distribution_version 匹配列表中,openEuler 段改为:
  openEuler:
    - "24.03"
    - "sp4"

补丁二:proxysql 规则模板 KeyError。
22.2.0 的 /opt/kolla-venv/share/kolla-ansible/ansible/roles/proxysql-config/templates/rules.yaml.j2 生成的第二条规则只有 username 无 schemaname,镜像内 kolla_proxysql_config_sync 会 KeyError(2025.1 中 MariaDB 的 VIP 负载均衡必须走 proxysql,不能绕过)。编辑该模板,删除其中 username-only 的规则分支,只保留带 schemaname 的分支(改后第 15 行附近应只有 schemaname: "{{ rule['schema'] }}" 形式)。改前先 cp rules.yaml.j2 rules.yaml.j2.bak。


5. 部署执行(controller,/opt/kolla-venv/bin 加入 PATH)

export PATH=/opt/kolla-venv/bin:$PATH
export ANSIBLE_HOST_KEY_CHECKING=False
cd /root

# ① bootstrap-servers:给三节点装基础包/内核参数/创建 kolla 用户
kolla-ansible bootstrap-servers -i /root/multinode
# 若中途 docker-ce 源安装失败:rm -f /etc/yum.repos.d/docker.repo 后重跑

# ② prechecks:部署前体检(补丁 4.7 生效后应 RC=0)
kolla-ansible prechecks -i /root/multinode

# ③ pull:预拉全部容器镜像(NJU 源,约 40 个镜像,耗时较长,建议 nohup)
nohup kolla-ansible pull -i /root/multinode > /root/kolla_pull.log 2>&1 &
tail -f /root/kolla_pull.log

# ④ deploy:正式部署(1~2 小时,建议 nohup)
nohup kolla-ansible deploy -i /root/multinode > /root/kolla_deploy.log 2>&1 &
tail -f /root/kolla_deploy.log

# ⑤ post-deploy:生成凭据
kolla-ansible post-deploy -i /root/multinode
cp /etc/kolla/admin-openrc.sh /root/    # 若文件生成在 /etc/kolla/ 下

deploy 收尾后必须立刻做两件事(NJU 镜像缺件导致):

  1. toolbox 补装 ansible-runner(否则 OVS 端口配置下发失败):
    docker exec -u root kolla_toolbox /opt/ansible/bin/pip install ansible-runner
    (容器被重建后会丢,需重装)
  2. 验证 /usr/bin/docker 软链存在(compute 节点也要),否则 kolla-*-container.service 全部 203/EXEC:
    ls -l /usr/bin/docker && systemctl restart kolla-haproxy-container.service

6. 部署后必做:Ceph 对接补全(三步,否则虚机起不来)

kolla 22.2 对外部 Ceph 的 keyring 不会自动注入 openEuler 场景的容器配置,必须手工补:

6.1 把 ceph 配置/keyring 声明进容器(compute ×2 与 controller)

对 compute 节点的 /etc/kolla/nova-compute/(owner 用 nova):

D=/etc/kolla/nova-compute
cp /etc/ceph/ceph.conf $D/ceph.conf
ceph auth get client.nova -o $D/ceph.client.nova.keyring
chmod 644 $D/ceph.conf && chmod 640 $D/ceph.client.nova.keyring

python3 - <<'EOF'
import json
p='/etc/kolla/nova-compute/config.json'
c=json.load(open(p))
files=[f['source'] for f in c['config_files']]
want=[('/var/lib/kolla/config_files/ceph.conf','/etc/ceph/ceph.conf','nova','0644'),
      ('/var/lib/kolla/config_files/ceph.client.nova.keyring','/etc/ceph/ceph.client.nova.keyring','nova','0600')]
for src,dst,owner,perm in want:
    if src not in files:
        c['config_files'].append({'source':src,'dest':dst,'owner':owner,'perm':perm})
json.dump(c,open(p,'w'),indent=4)
print('updated')
EOF
docker restart nova_compute

controller 的 /etc/kolla/cinder-volume/ 与 /etc/kolla/cinder-backup/ 同理(keyring 用 client.cinder,owner 用 cinder),改完 docker restart cinder_volume cinder_backup。

6.2 libvirt 注册 RBD secret(compute ×2)

# UUID 必须与 cinder-volume.conf / nova-compute.conf 里的 rbd_secret_uuid 一致
UUID=3d3b0f3e-1a2b-4c5d-8e9f-0a1b2c3d4e5f
KEY=$(ceph auth get-key client.nova)

cat > /tmp/rbd-secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>$UUID</uuid>
  <usage type='ceph'><name>client.nova secret</name></usage>
</secret>
EOF
docker cp /tmp/rbd-secret.xml nova_libvirt:/tmp/rbd-secret.xml
docker exec nova_libvirt virsh secret-define --file /tmp/rbd-secret.xml
docker exec nova_libvirt virsh secret-set-value --secret $UUID --base64 "$KEY"

# 备份
mkdir -p /etc/kolla/nova-libvirt/secrets
cp /tmp/rbd-secret.xml /etc/kolla/nova-libvirt/secrets/
echo "$KEY" > /etc/kolla/nova-libvirt/secrets/client.nova.key

6.3 br-ex 改为 standalone(三节点)

docker exec openvswitch_vswitchd ovs-vsctl set bridge br-ex fail_mode=standalone

7. 部署后初始化与验证(controller,kolla_toolbox 内)

docker exec -it kolla_toolbox bash
export OS_AUTH_URL=http://192.168.172.100:5000/v3 OS_USERNAME=admin \
  OS_PASSWORD='<keystone_admin_password>' OS_PROJECT_NAME=admin \
  OS_USER_DOMAIN_NAME=Default OS_PROJECT_DOMAIN_NAME=Default OS_IDENTITY_API_VERSION=3

# 外部网络(flat physnet1 = br-ex 上的 192.168.182.0/24)
openstack network create --external --provider-physical-network physnet1 \
  --provider-network-type flat --share ext-net
openstack subnet create --network ext-net --subnet-range 192.168.182.0/24 \
  --no-dhcp --gateway 192.168.182.2 \
  --allocation-pool start=192.168.182.100,end=192.168.182.200 ext-subnet

# 内部网络(VXLAN)
openstack network create demo-net
openstack subnet create --network demo-net --subnet-range 10.0.0.0/24 --gateway 10.0.0.1 \
  --allocation-pool start=10.0.0.10,end=10.0.0.200 \
  --dns-nameserver 114.114.114.114 demo-subnet

# 路由器(注意:先建子网再设外网网关,否则网关口拿不到 IP)
openstack router create demo-router
openstack router add subnet demo-router demo-subnet
openstack router set --external-gateway ext-net demo-router
openstack router show demo-router | grep external_gateway_info   # 应有 fixed_ip

# 规格 / 镜像 / 安全组 / 密钥对
openstack flavor create --vcpus 1 --ram 512  --disk 1  --public m1.tiny
openstack flavor create --vcpus 1 --ram 1024 --disk 10 --public m1.small
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
openstack keypair create demo-key > /root/demo-key.pem && chmod 600 /root/demo-key.pem
# cirros 镜像:ctl 无 DNS,需在本机下载后 SFTP 到 /root/ 再 docker cp 进 toolbox
openstack image create --public --disk-format qcow2 --container-format bare \
  --file /tmp/cirros.img cirros-0.6.2

# 起测试虚机
openstack server create --flavor m1.tiny --image cirros-0.6.2 \
  --network demo-net --key-name demo-key test-vm1
openstack floating ip create ext-net
openstack server add floating ip test-vm1 <浮动IP>

# 端到端验证
openstack server list                  # ACTIVE + 内网 IP
openstack console log show --lines 5 test-vm1   # cirros login 提示
# 本机 ssh cirros@<浮动IP>,密码 gocubsgo

8. 常见故障速查(部署阶段)

报错/现象根因处理
kolla-*-container.service 状态 203/EXEC/usr/bin/docker 不存在(moby-engine 无 CLI)静态 CLI + ln -sf /usr/local/bin/docker /usr/bin/docker(三节点)
bootstrap-servers 在 docker 角色失败enable_docker_repo 默认尝试装 docker-ceglobals 里 enable_docker_repo: false + docker_packages: [moby-engine];失败后 rm -f /etc/yum.repos.d/docker.repo 重跑
prechecks 报 distribution/version 不支持vars 未含 openEuler 24.03打补丁 4.7-补丁一
prechecks 报 ansible 版本ansible-core 2.18 被 2.19 门槛卡同上(ansible_version_min: '2.18')
prechecks 报无 cinder 后端外部 Ceph 场景无 lvmskip_cinder_backend_check: yes
deploy 期间 proxysql 容器日志 KeyErrorrules.yaml.j2 模板 bug打补丁 4.7-补丁二
OVS 端口配置下发失败kolla_toolbox 缺 ansible-runnerdocker exec -u root kolla_toolbox /opt/ansible/bin/pip install ansible-runner
ceph-mon 停在 probingfirewalld 拦 3300/6789关闭 firewalld
ceph mon/mgr 起不来、密钥不匹配openEuler mkfs 自动生成默认密钥按 2.2 合并 keyring 后 mkfs;mgr 按 2.5 预置 keyring
虚机 NoValidHost(StorageError)ceph.conf/keyring 没进 nova_compute 容器按 6.1 补 config.json
虚机 ERROR: Secret not foundlibvirt 缺 RBD secret按 6.2 注册
浮动 IP ping 不通br-ex fail_mode=secure按 6.3 改 standalone

附录 A:本次实际安装的软件清单

层包/软件版本安装方式
OS 基础python3-pip / python3-libselinux / lvm2 / chrony / uuid / podman*openEuler 源dnf
Cephceph-mon / ceph-osd / ceph-mds / ceph-common / ceph-volume18.2.2-13.oe2403sp4dnf
Dockermoby-engine 25.0.3(服务端)openEuler 源dnf
Dockerdocker CLI 27.3.1(静态二进制)NJUtar 解压到 /usr/local/bin
Dockerdocker SDK(python docker 包)pypipip3
Kollakolla-ansible 22.2.0 / ansible(含 collections)pypi/opt/kolla-venv 内 pip
镜像2025.1-rocky-10 全家桶(约 49 个)quay.nju.edu.cnkolla-ansible pull

* podman 仅在最初尝试 cephadm 时安装,RPM 原生 Ceph 方案下非必需。

附录 B:目录与文件速查

路径内容
/etc/kolla/globals.yml / passwords.yml / admin-openrc.shkolla 全局配置 / 密码 / admin 凭据
/root/multinodeansible inventory
/etc/kolla/config/{glance,cinder,nova}/外部 Ceph 对接 conf + keyring(deploy 前放置)
/etc/kolla/<服务>/config.json各服务容器的文件挂载声明(改后需 restart 容器)
/opt/kolla-venv/kolla-ansible 虚拟环境(含两个补丁文件)
/etc/ceph/Ceph 全局配置与 admin keyring
/var/lib/ceph/{mon,mgr,osd,bootstrap-osd}/Ceph 数据目录
/etc/kolla/nova-libvirt/secrets/RBD secret 备份
/root/demo-key.pem / /root/cirros-0.6.2-x86_64-disk.img密钥对私钥 / 测试镜像
基于Kolla Ansible的OpenStack多节点集群横向扩容实战(2025.1版) 本文详细介绍了基于Kolla Ansible的OpenStack多节点集群横向扩容实战(2025.1版),包括新节点准备、动态更新Ansible Inventory、增量部署及部署后验证等关键步骤。通过标准化流程和实用技巧,帮助用户实现业务零中断的平滑扩容,提升OpenStack集群的扩展性和灵活性。 阅读详情

相关推荐

从零开始:YOLOv8车牌检测模型训练全流程实战

本文详细介绍了从零开始训练YOLOv8车牌检测模型的全流程实战指南。内容涵盖环境搭建、数据集收集与标注、模型配置与训练、评估测试及高级优化技巧。通过使用预训练模型和迁移学习,开发者可以高效构建精准的车牌检测系统,并掌握模型导出与部署的关键步骤。

weixin_29061041的博客 335

OpenStack部署实施手册(趟坑版)

本文档详述在RockyLinux9上基于Kolla-Ansible部署多节点高可用OpenStack(Flamingo)的全流程,涵盖环境准备、部署机搭建、Ceph存储对接、集群部署与验证。重点包括节点基础配置、SSH免密、内核优化、控制节点br-ex自愈固化、Python虚拟环境与Ansible/Kolla-Ansible安装、inventory及globals.yml配置、外部Ceph集群部署与对接、全栈服务部署与功能验证。通过故障注入测试高可用性,提供完整排查指南,适用于生产级OpenStack平台实

彭大帅的博客 300

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

OpenStack 组件详解(完整版 · 2025)

优势说明自主可控不依赖公有云厂商,数据安全有保障无限扩展支持上千节点集群,适合超大规模部署开放生态支持与 Kubernetes、Ceph、Ansible、Terraform 集成成本优势无软件授权费用,适合长期投资混合云基础可与 AWS Outposts、Azure Stack 集成🎯 下一步建议:使用 Kolla-Ansible 部署一个三节点 OpenStack 测试环境集成 Ceph 作为统一存储后端。

老韩的Linux云计算架构师进阶之路 3189

ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟的关键技术解析

本文深入解析了ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟中的关键技术。通过详细介绍CDP模型的核心价值、建模关键技术、滞回曲线优化方法及典型问题排查指南,帮助工程师精准模拟混凝土的拉伸开裂和压缩压碎行为,提升抗震分析效率。文章还提供了实用的工程应用技巧,如快速建模模板和后处理自动化脚本。

weixin_30555125的博客 525

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

weixin_44240228的博客 1万+

Ansible第17篇【Kolla-Ansible 部署脚本模板(生产级 · 2025)】

太棒了!你已经进入 OpenStack 生产部署的核心环节。提供一套,适用于 OpenStack Wallaby / Xena / Yoga / Caracal 等主流稳定版本(截至 2025),支持。

老韩的Linux云计算架构师进阶之路 1369

基于STM32+OV7670的图像采集系统(基础篇:ov7670介绍)

一、简单认识 先来看一下外观: OV7670,图像传感器,体积小,工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输入整帧、子采样、取窗口等方式的各种分辨率8位影像数据。 其他介绍比较繁琐,这里就不一一赘述了,我们只需要知道它是通过SCCB总线控制的就行了。 带FIFO与不带FIFO 目前市场上购买的ov7670模块分为两种,一种是不带FIFO芯片、一种是带FIFO芯片的。 FIFO是什么:(First Input First Output)先入先出的意思,

m0_59113542的博客 4万+

如何在 Ubuntu 22.04 LTS 上部署并优化 OpenStack 云计算平台,实现多租户虚拟化与弹性伸缩?

在企业级私有云或混合云架构中,OpenStack 作为领先的开源云操作系统,提供了完整的 计算(Compute)、网络(Networking)、存储(Block/Object)、身份认证(Identity)、镜像管理(Image) 等服务,实现真正的 IaaS(Infrastructure as a Service)。A5IDC本文将以 Ubuntu 22.04 LTS 为基础,从硬件选型、网络架构、核心服务部署、性能优化到多租户隔离与弹性伸缩策略进行深入探讨,涵盖代码示例、配置细节、表格评测与实战建议,帮

A5数据 1044

新凯来嵌入式面经及参考答案

利用编译器预定义宏判断目标架构,如。

大模型大数据攻城狮的专栏 2065

《深入掌握MongoDB数据库》 - 专栏介绍和目录

本专栏系统讲解MongoDB从基础到高级的全栈知识,涵盖安装配置、核心操作、性能优化、安全运维等核心内容。基础部分包括CRUD操作、数据类型、查询语法等入门知识;进阶部分深入索引优化、聚合查询、事务处理等高级特性;核心原理解析存储引擎与数据格式;安全运维则聚焦访问控制、认证机制、审计日志等企业级实践。通过实战案例与最佳实践,帮助开发者全面掌握MongoDB在不同场景下的应用,适合各层次技术人员系统学习。

数据知道的博客 2997

OpenStack Kolla-Ansible 高可用部署文档(新手友好版)

本文档为RockyLinux9上基于Kolla-Ansible 20.6.0(Epoxy 2025.1)的9节点OpenStack部署指南,涵盖从环境规划、版本降级、关键配置到部署执行与排障的全流程。针对单网卡OVS管理网场景,重点解决控制节点重启丢网问题,通过systemd自愈服务实现网络自动恢复。文档强调按章操作、配置精准(如network_interface分节点设置)、版本兼容(降级至20.6.0以适配老CPU),并提供存储后端对接Ceph的完整方案。部署成功后可通过admin-openrc验证服务

彭大帅的博客 920

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 270

深度解析:OpenStack私有云基础架构指南

还记得第一次听到OpenStack这个名字时,很多人都会想:"这不就是开源版的AWS吗?"其实,这种理解既对也不对。 对的地方:OpenStack确实提供了类似AWS的IaaS能力,包括虚拟机管理、存储、网络等核心功能。 不对的地方:OpenStack更像是一套"云操作系统"的工具箱,你可以根据企业需求自由组合搭配,而不是像AWS那样的标准化服务。

TechVision大咖圈聚合全球科技大咖,洞察AI、云计算、大数据等前沿趋势,为企业决策者提供智见未来的转型路径。 1538

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

openstack之Cinder

Cinder 文章目录Cinder1.理解块存储服务2.Cinder 架构以及块存储服务组件介绍3.物理部署方案4.安装组件并配置5.初始化块存储服务的数据库,并验证6.配置计算服务以使用块设备存储7.完成安装8.创建cinder和cinderv2服务实体9.创建块设备存储服务的API入口点10.cinder-scheduler的调度 1.理解块存储服务 操作系统获得存储空间的方式一般有两种: 通...

959 830

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2025年OpenStack私有云搭建实战:从选型到排障的完整指南

在云原生与Kubernetes盛行的今天,开源IaaS框架OpenStack依然是构建企业级私有云的核心选择。它通过将物理服务器、存储与网络资源抽象为统一资源池,以API驱动的方式对外提供计算、存储和网络服务,本质上相当于一套可完全掌控的“自建AWS”。理解其模块化架构和底层网络、存储机制,是发挥技术价值的前提。私有云在资源隔离、数据安全与合规方面具有天然优势,广泛适用于企业内部基础设施云化、开发测试环境自助申请以及Kubernetes底层资源供给等场景。从发行版选型、网络规划到块存储接入,每一步都依赖对组

weixin_33491377的博客 284

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是 OpenStack:开源的云操作系统

OpenStack 是一个开源的云操作系统,用于构建和管理私有云、公有云或混合云基础设施。它通过模块化组件(如 Nova、Neutron、Cinder 等)提供计算、网络和存储资源,支持弹性扩展和自动化管理。OpenStack 起源于 2010 年,由 Rackspace 和 NASA 联合发起,现已成为云计算领域的行业标准,被全球数千家企业采用。其核心特点包括开源免费、API 驱动、高可用性和多云支持。部署方式灵活,从开发环境(DevStack)到生产集群均可实现。典型用例涵盖游戏、零售、电信等行业,支持

彬彬侠的博客 2345

存储选型避坑指南:MinIO、RustFS和Ceph的终极抉择

本文对比分析了2025年三大主流分布式存储方案MinIO、RustFS和Ceph的优劣势,为技术选型提供决策参考。MinIO凭借轻量级和S3兼容性在云原生场景表现突出;RustFS作为新贵,在高性能计算和边缘AI场景优势显著;Ceph则仍是超大规模统一存储的首选。文章通过性能基准测试、扩展性对比和TCO分析,揭示了各方案的适用边界和隐藏成本,并针对不同业务场景提供选型建议。同时强调建立评估框架、控制迁移风险的重要性,指出存储选型应基于实际需求而非技术潮流,没有最佳方案,只有最适合的选择。

分布式存储与RustFS的博客 1450

openstack

OpenStack 是一个开源的云计算管理平台,用于构建和管理私有云、公有云和混合云基础设施。它提供了一套模块化的服务,允许用户通过 Web 界面、命令行或 API 来灵活管理计算、存储、网络等资源。核心组件(主要服务):Nova – 计算服务:管理虚拟机(VM)的创建、调度和生命周期,类似 AWS EC2。Neutron – 网络服务:提供虚拟网络、子网、路由器、防火墙等网络功能。Cinder – 块存储服务:为虚拟机提供持久化块存储(类似硬盘),可动态挂载/卸载。

qq_22744093的博客 177

Qwen3.8-27B-QUASAR-NVFP4应用开发实战:图像视频输入、工具调用与三级推理强度配置

`Qwen3.8-27B-QUASAR-NVFP4` 是由 QUASAR 量化感知训练(QAT)方法产出的 **4-bit NVFP4 量化多模态大模型**:体积仅 19.7 GB,支持**图像与视频输入**、**自动工具调用(Auto Tool Choice)**,以及 **xhigh / medium / low 三级推理强度配置**,用 vLLM 即可直接部署,是 Blackwell 显卡上

gitblog_01138的博客 767

OpenStack-Ansible自动化运维:CI/CD集成与版本升级策略

OpenStack-Ansible作为开源的自动化部署工具,通过Ansible playbooks实现OpenStack环境的快速搭建与高效运维。本文将详细介绍其CI/CD集成方案和版本升级策略,帮助运维团队实现环境的持续集成与平稳升级。 ## OpenStack-Ansible架构概览 OpenStack-Ansible采用分层架构设计,将基础设施服务与OpenStack服务分离部署,确保系

gitblog_00579的博客 503

Openstack入门篇(十六)之Cinder服务的部署与测试

1.理解块存储服务 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库) 通过 NFS、CIFS 等 协议,mount 远程的文件系统第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷)第二种叫做文件系...

weixin_30652271的博客 260

OpenStack入门修炼之Cinder服务的部署与测试(17)

1.理解块存储服务 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库) 通过 NFS、CIFS 等 协议,mount 远程的文件系统 第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume...

weixin_34129145的博客 327

cinder连接mysql数据库_Openstack入门篇(十六)之Cinder服务的部署与测试

1.理解块存储服务操作系统获得存储空间的方式一般有两种:通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)通过 NFS、CIFS 等 协议,mount 远程的文件系统第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷)第二种叫做文件系统存储。NAS 和 NFS 服...

weixin_35676877的博客 431

开源对象存储项目一览

开源对象存储领域正经历重大变革:MinIO因转向商业化停止维护开源版本,引发用户流失;Ceph-RGW凭借稳定性和多协议支持仍是OpenStack首选,但架构复杂;新兴的RustFS对标MinIO,性能优异但尚未成熟;SeaweedFS在小文件存储领域表现突出,但生态不完善;OpenStack Swift则面临市场关注度下降的挑战。当前各方案各有优劣,用户需根据场景谨慎选择。

u013214505的博客 852

Gemma 3n E4B快速上手教程:一条Ollama命令本地跑通,3步完成首次对话

Gemma 3n E4B 是 Google 推出的高效端侧大模型,由 Unsloth 提供量化版本(gemma-3n-E4B-it)。本教程面向零基础新手,手把手教你用 Ollama 本地部署 Gemma 3n E4B:只需一条命令拉取模型,三步完成首次对话,全程无需 GPU、无需复杂配置,普通笔记本也能流畅运行。 ## 为什么 Gemma 3n E4B 适合本地部署? Gemma 3n 系列

gitblog_00409的博客 206
上一篇: Centos7.6 快速安装部署DeepSeek
云计算老王
博客等级 码龄7年 164粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值