在 Ubuntu 22.04 LTS 上部署 OpenStack 前,需要全面评估硬件配置和网络架构。我的生产环境实测表明,控制节点至少需要 16 核 CPU、64GB 内存和 500GB SSD 存储,计算节点则根据虚拟机密度配置,每台物理机建议保留 20% 的资源余量。网络方面推荐采用 VLAN 隔离的千兆以上网络,重要流量建议使用万兆网卡分离。
重要提示:Ubuntu 22.04 默认使用较新的 Linux 内核和 systemd 组件,这与早期 OpenStack 版本存在兼容性问题,建议选择 2023 年后发布的 OpenStack 版本(如 Yoga 或 Antelope)
先执行系统更新并安装必要工具包:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-dev python3-pip git curl
修改系统时区并启用 NTP 同步:
bash复制sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y chrony
sudo systemctl enable --now chronyd
内核参数优化(适用于 KVM 虚拟化场景):
bash复制echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.neigh.default.gc_thresh1=1024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
根据使用场景选择存储后端:
我参与的某金融机构项目中,采用 Ceph 三副本存储方案时,实测 IOPS 性能比单节点 LVM 提升 3-5 倍,但需要至少 3 个 OSD 节点(每个节点 4TB SSD+万兆网卡)。
使用 MariaDB Galera 集群替代单点 MySQL:
bash复制sudo apt install -y mariadb-server galera-4
配置 /etc/mysql/mariadb.conf.d/99-openstack.cnf:
ini复制[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
wsrep_cluster_address="gcomm://node1,node2,node3"
wsrep_provider=/usr/lib/galera/libgalera_smm.so
消息队列建议使用 RabbitMQ 集群:
bash复制sudo apt install -y rabbitmq-server
sudo rabbitmqctl add_user openstack RABBIT_PASS
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安装 Keystone 时特别注意:
bash复制sudo apt install -y keystone apache2 libapache2-mod-wsgi-py3
配置 /etc/keystone/keystone.conf 关键参数:
ini复制[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
provider = fernet
expiration = 86400
初始化 Fernet 密钥库:
bash复制sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
计算节点需要特别注意 CPU 虚拟化支持:
bash复制egrep -c '(vmx|svm)' /proc/cpuinfo # 返回值应大于0
sudo apt install -y nova-compute qemu-kvm libvirt-daemon-system
配置 /etc/nova/nova.conf 关键参数:
ini复制[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://<controller-ip>:6080/vnc_auto.html
[libvirt]
virt_type = kvm
cpu_mode = host-passthrough
推荐采用 VXLAN 叠加网络:
ini复制[neutron]
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
创建租户示范:
bash复制openstack project create --description "开发环境" dev_team
openstack user create --project dev_team --password dev123 dev_user
openstack role add --project dev_team --user dev_user _member_
设置租户资源配额示例:
bash复制openstack quota set --instances 20 --cores 40 --ram 131072 --volumes 30 dev_team
网络配额控制:
bash复制neutron quota-update --port 500 --network 30 --router 10 --tenant-id <project_id>
创建基础 heat 模板 hot-template.yml:
yaml复制heat_template_version: 2016-04-08
resources:
scaling_group:
type: OS::Heat::AutoScalingGroup
properties:
min_size: 2
max_size: 10
resource:
type: OS::Nova::Server
properties:
flavor: m1.small
image: cirros
networks: [{network: private}]
配置 Ceilometer 告警策略:
bash复制openstack alarm create \
--name cpu_high \
--type gnocchi_aggregation_by_resources_threshold \
--metric cpu_util \
--threshold 70.0 \
--aggregation-method mean \
--granularity 300 \
--evaluation-periods 2 \
--alarm-action 'trust://scaling_up' \
--ok-action 'trust://scaling_down'
修改 /etc/nova/nova.conf 调度策略:
ini复制[filter_scheduler]
enabled_filters = RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
weight_classes = nova.scheduler.weights.all_weighers
虚拟机启动超时问题排查:
virsh list --allqemu-img info /var/lib/nova/instances/<uuid>/disk网络不通典型排查步骤:
bash复制neutron agent-list # 检查所有agent状态
ovs-vsctl show # 验证Open vSwitch配置
ip netns list # 检查网络命名空间
启用 TLS 加密通信:
bash复制sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d keystone.example.com
配置防火墙规则示例:
bash复制sudo ufw allow 5000/tcp # Keystone
sudo ufw allow 8774/tcp # Nova
sudo ufw allow 9696/tcp # Neutron
数据库每日备份脚本示例:
bash复制mysqldump -u root -p --all-databases | gzip > /backup/openstack_db_$(date +%F).sql.gz
关键配置文件备份:
bash复制sudo tar czvf /backup/openstack_conf_$(date +%F).tar.gz /etc/{nova,neutron,keystone,cinder}
推荐使用 Prometheus + Grafana 监控栈:
bash复制sudo apt install -y prometheus-node-exporter
配置 /etc/prometheus/prometheus.yml 抓取目标:
yaml复制scrape_configs:
- job_name: 'openstack'
static_configs:
- targets: ['controller:9100', 'compute1:9100']
使用 Filebeat 发送日志到 ELK:
bash复制sudo apt install -y filebeat
配置 /etc/filebeat/filebeat.yml:
yaml复制filebeat.inputs:
- type: log
paths:
- /var/log/nova/*.log
- /var/log/neutron/*.log
output.elasticsearch:
hosts: ["elk-server:9200"]