在云计算技术学习与项目实践中,搭建私有云平台是核心技能之一。本文结合实验全流程,从私有云基础环境部署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 代码运行说明

  1. 前置准备

    • 提前在 OpenStack 中上传镜像、创建网络、密钥对和安全组;
    • 替换代码中AUTH_CONFIG的密码为实际管理员密码;
    • 确保运行脚本的服务器能访问 OpenStack API 地址(5000 端口)。
  2. 运行命令

python3 create_cloud_server.py

更多推荐