1. OpenStack 在 Ubuntu 22.04 LTS 上的部署价值与场景定位
OpenStack 作为开源云计算平台的标杆,其核心价值在于提供与 AWS、Azure 等商业云对等的 IaaS 能力。在 Ubuntu 22.04 LTS 这个长期支持版本上部署,意味着可以获得 5 年的安全更新和维护保障——这对企业生产环境至关重要。我亲历过从 CentOS 迁移到 Ubuntu 的 OpenStack 集群,最直观的感受是 apt 包管理的清晰性比 yum/dnf 更适合复杂组件依赖管理。
多租户虚拟化不是简单的虚拟机隔离,而是涉及:
- 租户间网络隔离(通过 VXLAN/GRE 实现 overlay 网络)
- 计算资源配额限制(nova 的 flavor 机制)
- 存储卷隔离(Cinder 的 multi-backend 支持)
- 身份权限体系(Keystone 的 domain/project/user 三级模型)
弹性伸缩则依赖 Ceilometer 监控数据触发 Heat 编排服务,典型的自动扩展场景包括:
- CPU 负载超过 70% 持续 5 分钟时扩容 1 个计算节点
- 网络流入流量低于 30% 持续 1 小时时收缩实例
- 定时扩展(如电商大促前预先扩容)
关键提示:生产环境务必选择 OpenStack Yoga 或更新的稳定版本,早期版本如 Queens 在 Ubuntu 22.04 上存在 libvirt 兼容性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与依赖项调优
2.1 系统级优化配置
在干净的 Ubuntu 22.04 LTS 最小化安装后,需要执行以下硬化操作:
bash复制# 禁用不必要的服务
sudo systemctl mask --now apparmor.service
sudo apt purge -y snapd cloud-init
# 内核参数调优
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 文件系统优化(假设使用 XFS)
sudo apt install -y xfsprogs
sudo mkfs.xfs -f /dev/sdb
echo "/dev/sdb /var/lib/nova xfs defaults,noatime,nodiratime 0 0" | sudo tee -a /etc/fstab
2.2 网络拓扑设计建议
多租户网络建议采用如下架构:
code复制物理网络 → Open vSwitch → VXLAN隧道 → 租户网络
↑
(绑定多个物理网卡)
配置示例:
bash复制# 安装 OVS
sudo apt install -y openvswitch-switch
sudo ovs-vsctl add-br br-ex
sudo ovs-vsctl add-port br-ex enp6s0f0
sudo ovs-vsctl add-port br-ex enp6s0f1
# 设置链路聚合
sudo ovs-vsctl set port br-ex bond_mode=balance-tcp
3. 使用 Kolla-Ansible 部署 OpenStack Yoga
3.1 容器化部署的优势
相比传统的 devstack 或手动安装,Kolla-Ansible 提供:
- 组件隔离:每个服务运行在独立容器中
- 版本一致性:所有组件版本经过严格测试
- 原子升级:支持滚动更新单个服务
安装步骤:
bash复制# 安装依赖
sudo apt install -y python3-dev libffi-dev gcc libssl-dev python3-pip
sudo pip3 install -U pip ansible
# 部署 Kolla
git clone https://opendev.org/openstack/kolla-ansible
cd kolla-ansible
pip3 install -r requirements.txt
sudo cp -r etc/kolla /etc/
sudo cp ansible/inventory/* /etc/kolla/
3.2 关键配置文件调整
/etc/kolla/globals.yml 需要修改的核心参数:
yaml复制kolla_base_distro: "ubuntu"
kolla_install_type: "source"
openstack_release: "yoga"
network_interface: "enp5s0"
neutron_external_interface: "enp6s0"
enable_cinder: "yes"
cinder_volume_group: "cinder-volumes"
避坑指南:如果遇到 "Could not find cinder-volumes volume group" 错误,需要先创建物理卷:
bash复制sudo pvcreate /dev/sdc sudo vgcreate cinder-volumes /dev/sdc
4. 多租户网络实战配置
4.1 创建租户网络与路由
通过 CLI 创建隔离网络的完整流程:
bash复制# 创建项目
openstack project create --description "Test Tenant" tenant_a
openstack user create --project tenant_a --password pass123 user_a
# 创建网络
openstack network create --project tenant_a private_a
openstack subnet create --network private_a \
--subnet-range 192.168.100.0/24 \
--dns-nameserver 8.8.8.8 subnet_a
# 配置路由器
openstack router create --project tenant_a router_a
openstack router set router_a --external-gateway public
openstack router add subnet router_a subnet_a
4.2 安全组策略最佳实践
建议的默认安全规则:
bash复制openstack security group create --project tenant_a default
openstack security group rule create --protocol icmp default
openstack security group rule create --protocol tcp \
--dst-port 22 default
openstack security group rule create --protocol tcp \
--dst-port 80:443 default
5. 实现弹性伸缩的完整方案
5.1 监控数据采集配置
修改 /etc/kolla/ceilometer/ceilometer.conf:
ini复制[event]
definitions_cfg_file = /etc/ceilometer/event_definitions.yaml
[notification]
store_events = true
启动数据采集:
bash复制kolla-ansible deploy --tags ceilometer
openstack alarm create \
--name cpu_high \
--type gnocchi_aggregation_by_resources_threshold \
--metric cpu_util \
--threshold 70.0 \
--comparison-operator gt \
--aggregation-method mean \
--granularity 300 \
--evaluation-periods 1 \
--alarm-action 'webhook:http://heat-api:8000/v1/tenant-id/stacks/stack-id/resources/scale-up'
5.2 Heat 模板示例
创建 autoscaling.yaml:
yaml复制heat_template_version: 2015-04-30
resources:
scaled_group:
type: OS::Heat::AutoScalingGroup
properties:
min_size: 1
max_size: 5
resource:
type: OS::Nova::Server
properties:
flavor: m1.small
image: cirros
networks: [{network: private_a}]
部署模板:
bash复制openstack stack create -t autoscaling.yaml test_stack
6. 性能调优与问题排查
6.1 Nova 计算节点优化
关键参数调整 (/etc/kolla/nova-compute/nova.conf):
ini复制[libvirt]
cpu_mode = host-passthrough
virt_type = kvm
disk_cachemodes = "network=writeback"
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
验证 KVM 加速:
bash复制sudo egrep -c '(vmx|svm)' /proc/cpuinfo # 应返回大于0
lsmod | grep kvm # 确认模块加载
6.2 常见故障处理
问题1:虚拟机启动卡在 "Scheduling" 状态
- 检查 nova-scheduler 日志:
docker logs nova_scheduler - 常见原因:资源不足或过滤器冲突
- 解决方案:调整
scheduler_default_filters参数
问题2:浮动 IP 无法访问
- 诊断步骤:
bash复制openstack port list --floating-ip <fip> neutron port-show <port-id> ip netns exec qrouter-<uuid> ping <vm_ip> - 通常需要检查安全组和路由表
我在实际部署中发现,Ubuntu 22.04 的默认防火墙规则会阻断 VXLAN 流量,需要额外放行:
bash复制sudo ufw allow 4789/udp
sudo ufw allow 8472/udp # 用于 GRE 协议
