基于 OpenStack 的私有云搭建全流程实践
在云计算技术学习与项目实践中,搭建私有云平台是核心技能之一。本文结合实验全流程,从私有云基础环境部署到OpenStack 核心组件配置,再到Python API 自动化运维,完整拆解私有云搭建与管理的关键步骤,附可直接复用的代码与配置示例。
一、实验环境总览
本次实验基于 CentOS 系统构建私有云架构,核心分为控制节点(Controller)和计算节点(Compute),整体架构包含三大核心模块:
| 模块 | 核心任务 | 关键操作 |
| 私有云部署 | 环境初始化、YUM 源配置、镜像挂载 | 配置 hosts、关闭防火墙 / SELinux、搭建 FTP 服务 |
| OpenStack 核心 | 组件安装、服务编排 | 部署 Keystone/Glance/Nova 等组件 |
| 私有云运维 | API 调用、云主机管理 | Python 脚本调用 OpenStack API 创建云主机 |
二、私有云基础环境部署(核心步骤)
2.1 基础配置(Controller/Compute 节点通用)
2.1.1 配置本地 IP 与域名映射
# 编辑hosts文件,替换为实际IP
echo '192.168.1.10 controller' >> /etc/hosts
echo '192.168.1.11 compute' >> /etc/hosts
2.1.2 关闭防火墙与 SELinux
# 关闭防火墙并禁用开机自启
systemctl stop firewalld && systemctl disable firewalld
# 永久关闭SELinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 # 临时生效
2.1.3 配置私有云 YUM 源(Controller 节点)
# 清理原有YUM源
rm -rf /etc/yum.repos.d/*
# 创建OpenStack专属YUM源
cat > /etc/yum.repos.d/private-cloud.repo << EOF
[centos]
name=CentOS-Private-Cloud
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=IaaS-Private-Cloud
baseurl=file:///opt/iaas
gpgcheck=0
enabled=1
EOF
# 清理缓存并生成新缓存
yum clean all && yum makecache
2.2 镜像挂载与 FTP 服务配置
2.2.1 挂载镜像文件
# 挂载CentOS镜像
mount -o loop CentOS-7-x86_64-DVD.iso /mnt
mkdir -p /opt/centos
cp -rvf /mnt/* /opt/centos/
umount /mnt
# 挂载IaaS镜像
mount -o loop XianDian-IaaS-v2.0.iso /mnt
mkdir -p /opt/iaas
cp -rvf /mnt/* /opt/iaas/
umount /mnt
2.2.2 搭建 FTP 服务
# 安装VSFTPD
yum install -y vsftpd
# 配置FTP根目录
echo "anon_root=/opt/" >> /etc/vsftpd/vsftpd.conf
# 启动并启用FTP服务
systemctl start vsftpd && systemctl enable vsftpd


2.3 Compute 节点配置 YUM 源
# 清理原有YUM源
rm -rf /etc/yum.repos.d/*
# 指向Controller节点的FTP源
cat > /etc/yum.repos.d/private-cloud.repo << EOF
[centos]
name=CentOS-Private-Cloud
baseurl=ftp://192.168.1.10/centos
gpgcheck=0
enabled=1
[iaas]
name=IaaS-Private-Cloud
baseurl=ftp://192.168.1.10/iaas
gpgcheck=0
enabled=1
EOF
# 清理缓存并验证
yum clean all && yum list

2.4 安装核心依赖包
# Controller节点安装
yum install -y iaas-xiandian openstack-keystone openstack-glance
# Compute节点安装
yum install -y iaas-xiandian openstack-nova-compute
三、配置环境变量
3.1配置
[root@controller ~]# yum install iaas-xiandian -y
[root@compute ~]# yum install iaas-xiandian -y
//去除行头的#号
[root@controller ~]# sed -i 's/^#//g' /etc/xiandian/openrc.sh
[root@controller ~]# vim /etc/xiandian/openrc.sh
//设置密码为000000
:%s/PASS=/PASS=000000/g
复制配置文件到compute节点
[root@controller ~]# scp /etc/xiandian/openrc.sh compute:/etc/xiandian/openrc.sh
修改compute上配置文件的节点ip
[root@compute ~]# vim /etc/xiandian/openrc.sh
INTERFACE_IP=192.168.137.242 //改成compute的NAT网卡地址,其他不变



3.2划分compute节点磁盘
[root@compute ~]# lsblk

[root@compute ~]# fdisk /dev/sdb
[root@compute ~]# fdisk /dev/sdc

[root@compute ~]# lsblk

3.3iaas安装脚本执行顺序:
[root@controller ~]# iaas-pre-host.sh
[root@compute ~]# iaas-pre-host.sh
[root@controller ~]# iaas-install-mysql.sh
[root@controller ~]# iaas-install-keystone.sh
[root@controller ~]# iaas-install-glance.sh
[root@controller ~]# iaas-install-nova-controller.sh
[root@compute ~]# iaas-install-nova-compute.sh
[root@controller ~]# iaas-install-neutron-controller.sh
[root@compute ~]# iaas-install-neutron-compute.sh
[root@controller ~]# iaas-install-dashboard.sh
//此处修改nova.conf的配置文件
//若在虚拟机则要执行,在服务器则省略
[root@compute ~]# crudini --set /etc/nova/nova.conf libvirt virt_type qemu
[root@compute ~]# systemctl restart openstack-nova-compute
[root@controller ~]# crudini --set /etc/nova/nova.conf libvirt virt_type qemu
[root@controller ~]# systemctl restart openstack-nova*
[root@controller ~]# iaas-install-cinder-controller.sh
[root@compute ~]# iaas-install-cinder-compute.sh
[root@controller ~]# iaas-install-swift-controller.sh
[root@compute ~]# iaas-install-swift-compute.sh
四、创建网络
4.1删除规则:
项目–网络–安全组–管理规则----删除所有规则

4.2添加规则:

4.3创建网络1(外部网络):
管理员–网络–网络–创建网络



4.4创建路由:
项目–网络–路由

4.5创建网络2(内部网络vlan/vxlan):
注:在虚拟机中网络模式默认是vxlan,服务器上可改用vlan
因为服务器连接了交换机,会设置接口模式为trunk,放行vlan,虚拟机中无法进行此项操作
在服务器中创建vlan网络需修改配置文件:
[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vlan
[root@controller ~]# systemctl restart neutron*

4.6创建网络(内部网络)
项目–网络–创建网络


4.7将两个网络关联起来:
项目–网络–路由–router–接口–增加接口


五、Python API 自动化创建云主机
私有云运维的核心是自动化管理,以下通过OpenStack Python SDK实现云主机的一键创建,替代手动操作提升效率。
5.1 环境准备
# 安装OpenStack Python SDK
pip install openstacksdk
5.2 核心代码(create_cloud_server.py)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
OpenStack 私有云API创建云主机脚本
功能:自动化创建云主机、查询状态、异常处理
"""
import openstack
from openstack.exceptions import SDKException
def create_cloud_server(auth_config: dict, server_config: dict) -> None:
"""
创建云主机核心函数
:param auth_config: 认证信息字典
:param server_config: 云主机配置字典
"""
try:
# 1. 初始化OpenStack连接
conn = openstack.connect(
auth_url=auth_config['auth_url'],
project_name=auth_config['project_name'],
username=auth_config['username'],
password=auth_config['password'],
user_domain_name=auth_config['user_domain_name'],
project_domain_name=auth_config['project_domain_name']
)
# 2. 校验连接有效性
if not conn.has_project_access():
raise PermissionError("OpenStack认证失败,无项目访问权限")
# 3. 获取镜像与网络(根据实际环境替换名称/ID)
image = conn.compute.find_image(server_config['image_name'])
network = conn.network.find_network(server_config['network_name'])
flavor = conn.compute.find_flavor(server_config['flavor_name'])
if not all([image, network, flavor]):
raise FileNotFoundError("镜像/网络/规格不存在,请检查配置")
# 4. 创建云主机
print(f"开始创建云主机:{server_config['server_name']}")
server = conn.compute.create_server(
name=server_config['server_name'],
image_id=image.id,
flavor_id=flavor.id,
networks=[{"uuid": network.id}],
key_name=server_config['key_name'], # 密钥对名称,需提前创建
security_groups=[server_config['security_group']] # 安全组名称
)
# 5. 等待云主机创建完成(状态变为ACTIVE)
print("云主机创建中,等待状态就绪...")
conn.compute.wait_for_server(server, wait=300, interval=10)
# 6. 输出创建结果
server_detail = conn.compute.get_server(server.id)
print(f"✅ 云主机创建成功!")
print(f"📌 云主机ID:{server_detail.id}")
print(f"📌 云主机IP:{server_detail.access_ipv4}")
print(f"📌 云主机状态:{server_detail.status}")
except SDKException as e:
print(f"❌ OpenStack API调用失败:{str(e)}")
# 记录错误日志
with open("cloud_error.log", "a", encoding="utf-8") as f:
f.write(f"[{server_config['server_name']}] 错误:{str(e)}\n")
except Exception as e:
print(f"❌ 未知错误:{str(e)}")
if __name__ == "__main__":
# 🔧 替换为实际配置信息
AUTH_CONFIG = {
"auth_url": "http://192.168.1.10:5000/v3", # Controller节点认证地址
"project_name": "admin",
"username": "admin",
"password": "ADMIN_PASS_123", # 替换为实际管理员密码
"user_domain_name": "Default",
"project_domain_name": "Default"
}
SERVER_CONFIG = {
"server_name": "private-cloud-vm-01", # 云主机名称
"image_name": "CentOS-7-x86_64", # 镜像名称(需提前上传至Glance)
"network_name": "provider-net", # 网络名称(需提前创建)
"flavor_name": "m1.small", # 规格名称(m1.small/m1.medium等)
"key_name": "cloud-key", # 密钥对名称(提前通过OpenStack创建)
"security_group": "default" # 安全组名称
}
# 执行创建
create_cloud_server(AUTH_CONFIG, SERVER_CONFIG)
5.3 代码运行说明
-
前置准备:
- 提前在 OpenStack 中上传镜像、创建网络、密钥对和安全组;
- 替换代码中
AUTH_CONFIG的密码为实际管理员密码; - 确保运行脚本的服务器能访问 OpenStack API 地址(5000 端口)。
-
运行命令:
python3 create_cloud_server.py
更多推荐




所有评论(0)