OpenStack 私有云部署与运维全流程实战

张开发
2026/4/15 8:38:15 15 分钟阅读

分享文章

OpenStack 私有云部署与运维全流程实战
OpenStack 私有云部署与运维全流程实战--------从环境搭建到 Python API 自动化创建云主机随着企业数字化转型深入私有云凭借数据安全、资源可控、定制化强的优势成为企业 IT 基础设施核心方案。OpenStack 作为开源私有云主流框架覆盖计算、网络、存储、认证等全生命周期管理是搭建私有云的首选工具。本文结合课程学习与实操完整记录OpenStack 私有云部署、运维管理、Python API 自动化创建云主机全流程包含环境准备、服务部署、运维实操、API 开发及问题排查为私有云搭建与运维提供可落地的实践参考。一、OpenStack 私有云核心认知1. 私有云核心特征私有云为单一企业 / 组织专属部署资源独占使用兼具公有云弹性与传统机房安全可控性适配金融、政务、制造等对数据安全要求严苛的场景。2. OpenStack 核心组件OpenStack 采用模块化架构核心组件覆盖私有云全流程管理核心组件及作用如下组件 核心服务 核心作用计算服务 Nova 云主机实例的创建、调度、启停、生命周期管理网络服务 Neutron 虚拟网络、子网、浮动 IP、安全组、负载均衡管理镜像服务 Glance 云主机镜像的上传、存储、分发、版本管理认证服务 Keystone 用户 / 项目身份认证、权限管理、服务目录统一调度块存储 Cinder 云主机块存储卷的创建、挂载、扩容、备份仪表盘 Horizon 图形化管理界面可视化操作云资源、监控状态二、OpenStack 私有云部署全流程实操版本次实操基于CentOS 7.9系统采用控制节点 计算节点架构部署单区域 OpenStackTrain 版本。环境准备1网络规划表格网络类型 网段 用途管理网 192.168.10.0/24 节点间服务通信、API 调用数据网 10.0.0.0/24 云主机内网通信、业务数据传输外网 20.0.0.0/24 浮动 IP 分配、云主机外网访问2基础环境配置所有节点关闭防火墙、SELinux、NetworkManager开启时间同步chrony配置主机名与 hosts 解析如controller、compute1确保节点间 ping 通配置国内 YUM 源CentOSOpenStack Train 源加速软件安装。2. 核心服务部署步骤1部署 Keystone 认证服务安装 Keystone 服务并初始化数据库创建 admin 项目、admin 用户、管理员角色生成admin-openrc.sh认证文件验证认证服务source /etc/keystone/admin-openrc.sh openstack token issue获取 Token 即部署成功。2部署 Glance 镜像服务安装 Glance 服务配置认证与存储路径本地文件存储或 Swift上传测试镜像Cirros 轻量镜像、CentOS7 镜像验证镜像服务openstack image list查看镜像正常列出。3部署 Nova 计算服务控制节点安装 Nova API、Nova 调度、Nova Conductor 服务配置 Keystone 认证、Glance 镜像地址计算节点安装 Nova Compute 服务配置 QEMU/KVM 虚拟化支持验证计算服务openstack compute service list所有服务状态为up即正常。4部署 Neutron 网络服务控制节点安装 Neutron Server、Neutron DHCP / 路由代理配置 Keystone 认证计算节点安装 Neutron Linux Bridge 代理实现虚拟网络转发配置网络资源创建内部网络int-net、子网10.0.0.0/24、外部网络public开启 DHCP验证网络服务openstack network list网络 / 子网正常创建。5部署 Horizon 仪表盘安装 Horizon 服务配置认证后端与服务地址浏览器访问http://controller/dashboard用 admin 账号登录可视化管理云资源。3. 服务整体验证执行以下命令确认所有核心服务正常运行# 验证服务列表openstack service list# 验证计算节点openstack hypervisor list# 验证网络代理openstack network agent list无报错且服务状态正常说明私有云部署完成。三、私有云运维核心实操1. 云主机生命周期管理1手动创建云主机命令行方式openstack server create \--flavor test \ # 云主机规格vCPU/内存/磁盘--image centos7 \ # 镜像名称--nic net-id内部网络ID \ # 内网网络ID--key-name my_key \ # 密钥对可选test-vm仪表盘方式登录 Horizon→计算→云主机→创建云主机按指引配置即可。2运维操作支持云主机启动、停止、重启、快照创建、规格变更、删除通过命令行或仪表盘一键操作。2. 网络与存储运维网络运维配置安全组规则开放 22/80 端口、管理浮动 IP、实现云主机外网互通存储运维创建块存储卷、挂载到云主机、扩容卷、备份数据。3. 故障排查核心技巧查看云主机状态openstack server show 云主机ID通过fault字段定位错误查看服务日志Nova 计算日志tail -f /var/log/nova/nova-compute.logNeutron 网络日志tail -f /var/log/neutron/neutron-server.logKeystone 认证日志tail -f /var/log/keystone/keystone.log资源排查检查计算节点 CPU / 内存 / 磁盘是否不足网络是否互通。四、Python 调用 OpenStack API 自动化创建云主机核心实操1. 实操需求在 controller 节点/root目录创建create_vm.py脚本检测同名云主机存在则先删除自动化创建指定名称云主机分配并绑定浮动 IP输出创建结果浮动 IP、成功提示。2. 环境准备安装依赖pip3 install openstacksdk加载认证环境source /etc/keystone/admin-openrc.sh。3. 完整 Python 代码实现# -*- coding: utf-8 -*-import openstackimport timefrom openstack.exceptions import ResourceNotFound# -------------------------- 环境配置根据实际环境修改 --------------------------AUTH_URL http://controller:5000/v3PROJECT_NAME adminUSER_NAME adminPASSWORD 你的admin密码 # 替换为实际密码DOMAIN_NAME DefaultVM_NAME ljx # 替换为个人名字缩写IMAGE_NAME centos7 # 镜像名FLAVOR_NAME test # 规格名NETWORK_NAME int-net # 内网网络名FLOAT_IP_POOL public # 浮动IP池名# -------------------------- 1. 连接OpenStack并获取Token --------------------------def connect_openstack():print(开始获取Token...)conn openstack.connect(authdict(auth_urlAUTH_URL,project_namePROJECT_NAME,usernameUSER_NAME,passwordPASSWORD,user_domain_nameDOMAIN_NAME,project_domain_nameDOMAIN_NAME),compute_api_version2)if conn.authorize():print(✅ Token获取成功)return connelse:raise Exception(❌ Token获取失败请检查认证信息)# -------------------------- 2. 检测并删除同名云主机 --------------------------def delete_existing_vm(conn, vm_name):print(f\n 步骤1检测同名云主机 {vm_name} )try:vm conn.compute.find_server(vm_name, ignore_missingFalse)print(f发现同名云主机ID{vm.id}正在删除...)conn.compute.delete_server(vm.id)conn.compute.wait_for_server_delete(vm.id)print(f✅ 同名云主机 {vm_name} 删除成功)except ResourceNotFound:print(✅ 无同名云主机跳过删除)# -------------------------- 3. 获取镜像/规格/网络ID --------------------------def get_resource_ids(conn):print(f\n 步骤2获取资源ID )# 获取镜像IDimage conn.compute.find_image(IMAGE_NAME)print(f查询镜像 {IMAGE_NAME} ID...)print(f✅ 镜像ID{image.id})# 获取规格IDflavor conn.compute.find_flavor(FLAVOR_NAME)print(f查询规格 {FLAVOR_NAME} ID...)print(f✅ 规格ID{flavor.id})# 获取网络IDnetwork conn.network.find_network(NETWORK_NAME)print(f查询网络 {NETWORK_NAME} ID...)print(f✅ 网络ID{network.id})return image.id, flavor.id, network.id# -------------------------- 4. 创建云主机 --------------------------def create_vm(conn, vm_name, image_id, flavor_id, network_id):print(f\n 步骤3创建云主机 {vm_name} )# 创建云主机vm conn.compute.create_server(namevm_name,image_idimage_id,flavor_idflavor_id,networks[{uuid: network_id}],auto_ipFalse # 不自动分配公网IP手动绑定浮动IP)print(f✅ 云主机创建请求提交成功ID{vm.id})print(等待云主机启动...)# 循环等待状态变为ACTIVE超时则报错max_wait 120 # 最大等待120秒wait_interval 5waited 0while waited max_wait:vm conn.compute.get_server(vm.id)print(f当前状态{vm.status}等待{wait_interval}秒...)if vm.status ACTIVE:print(f✅ 云主机{vm_name}启动成功)return vmelif vm.status ERROR:# 获取错误详情fault conn.compute.get_server_fault(vm.id)raise Exception(f❌ 云主机创建失败错误原因{fault[message]})time.sleep(wait_interval)waited wait_intervalraise Exception(f❌ 云主机启动超时等待{max_wait}秒)# -------------------------- 5. 分配并绑定浮动IP --------------------------def bind_floating_ip(conn, vm):print(f\n 步骤4分配并绑定浮动IP )# 获取浮动IP池pool conn.network.find_network(FLOAT_IP_POOL)# 创建浮动IPfloating_ip conn.network.create_ip(floating_network_idpool.id)print(f✅ 获取到浮动IP{floating_ip.floating_ip_address})# 绑定浮动IP到云主机conn.compute.add_floating_ip_to_server(vm, floating_ip.floating_ip_address)print(f✅ 浮动IP {floating_ip.floating_ip_address} 绑定成功)return floating_ip# -------------------------- 主函数 --------------------------if __name__ __main__:try:# 1. 连接OpenStackconn connect_openstack()# 2. 删除同名云主机delete_existing_vm(conn, VM_NAME)# 3. 获取资源IDimage_id, flavor_id, network_id get_resource_ids(conn)# 4. 创建云主机vm create_vm(conn, VM_NAME, image_id, flavor_id, network_id)# 5. 绑定浮动IPfloating_ip bind_floating_ip(conn, vm)# 6. 输出最终结果print(\n *60)print(f 云主机创建成功)print(f云主机名称{VM_NAME})print(f云主机ID{vm.id})print(f绑定的浮动IP{floating_ip.floating_ip_address})print(*60)except Exception as e:print(f\n❌ 脚本执行失败{str(e)})4. 代码执行与验证1执行脚本bash运行# 赋予执行权限chmod x /root/create_vm.py# 运行脚本python3 /root/create_vm.py2预期输出结果plaintext开始获取Token...✅ Token获取成功 步骤1检测同名云主机 ljx ✅ 无同名云主机跳过删除 步骤2获取资源ID 查询镜像 centos7 ID...✅ 镜像ID8e05d4ee-8a5a-41b5-b40d-284148529899查询规格 test ID...✅ 规格ID47e23199-bafb-447a-9936-b043d6e04146查询网络 int-net ID...✅ 网络ID24be010d-da17-4a71-8a29-fd2cd4f1d694 步骤3创建云主机 ljx ✅ 云主机创建请求提交成功ID2d4a2691-4fc5-441f-a485-b78d49981c14等待云主机启动...当前状态BUILD等待5秒...当前状态ACTIVE等待5秒...✅ 云主机ljx启动成功 步骤4分配并绑定浮动IP ✅ 获取到浮动IP20.0.0.104✅ 浮动IP 20.0.0.104 绑定成功 云主机创建成功云主机名称ljx云主机ID2d4a2691-4fc5-441f-a485-b78d49981c14绑定的浮动IP20.0.0.1043结果验证外网 SSH 连接ssh root20.0.0.104登录后执行ip address验证内网 IP10.0.0.x查看云平台登录 Horizon→计算→云主机确认云主机状态为 “运行中”、绑定浮动 IP。五、常见问题与解决方案

更多文章