使用 Ansible 自动化部署 OpenStack 私有云平台

使用 Ansible 自动化部署 OpenStack 私有云平台

📦 Ansible 简介

Ansible 是一个开源的自动化运维工具,通过简单的 YAML 脚本实现对大规模服务器集群的配置管理和应用部署。

Ansible 核心组成

  • Inventory: 清单,定义被管理的服务器组
  • Modules: 模块,执行具体任务(如 yum, copy, service
  • Playbook: 任务剧本,YAML 格式的任务定义文件
  • Tasks: Playbook 中的具体操作步骤
  • Roles: 任务和变量的结构化组织方式,便于复用

🚀 部署前准备

1. SSH 免密登录配置

确保 Ansible 控制节点可以免密登录所有被管理节点。

2. 基础环境配置

  • 修改主机名
  • 关闭 SELinux
  • 设置防火墙规则(如需要)

3. 配置 YUM 源

创建 Ansible 和 CentOS YUM 源配置文件:

vi /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=http://192.168.77.200:30000/2022skills/iaas/ansible/
gpgcheck=0
enabled=1

[centos]
name=centos
baseurl=http://192.168.77.200:30000/CentOS-7-x86_64-DVD-2009/
gpgcheck=0
enabled=1

4. 安装 Ansible

yum install ansible -y

📁 项目目录结构

创建主项目目录

mkdir /opt/openstack_ansible

创建角色目录结构

将 OpenStack 部署拆分为多个独立角色:

mkdir -p /opt/openstack_ansible/roles/{
  init,                    # 基础环境
  mariadb,                 # 数据库
  keystone,                # 认证服务
  glance,                  # 镜像服务
  placement,               # 资源放置
  nova-controller,         # 计算控制节点
  nova-compute,            # 计算节点
  neutron-controller,      # 网络控制节点
  neutron-compute,         # 网络计算节点
  dashboard,               # 界面服务
  cinder-controller,       # 块存储控制节点
  cinder-compute,          # 块存储计算节点
  swift-controller,        # 对象存储控制节点
  swift-compute,           # 对象存储计算节点
  heat                     # 编排服务
}/{tasks,files,templates,meta,handlers,vars}

创建变量目录

cd /opt/openstack_ansible
mkdir group_vars
cd group_vars/
touch all

创建入口文件

touch install_openstack.yaml

📝 编写 Playbook 剧本

1. init 角色 - 基础环境配置

文件位置: /opt/openstack_ansible/roles/init/tasks/main.yaml

- name: move repos
  shell: mv /etc/yum.repos.d/* /media

- name: create local.repo
  copy: src=local.repo dest=/etc/yum.repos.d/

- name: install openstack-iaas
  yum: name=openstack-iaas state=present

- name: openrc.sh
  template: src=openrc.sh.j2 dest=/etc/openstack/openrc.sh

- name: install pre-host
  shell: iaas-pre-host.sh

相关文件配置

local.repo 文件 (/opt/openstack_ansible/roles/init/files/local.repo):

[iaas]
name=iaas
baseurl=http://192.168.77.200:30000/2022skills/iaas/iaas-repo/
gpgcheck=0
enabled=1

[centos]
name=centos
baseurl=http://192.168.77.200:30000/CentOS-7-x86_64-DVD-2009/
gpgcheck=0
enabled=1

openrc.sh.j2 模板 (/opt/openstack_ansible/roles/init/templates/openrc.sh.j2):

#--------------------system Config--------------------##
HOST_IP={{controller_ip}}
HOST_PASS={{PASSWD}}
HOST_NAME={{controller_name}}
HOST_IP_NODE={{compute_ip}}
HOST_PASS_NODE={{PASSWD}}
HOST_NAME_NODE={{compute_name}}

#--------------------Chrony Config-------------------##
network_segment_IP={{network_segment_IP}}/24

#--------------------Rabbit Config ------------------##
RABBIT_USER=openstack
RABBIT_PASS={{PASSWD}}

#--------------------MySQL Config---------------------##
DB_PASS={{PASSWD}}

#--------------------Keystone Config------------------##
DOMAIN_NAME=demo
ADMIN_PASS={{PASSWD}}
DEMO_PASS={{PASSWD}}
KEYSTONE_DBPASS={{PASSWD}}

#--------------------Glance Config--------------------##
GLANCE_DBPASS={{PASSWD}}
GLANCE_PASS={{PASSWD}}

#--------------------Placement Config----------------------##
PLACEMENT_DBPASS={{PASSWD}}
PLACEMENT_PASS={{PASSWD}}

#--------------------Nova Config----------------------##
NOVA_DBPASS={{PASSWD}}
NOVA_PASS={{PASSWD}}

#--------------------Neutron Config-------------------##
NEUTRON_DBPASS={{PASSWD}}
NEUTRON_PASS={{PASSWD}}
METADATA_SECRET={{PASSWD}}
INTERFACE_NAME={{External_Network}}
Physical_NAME={{Physical_NAME}}
minvlan=1
maxvlan=1000

#--------------------Cinder Config--------------------##
CINDER_DBPASS={{PASSWD}}
CINDER_PASS={{PASSWD}}
BLOCK_DISK={{cinder_disk}}

#--------------------Swift Config---------------------##
SWIFT_PASS={{PASSWD}}
OBJECT_DISK={{swift_disk}}
STORAGE_LOCAL_NET_IP={{STORAGE_LOCAL_NET_IP}}

# ... (其他服务配置类似,根据实际需要添加)

2. 全局变量配置

文件位置: /opt/openstack_ansible/group_vars/all

controller_ip: 172.128.11.21
controller_name: controller
compute_ip: 172.128.11.20
compute_name: compute
PASSWD: 'Abc@1234'
cinder_disk: vdb1
swift_disk: vdb2
manila_disk: vdb3
network_segment_IP: 172.128.11.0
External_Network: eth1
Physical_NAME: provider
STORAGE_LOCAL_NET_IP: 172.128.11.20

3. 其他角色配置

每个角色对应一个 OpenStack 组件安装脚本,例如:

MariaDB 角色 (/opt/openstack_ansible/roles/mariadb/tasks/main.yaml):

- name: 安装mariadb
  shell: iaas-install-mysql.sh

其他角色(keystone、glance、nova等)配置方式类似,只需调用对应的安装脚本即可。


🔧 主机清单配置

1. 配置 Ansible Hosts

vi /etc/ansible/hosts

添加以下内容:

[controller]
172.128.11.21

[compute]
172.128.11.20

2. 配置系统 Hosts

vi /etc/hosts

添加以下内容:

172.128.11.21 controller
172.128.11.20 compute

🎯 Playbook 入口文件

文件位置: /opt/openstack_ansible/install_openstack.yaml

---
- hosts: controller
  remote_user: root
  roles:
    - init
    - mariadb
    - keystone
    - glance
    - placement
    - nova-controller
    - neutron-controller
    - dashboard
    - cinder-controller
    - swift-controller
    - heat

- hosts: compute
  remote_user: root
  roles:
    - init
    - nova-compute
    - neutron-compute
    - cinder-compute
    - swift-compute

🚦 执行部署

1. 语法检查

cd /opt/openstack_ansible
ansible-playbook install_openstack.yaml --syntax-check

2. 执行部署

ansible-playbook install_openstack.yaml

🔄 在其他环境部署

要在新的环境部署,只需:

  1. 修改全局变量 (/opt/openstack_ansible/group_vars/all)
  2. 配置新的节点免密登录
  3. 更新主机清单
    • /etc/ansible/hosts
    • /etc/hosts
  4. 执行部署命令

posted @ 2025-12-27 20:57  zhou12z  阅读(0)  评论(0)    收藏  举报