Kolla-Ansible 部署 OpenStack + Ceph 完整方案
一、方案概述
1.1 部署架构
本方案使用 kolla-ansible 以全容器化方式部署 OpenStack 云平台,同时使用 cephadm 部署 Ceph 分布式存储集群作为 OpenStack 的统一后端存储。
┌─────────────────────────────────────────────────────────┐
│ OpenStack 集群 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Controller│ │Controller│ │Controller│ │
│ │ Node1 │ │ Node2 │ │ Node3 │ │
│ │ Keystone │ │ Keystone │ │ Keystone │ │
│ │ Glance │ │ Glance │ │ Glance │ │
│ │ Nova-API │ │ Nova-API │ │ Nova-API │ │
│ │ Neutron │ │ Neutron │ │ Neutron │ │
│ │ Cinder │ │ Cinder │ │ Cinder │ │
│ │ Horizon │ │ Horizon │ │ Horizon │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ┌────┴─────┐ ┌────┴─────┐ ┌────┴─────┐ │
│ │ Compute │ │ Compute │ │ Compute │ │
│ │ Node1 │ │ Node2 │ │ Node3 │ │
│ │Nova-Comp │ │Nova-Comp │ │Nova-Comp │ │
│ │ Libvirt │ │ Libvirt │ │ Libvirt │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼──────────────────────┘
│ │ │
┌───────┴─────────────┴─────────────┴──────────────────────┐
│ Ceph 集群 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Mon │ │ Mon │ │ Mon │ │
│ │ Mgr │ │ Mgr │ │ Mgr │ │
│ │ OSD │ │ OSD │ │ OSD │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ Pools: images | volumes | vms | backups │
└───────────────────────────────────────────────────────────┘
核心设计:
- OpenStack 所有服务运行在 Docker 容器中,由 kolla-ansible 统一管理
- Ceph 提供 Glance 镜像存储、Cinder 块存储、Nova 虚拟机磁盘存储
- 采用 3 节点超融合架构,每个节点同时运行 Control/Compute/Network/Ceph 服务
- HAProxy + Keepalived 提供 VIP 高可用
1.2 节点规划
| 主机名 | 管理网 IP | 存储网 IP | 角色 |
|---|---|---|---|
| node1 | 10.0.0.11 | 10.0.1.11 | Controller + Compute + Network + Ceph(Mon/Mgr/OSD) |
| node2 | 10.0.0.12 | 10.0.1.12 | Controller + Compute + Network + Ceph(Mon/Mgr/OSD) |
| node3 | 10.0.0.13 | 10.0.1.13 | Controller + Compute + Network + Ceph(Mon/Mgr/OSD) |
VIP: 10.0.0.10(管理网浮动 IP,由 Keepalived 管理)
1.3 网络规划
| 网络类型 | 网段 | VLAN | 用途 |
|---|---|---|---|
| 管理网络 | 10.0.0.0/24 | - | OpenStack 内部 API、Ceph 公共网络 |
| 存储网络 | 10.0.1.0/24 | - | Ceph OSD 副本同步(推荐独立网卡) |
| 外部网络 | 192.168.1.0/24 | - | Floating IP、外部访问 |
| 租户隧道 | 10.0.2.0/24 | - | VXLAN 隧道网络 |
1.4 磁盘规划
每个节点:
/dev/sda(100GB): 系统盘,安装 Ubuntu 24.04/dev/sdb(500GB+): Ceph OSD 数据盘(裸盘,无分区表)/dev/sdc(可选): Ceph WAL/DB 分区盘(SSD 加速)
二、系统环境初始化
以下操作在 所有节点 执行,除非特别说明。
2.1 系统要求
- 操作系统: Ubuntu 24.04 LTS
- 内核: 6.8+
- 最低配置: 16 vCPU / 64GB RAM / 100GB 系统盘 + 500GB 数据盘
- 推荐配置: 32 vCPU / 128GB RAM / 100GB 系统盘 + 1TB 数据盘
2.2 设置主机名
# node1 上执行
hostnamectl set-hostname node1
# node2 上执行
hostnamectl set-hostname node2
# node3 上执行
hostnamectl set-hostname node3
2.3 配置主机解析
cat > /etc/hosts <<EOF
127.0.0.1 localhost
::1 localhost
10.0.0.11 node1
10.0.0.12 node2
10.0.0.13 node3
EOF
2.4 时间同步
timedatectl set-timezone Asia/Shanghai
apt install -y chrony
systemctl enable --now chrony
chronyc sources -v
2.5 关闭 Swap
swapoff -a
sed -i '/swap/d' /etc/fstab
2.6 内核参数
cat > /etc/sysctl.d/99-openstack.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
vm.swappiness = 0
vm.overcommit_memory = 1
EOF
modprobe br_netfilter
modprobe overlay
sysctl --system
2.7 安装基础软件
apt update
apt install -y python3-venv python3-pip git curl wget gcc \
libffi-dev libssl-dev python3-dev lvm2 thin-provisioning-tools
2.8 安装 Docker
# 添加 Docker 仓库
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
> /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 配置 Docker
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"storage-driver": "overlay2",
"live-restore": true,
"userland-proxy": false,
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
EOF
systemctl daemon-reload
systemctl enable --now docker
2.9 配置 SSH 免密
在 部署节点(node1) 上执行:
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
for host in node1 node2 node3; do
ssh-copy-id root@${host}
done
验证:
for host in node1 node2 node3; do
ssh ${host} hostname
done
三、部署 Ceph 集群
以下操作在 node1 上执行,除非特别说明。
3.1 安装 cephadm
apt install -y cephadm ceph-common podman
3.2 引导 Ceph 集群
cephadm bootstrap \
--mon-ip 10.0.0.11 \
--cluster-network 10.0.1.0/24 \
--ssh-private-key /root/.ssh/id_ed25519 \
--ssh-public-key /root/.ssh/id_ed25519.pub
输出中会包含:
- Dashboard URL:
https://node1:8443/ - 管理员密码(首次登录后请修改)
3.3 添加其他节点
ceph orch host add node2 10.0.0.12 --labels _admin
ceph orch host add node3 10.0.0.13 --labels _admin
# 验证
ceph orch host ls
3.4 部署 Mon 和 Mgr(高可用)
ceph orch apply mon --placement="node1,node2,node3"
ceph orch apply mgr --placement="node1,node2,node3"
3.5 添加 OSD
# 查看可用磁盘
ceph orch device ls
# 自动使用所有可用裸盘
ceph orch apply osd --all-available-devices
# 或指定磁盘
# ceph orch daemon add osd node1:/dev/sdb
# ceph orch daemon add osd node2:/dev/sdb
# ceph orch daemon add osd node3:/dev/sdb
3.6 验证 Ceph 集群
ceph -s
# 期望输出:
# health: HEALTH_OK
# mon: 3 daemons, quorum node1,node2,node3
# mgr: node1(active), standbys: node2, node3
# osd: 3 osds: 3 up, 3 in
3.7 创建 OpenStack 存储池
# 创建池
ceph osd pool create images 64
ceph osd pool create volumes 64
ceph osd pool create vms 64
ceph osd pool create backups 64
# 启用 RBD 应用
ceph osd pool application enable images rbd
ceph osd pool application enable volumes rbd
ceph osd pool application enable vms rbd
ceph osd pool application enable backups rbd
# 初始化
rbd pool init images
rbd pool init volumes
rbd pool init vms
rbd pool init backups
3.8 创建 OpenStack 专用 Ceph 用户
# Glance 用户
ceph auth get-or-create client.glance \
mon 'allow r' \
osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
# Cinder 用户
ceph auth get-or-create client.cinder \
mon 'allow r' \
osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
# Cinder-backup 用户
ceph auth get-or-create client.cinder-backup \
mon 'allow r' \
osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
# Nova 用户
ceph auth get-or-create client.nova \
mon 'allow r' \
osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=volumes, allow rx pool=images'
3.9 导出密钥环
ceph auth get client.glance -o /etc/ceph/ceph.client.glance.keyring
ceph auth get client.cinder -o /etc/ceph/ceph.client.cinder.keyring
ceph auth get client.cinder-backup -o /etc/ceph/ceph.client.cinder-backup.keyring
ceph auth get client.nova -o /etc/ceph/ceph.client.nova.keyring
3.10 分发 Ceph 配置到所有节点
for host in node1 node2 node3; do
ssh ${host} "mkdir -p /etc/ceph"
scp /etc/ceph/ceph.conf ${host}:/etc/ceph/
scp /etc/ceph/ceph.client.glance.keyring ${host}:/etc/ceph/
scp /etc/ceph/ceph.client.cinder.keyring ${host}:/etc/ceph/
scp /etc/ceph/ceph.client.cinder-backup.keyring ${host}:/etc/ceph/
scp /etc/ceph/ceph.client.nova.keyring ${host}:/etc/ceph/
done
四、部署节点安装 kolla-ansible
以下操作在 部署节点(node1) 上执行。
4.1 创建虚拟环境
python3 -m venv /opt/kolla-venv
source /opt/kolla-venv/bin/activate
pip install -U pip
4.2 安装依赖
pip install 'ansible-core>=2.15,<2.17'
4.3 安装 kolla-ansible
pip install kolla-ansible==18.0.0
版本说明:
kolla-ansible OpenStack 支持的 Ubuntu 18.0.0 2024.1 Caracal 22.04 / 24.04 19.0.0 2024.2 Dalmatian 22.04 / 24.04
4.4 初始化配置目录
mkdir -p /etc/kolla
chown $(id -u):$(id -g) /etc/kolla
cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/* /etc/kolla/
4.5 生成密码
kolla-genpwd
密码文件
/etc/kolla/passwords.yml务必备份。
4.6 自定义管理员密码(可选)
sed -i 's/^keystone_admin_password:.*/keystone_admin_password: Admin@2026/' /etc/kolla/passwords.yml
五、配置 Inventory
编辑 /etc/kolla/multinode:
# ============================================================
# 控制平面
# ============================================================
[control]
node1
node2
node3
[network]
node1
node2
node3
[compute]
node1
node2
node3
[monitoring]
node1
# ============================================================
# 存储(使用外部 Ceph,kolla 不管理 Ceph 服务)
# ============================================================
[storage]
# ============================================================
# 数据库与消息队列
# ============================================================
[mariadb:children]
control
[rabbitmq:children]
control
# ============================================================
# OpenStack 核心服务
# ============================================================
[keystone:children]
control
[glance:children]
control
[nova-api:children]
control
[nova-conductor:children]
control
[nova-super-conductor:children]
control
[nova-scheduler:children]
control
[nova-novncproxy:children]
control
[nova-compute:children]
compute
[neutron:children]
network
[cinder-api:children]
control
[cinder-scheduler:children]
control
[cinder-backup:children]
storage
[cinder-volume:children]
storage
[heat:children]
control
[placement:children]
control
[horizon:children]
control
# ============================================================
# 负载均衡与高可用
# ============================================================
[haproxy:children]
network
# ============================================================
# 监控
# ============================================================
[prometheus:children]
monitoring
[grafana:children]
monitoring
六、配置 globals.yml
编辑 /etc/kolla/globals.yml:
---
################################################################
# 基础配置
################################################################
kolla_base_distro: "ubuntu"
kolla_install_type: "source"
openstack_release: "2024.1"
kolla_pull_policy: "missing"
################################################################
# 网络配置
################################################################
# 管理网络接口(根据实际网卡名修改,使用 ip addr 查看)
network_interface: "eth0"
# 外部网络接口(Neutron br-ex 绑定,需独立网卡或 VLAN 子接口)
neutron_external_interface: "eth1"
# 隧道网络接口(VXLAN,可与管理网络共用)
tunnel_interface: "eth0"
# VIP 地址(管理网中未被占用的 IP)
kolla_internal_vip_address: "10.0.0.10"
# Keepalived VRID(同一二层域内不能冲突)
keepalived_virtual_router_id: "60"
################################################################
# 启用的服务
################################################################
# 核心服务
enable_haproxy: "yes"
enable_keystone: "yes"
enable_glance: "yes"
enable_nova: "yes"
enable_neutron: "yes"
enable_cinder: "yes"
enable_heat: "yes"
enable_horizon: "yes"
enable_placement: "yes"
# 监控
enable_prometheus: "yes"
enable_grafana: "yes"
# 禁用 kolla 自带 Ceph(使用外部 cephadm 集群)
enable_ceph: "no"
enable_ceph_external: "yes"
################################################################
# Neutron 配置
################################################################
neutron_plugin_type: "ml2"
neutron_ml2_mechanism_drivers: "openvswitch,l2population"
neutron_ml2_type_drivers: "flat,vlan,vxlan"
neutron_ml2_tenant_network_types: "vxlan"
neutron_ml2_extension_drivers: "port_security"
# 外部网络映射(对应 neutron_external_interface)
neutron_bridge_name: "br-ex"
neutron_physical_bridge_mappings: "physnet1:br-ex"
################################################################
# Nova 配置
################################################################
nova_compute_virt_type: "kvm"
nova_backend_ceph: "yes"
################################################################
# Cinder 配置
################################################################
cinder_enabled_backends:
- name: "ceph"
enabled: true
################################################################
# Glance 配置
################################################################
glance_backend_file: "no"
glance_backend_ceph: "yes"
################################################################
# 外部 Ceph 配置
################################################################
# FSID(从 ceph -s 获取)
ceph_cluster_fsid: "替换为你的FSID"
# Monitor 地址
ceph_external_mon_host: "10.0.0.11,10.0.0.12,10.0.0.13"
# 存储池
ceph_cinder_pool_name: "volumes"
ceph_cinder_backup_pool_name: "backups"
ceph_glance_pool_name: "images"
ceph_nova_pool_name: "vms"
# Ceph 用户
ceph_cinder_user: "client.cinder"
ceph_cinder_backup_user: "client.cinder-backup"
ceph_glance_user: "client.glance"
ceph_nova_user: "client.nova"
# Ceph 配置路径
ceph_config_dir: "/etc/ceph"
################################################################
# 通用调优
################################################################
openstack_logging_debug: "INFO"
openstack_service_workers: "2"
mariadb_max_connections: "1000"
七、写入 Ceph 密钥到 passwords.yml
source /opt/kolla-venv/bin/activate
# 获取各用户密钥
CINDER_KEY=$(ceph auth get-key client.cinder)
CINDER_BACKUP_KEY=$(ceph auth get-key client.cinder-backup)
GLANCE_KEY=$(ceph auth get-key client.glance)
NOVA_KEY=$(ceph auth get-key client.nova)
# 写入 passwords.yml
sed -i "s/^ceph_cinder_key:.*/ceph_cinder_key: ${CINDER_KEY}/" /etc/kolla/passwords.yml
sed -i "s/^ceph_cinder_backup_key:.*/ceph_cinder_backup_key: ${CINDER_BACKUP_KEY}/" /etc/kolla/passwords.yml
sed -i "s/^ceph_glance_key:.*/ceph_glance_key: ${GLANCE_KEY}/" /etc/kolla/passwords.yml
sed -i "s/^ceph_nova_key:.*/ceph_nova_key: ${NOVA_KEY}/" /etc/kolla/passwords.yml
八、部署 OpenStack
以下操作在 部署节点(node1) 的 kolla-venv 中执行。
8.1 Bootstrap 服务器
kolla-ansible -i /etc/kolla/multinode bootstrap-servers
首次执行,会自动安装 Docker、配置系统参数、创建用户和目录。耗时约 5-10 分钟。
8.2 预检查
kolla-ansible -i /etc/kolla/multinode prechecks
如有报错,按提示修复后重新执行。常见问题:网卡名不匹配、VIP 冲突、磁盘空间不足。
8.3 拉取镜像
kolla-ansible -i /etc/kolla/multinode pull
首次拉取约 30-60 分钟,取决于网络速度。镜像总量约 10-15GB。
国内镜像加速(如拉取缓慢):
# 方法1: 配置 Docker 镜像加速
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io"
],
"storage-driver": "overlay2"
}
EOF
systemctl restart docker
# 方法2: 在 globals.yml 中指定镜像仓库
# docker_registry: "你的私有仓库地址"
# docker_namespace: "kolla"
8.4 部署
kolla-ansible -i /etc/kolla/multinode deploy
部署约 20-40 分钟。
8.5 生成 OpenRC 文件
kolla-ansible -i /etc/kolla/multinode post-deploy
生成
/etc/kolla/admin-openrc.sh。
8.6 安装 OpenStack CLI
pip install python-openstackclient python-cinderclient python-glanceclient python-neutronclient python-novaclient
九、部署后验证
9.1 检查服务状态
source /etc/kolla/admin-openrc.sh
openstack service list
openstack endpoint list
openstack compute service list
openstack network agent list
openstack volume service list
期望所有服务状态为 UP 或 enabled。
9.2 检查容器状态
# 在各节点执行
docker ps --format "table {
{.Names}}\t{
{.Status}}" | sort
9.3 检查 Ceph 对接
# 在 Cinder 容器中测试
docker exec cinder_volume rbd --id cinder -p volumes ls
# 在 Glance 容器中测试
docker exec glance_api rbd --id glance -p images ls
十、OpenStack 基础配置
10.1 创建项目和用户
source /etc/kolla/admin-openrc.sh
# 创建项目
openstack project create --description "Demo Project" demo
# 创建用户
openstack user create --password demo@2026 --email demo@example.com demo
# 分配角色
openstack role add --project demo --user demo member
10.2 创建外部网络
# Flat 外部网络(对接物理网络)
openstack network create \
--provider-network-type flat \
--provider-physical-network physnet1 \
--external \
--share \
ext-net
openstack subnet create \
--network ext-net \
--subnet-range 192.168.1.0/24 \
--gateway 192.168.1.1 \
--allocation-pool start=192.168.1.100,end=192.168.1.200 \
--dns-nameserver 8.8.8.8 \
ext-subnet
10.3 创建租户网络
openstack network create --project demo tenant-net
openstack subnet create \
--network tenant-net \
--subnet-range 10.10.0.0/24 \
--gateway 10.10.0.1 \
--dns-nameserver 8.8.8.8 \
--project demo \
tenant-subnet
10.4 创建路由器
openstack router create --project demo router1
openstack router set router1 --external-gateway ext-net
openstack router add subnet router1 tenant-subnet
10.5 上传镜像
# 下载 Cirros 测试镜像
wget http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
# 上传(自动存储到 Ceph images 池)
openstack image create cirros \
--file cirros-0.6.2-x86_64-disk.img \
--disk-format qcow2 \
--container-format bare \
--public
# 验证 Ceph 中存在
rbd ls -p images
10.6 创建 Flavor
openstack flavor create --vcpus 1 --ram 512 --disk 10 --public m1.tiny
openstack flavor create --vcpus 2 --ram 2048 --disk 20 --public m1.small
openstack flavor create --vcpus 4 --ram 4096 --disk 40 --public m1.medium
openstack flavor create --vcpus 8 --ram 8192 --disk 80 --public m1.large
10.7 配置安全组
# 默认安全组放行 SSH 和 ICMP
openstack security group rule create default --protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0
openstack security group rule create default --protocol icmp --remote-ip 0.0.0.0/0
10.8 创建测试虚拟机
openstack server create test-vm \
--image cirros \
--flavor m1.tiny \
--network tenant-net \
--security-group default
# 分配 Floating IP
FLOATING_IP=$(openstack floating ip create ext-net -f value -c floating_ip_address)
openstack server add floating ip test-vm ${FLOATING_IP}
# 验证连通性
openstack server list
ping -c 3 ${FLOATING_IP}
ssh cirros@${FLOATING_IP}
10.9 测试 Cinder 卷
# 创建卷
openstack volume create --size 10 test-vol
# 验证 Ceph 中存在
rbd ls -p volumes
# 挂载到虚拟机
openstack server add volume test-vm test-vol
十一、日常运维
11.1 常用运维命令
# 查看所有容器状态
kolla-ansible -i /etc/kolla/multinode status
# 重启单个服务
docker restart nova_compute
docker restart cinder_volume
# 查看服务日志
docker logs --tail 200 -f nova_compute
docker logs --tail 200 -f cinder_volume
docker logs --tail 200 -f neutron_openvswitch_agent
# 修改配置后重新部署指定服务
kolla-ansible -i /etc/kolla/multinode reconfigure --tags nova
kolla-ansible -i /etc/kolla/multinode reconfigure --tags cinder
11.2 扩容 Compute 节点
# 1. 新节点完成系统初始化(第二章)
# 2. 在 multinode inventory 的 [compute] 组添加新节点
# 3. 执行
kolla-ansible -i /etc/kolla/multinode bootstrap-servers --limit new-node
kolla-ansible -i /etc/kolla/multinode deploy --limit new-node
11.3 升级 OpenStack 版本
# 1. 修改 globals.yml 中的 openstack_release
# 2. 拉取新镜像
kolla-ansible -i /etc/kolla/multinode pull
# 3. 执行升级
kolla-ansible -i /etc/kolla/multinode upgrade
11.4 备份与恢复
# 备份 MariaDB
kolla-ansible -i /etc/kolla/multinode backup --tags mariadb
# 恢复 MariaDB
kolla-ansible -i /etc/kolla/multinode restore --tags mariadb
# 手动备份配置
tar czf kolla-config-$(date +%Y%m%d).tar.gz /etc/kolla/ /etc/ceph/
11.5 Ceph 运维
# 集群状态
ceph -s
ceph health detail
# 存储池使用情况
ceph df
rbd df -p images
rbd df -p volumes
# OSD 状态
ceph osd tree
ceph osd df
# 扩容 OSD(添加新磁盘)
ceph orch daemon add osd node1:/dev/sdc
# Ceph Dashboard
# 访问 https://node1:8443/
十二、常见问题排查
12.1 部署预检查失败 - 网卡名不匹配
现象:prechecks 报 network_interface not found
解决:
# 查看实际网卡名
ip addr show
# 修改 globals.yml 中的网卡名
# Ubuntu 24.04 可能使用 ens33、enp0s3 等命名
# 也可使用 systemd 预测命名或 udev 规则统一网卡名
12.2 镜像拉取超时
现象:pull 阶段大量 timeout 错误
解决:
# 配置 Docker 镜像加速
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io"
]
}
EOF
systemctl restart docker
kolla-ansible -i /etc/kolla/multinode pull
12.3 Neutron 虚拟机无法获取 IP
排查步骤:
# 1. 检查 Neutron 代理
openstack network agent list
# 2. 检查 OVS 网桥
ovs-vsctl show
ovs-vsctl list-ports br-ex
ovs-vsctl list-ports br-int
# 3. 检查 DHCP 命名空间
ip netns list
ip netns exec qdhcp-<id> ping 10.10.0.1
# 4. 查看日志
docker logs neutron_openvswitch_agent --tail 200
docker logs neutron_dhcp_agent --tail 200
12.4 Ceph 对接 Cinder 失败
排查步骤:
# 1. 检查 Ceph 集群健康
ceph -s
# 2. 检查 Cinder 容器内 Ceph 配置
docker exec cinder_volume cat /etc/ceph/ceph.conf
docker exec cinder_volume cat /etc/ceph/ceph.client.cinder.keyring
# 3. 手动测试连接
docker exec cinder_volume rbd --id cinder -p volumes ls
# 4. 检查密码是否正确
grep ceph_cinder_key /etc/kolla/passwords.yml
ceph auth get-key client.cinder
12.5 Nova 虚拟机启动失败
排查步骤:
# 1. 查看错误详情
openstack server show test-vm -f yaml
# 2. 查看 Nova 日志
docker logs nova_compute --tail 200
docker logs nova_scheduler --tail 200
# 3. 检查 libvirt
docker exec nova_libvirt virsh list --all
docker exec nova_libvirt virsh capabilities
# 4. 虚拟机环境中需使用 qemu 而非 kvm
# 在 globals.yml 中设置:
# nova_compute_virt_type: "qemu"
12.6 VIP 不可达
排查步骤:
# 1. 检查 Keepalived
docker logs keepalived --tail 50
# 2. 检查 VIP 是否绑定
ip addr show | grep 10.0.0.10
# 3. 检查 HAProxy
docker logs haproxy --tail 50
# 4. 确认 VRID 不冲突
grep virtual_router_id /etc/kolla/globals.yml
十三、生产环境建议
13.1 架构分离
| 角色 | 节点数 | 建议 |
|---|---|---|
| Controller | 3+ | 奇数节点,保证数据库 Quorum |
| Compute | 按需 | 独立于 Controller |
| Ceph Mon/Mgr | 3 | 奇数节点 |
| Ceph OSD | 3+ | 每节点至少 1 块专用 SSD/HDD |
13.2 安全加固
- 启用 TLS:
kolla_enable_tls_external: "yes" - 使用 Fernet Token:
keystone_token_provider: "fernet" - 配置防火墙,仅开放必要端口
- 定期轮转密码和 Ceph 密钥
- 禁用不必要的服务
13.3 监控告警
- Prometheus + Grafana(kolla-ansible 内置)
- Ceph Dashboard(cephadm 已部署)
- 配置 AlertManager 规则
- 对接企业通知渠道
13.4 备份策略
- 每日备份 MariaDB(
kolla-ansible backup) - 备份
/etc/kolla配置目录 - 备份
/etc/ceph配置和密钥 - Ceph RBD 定期快照
- 使用 Ceph 镜像功能做异地灾备
附录 A:端口清单
| 服务 | 端口 | 说明 |
|---|---|---|
| Keystone Public | 5000 | 认证 API |
| Keystone Admin | 5001 | 管理 API |
| Glance API | 9292 | 镜像服务 |
| Nova API | 8774 | 计算 API |
| Nova Metadata | 8775 | 元数据 |
| Cinder API | 8776 | 块存储 API |
| Neutron API | 9696 | 网络 API |
| Heat API | 8004 | 编排 API |
| Placement API | 8780 | 资源追踪 |
| Horizon | 80/443 | Web 控制台 |
| Nova VNC | 6080 | VNC 控制台 |
| RabbitMQ | 5672 | 消息队列 |
| MariaDB | 3306 | 数据库 |
| HAProxy Stats | 1984 | 负载均衡状态 |
| Ceph Mon | 6789/3300 | Ceph 监控 |
| Ceph Dashboard | 8443 | Ceph 管理 |
| Prometheus | 9091 | 监控 |
| Grafana | 3000 | 可视化 |
附录 B:globals.yml 完整参考
官方文档:https://docs.openstack.org/kolla-ansible/latest/reference/globals.html
附录 C:Ceph PG 计算公式
PG 数 = (OSD 数 × 100) / 副本数 / 池数量
本方案:3 OSD × 100 / 3 副本 / 4 池 ≈ 25 → 取 32(2 的幂次)
生产环境建议每 OSD 100-200 PG,根据实际容量调整。