OpenStack作为当前最主流的开源云计算平台,在企业私有云和混合云建设中扮演着核心角色。这次我们在Ubuntu 22.04 LTS上完成了一次完整的OpenStack部署,重点解决了多租户隔离和弹性伸缩这两个生产环境中的关键需求。整个过程涉及KVM虚拟化、Neutron网络、Cinder存储等核心组件的深度调优,最终实现了一个可承载实际业务负载的云平台。
提示:Ubuntu 22.04 LTS作为长期支持版本,其稳定的内核和软件包对OpenStack的兼容性极佳,是我们选择它作为基础操作系统的主要原因。
生产级OpenStack部署对硬件有明确要求:
我们在测试环境中使用了3台Dell R740xd服务器:
安装Ubuntu 22.04后需进行内核调优:
bash复制# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 调整文件描述符限制
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
# 优化网络参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_tw_reuse=1
net.ipv4.ip_local_port_range=1024 65000
net.core.somaxconn=1024
EOF
sysctl -p
Canonical官方提供的MicroStack是当前最便捷的部署方式:
bash复制sudo snap install microstack --beta --devmode
microstack init --auto --control
但生产环境建议采用手动部署以获得更好控制:
bash复制sudo apt install mysql-server galera-4 rsync
配置/etc/mysql/mysql.conf.d/mysqld.cnf:
ini复制[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
bash复制sudo apt install rabbitmq-server
sudo rabbitmqctl add_user openstack RABBIT_PASS
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
bash复制sudo apt install keystone apache2 libapache2-mod-wsgi
生成Fernet密钥:
bash复制keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
我们采用VXLAN+OVS方案实现多租户隔离:
bash复制sudo apt install neutron-server neutron-plugin-ml2 \
neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
配置/etc/neutron/plugins/ml2/ml2_conf.ini:
ini复制[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
注意:生产环境建议为每个租户分配独立的VLAN ID范围,通过配置ml2_conf.ini中的network_vlan_ranges参数实现。
采用Ceph RBD作为后端存储:
bash复制sudo apt install cinder-api cinder-scheduler
配置/etc/cinder/cinder.conf:
ini复制[DEFAULT]
enabled_backends = ceph
glance_api_servers = http://controller:9292
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
创建管理员租户:
bash复制openstack project create --domain default \
--description "Admin Project" admin
openstack user create --domain default \
--password-prompt admin
openstack role create admin
openstack role add --project admin --user admin admin
创建业务租户并配置配额:
bash复制openstack quota set --instances 20 --cores 80 \
--ram 256000 --gigabytes 1000 project1
默认安全组规则过于宽松,建议修改:
bash复制openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp \
--dst-port 22 default
openstack security group rule create --proto tcp \
--dst-port 80 default
openstack security group rule create --proto tcp \
--dst-port 443 default
创建基础弹性伸缩模板(hot_template.yaml):
yaml复制heat_template_version: 2018-08-31
description: Auto Scaling Group with Load Balancer
resources:
lb:
type: OS::Neutron::LoadBalancer
properties:
protocol_port: 80
protocol: HTTP
method: ROUND_ROBIN
asg:
type: OS::Heat::AutoScalingGroup
properties:
min_size: 2
max_size: 10
resource:
type: OS::Nova::Server
properties:
flavor: m1.small
image: ubuntu-22.04
networks: [{network: private}]
使用Ceilometer收集指标:
bash复制sudo apt install ceilometer-agent-compute
配置/etc/ceilometer/ceilometer.conf:
ini复制[alarm]
evaluation_interval = 60
[api]
host = 0.0.0.0
port = 8777
[compute]
instance_discovery_method = libvirt
创建CPU告警规则:
bash复制openstack alarm create \
--name cpu_high \
--type gnocchi_aggregation_by_resources_threshold \
--description "Instance CPU usage is high" \
--enabled True \
--alarm-action "log://" \
--ok-action "log://" \
--comparison-operator gt \
--evaluation-periods 1 \
--threshold 70.0 \
--aggregation-method mean \
--granularity 300 \
--metric cpu_util \
--resource-type instance
调整/etc/nova/nova.conf提升性能:
ini复制[libvirt]
cpu_mode = host-passthrough
virt_type = kvm
disk_cachemodes = "file=writeback"
inject_password = false
inject_key = false
inject_partition = -2
[DEFAULT]
ram_allocation_ratio = 1.5
cpu_allocation_ratio = 16.0
reserved_host_memory_mb = 4096
bash复制# 检查NTP同步
chronyc sources -v
# 优化libvirt日志级别
sed -i 's/1/0/' /etc/libvirt/libvirtd.conf
systemctl restart libvirtd
bash复制# 启用巨帧
ip link set dev eth0 mtu 9000
# 调整OVS流表超时
ovs-vsctl set Open_vSwitch . other_config:max-idle=30000
bash复制# 检查Ceph集群状态
ceph -s
# 重置Cinder卷状态
cinder reset-state --state available <volume_id>
关键数据备份方案:
备份脚本示例:
bash复制#!/bin/bash
# MySQL备份
mysqldump -u root -p$PASS --all-databases | gzip > /backup/mysql_$(date +%F).sql.gz
# 配置文件备份
cd /etc/
tar czf /backup/configs_$(date +%F).tar.gz nova neutron cinder keystone
OpenStack版本升级路线:
关键提示:升级前务必测试API兼容性,建议使用Tempest测试套件验证核心功能。