Ansible部署Openstack平台

Ansible部署Openstack平台目录

      • Ansible部署Openstack平台
        • 案例准备
          • 1.规划节点
          • 2.基础准备
        • 案例实施
          • 1.环境准备
            • (1)配置IP并连接
            • (2)Ansible安装FTP和Ansible服务
            • (3)配置无密钥登录
          • 2.目录结构
            • (1)项目目录
            • (2)创建角色
            • (3)创建group_vars目录
            • (4)init角色
            • (5)其他角色
            • (6)编写剧本入口文件
          • 3.执行PlayBook
            • (1)修改host文件
            • (3)执行剧本

Ansible部署Openstack平台

案例准备

1.规划节点
IP 主机名 节点
192.168.100.30 ansible Ansible节点
192.168.100.20 compute Controller节点
192.168.100.10 controller Compute节点
2.基础准备

创建三台云主机进行实验,云主机镜像实验CentOS_7.9镜像

案例实施

1.环境准备

该案例使用Ansible工具部署一个单控制单计算的Openstack平台

(1)配置IP并连接

连接三台云主机,并修改主机名分别为ansible,controller,compute。修改完成后使用bash命令,以生效新主机名

[root@localhost ~]# hostnamectl set-hostname compute
[root@localhost ~]# hostnamectl set-hostname controller
[root@localhost ~]# hostnamectl set-hostname ansible

需使用fdisk 命令在 compute节点进行分区,三个大小为5G分区

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

...

[root@compute ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0 10.1G  0 part /home
├─sda3   8:3    0  7.9G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   81G  0 part /
sdb      8:16   0   20G  0 disk 
├─sdb1   8:17   0    5G  0 part 
├─sdb2   8:18   0    5G  0 part 
└─sdb3   8:19   0    5G  0 part 
sr0     11:0    1  4.4G  0 rom 
(2)Ansible安装FTP和Ansible服务

上传镜像和软件包,配置本地镜像源,安装Ansible服务,安装openstack-iaas

把Ansible节点的防火墙和SELinux关闭

[root@ansible ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@ansible ~]# ls
anaconda-ks.cfg  ansible_zabbix.zip  CentOS-7-x86_64-DVD-2009.iso  chinaskills_cloud_iaas_v2.0.3.iso
[root@ansible ~]# mkdir /opt/{centos,iaas}
[root@ansible ~]# mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/
mount: /dev/loop0 写保护,将以只读方式挂载
[root@ansible ~]# cp -r /mnt/* /opt/centos/
[root@ansible ~]# umount /mnt/
[root@ansible ~]# mount -o loop chinaskills_cloud_iaas_v2.0.3.iso /mnt/
mount: /dev/loop0 写保护,将以只读方式挂载
[root@ansible ~]# cp -r /mnt/* /opt/iaas/
[root@ansible ~]# umount /mnt/
[root@ansible ~]# unzip ansible_zabbix.zip
...
[root@ansible ~]# mv ansible /opt/
[root@ansible ~]# mv /etc/yum.repos.d/* /media/
[root@ansible ~]# vi /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=file:///opt/ansible
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1
[root@ansible ~]# vi /etc/sysconfig/selinux 
...
SELINUX=disabled
...
[root@ansible ~]# setenforce 0
[root@ansible ~]# yum install -y vsftpd
[root@ansible ~]# echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf 
[root@ansible ~]# systemctl restart vsftpd
[root@ansible ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@ansible ~]# yum install -y ansible
(3)配置无密钥登录

配置Ansible节点无密钥登录Controller和Compute节点,配置完无密钥登录后,使用Ansible节点SSH连接测试(若云主机已是无密钥访问,则不用配置无密钥)

[root@ansible ~]# ssh-keygen
[root@ansible ~]# ssh-copy-id 192.168.100.20
[root@ansible ~]# ssh-copy-id 192.168.100.10
[root@ansible ~]# ssh 192.168.100.10
Last login: Sun Feb 12 18:13:46 2023 from gateway
[root@controller ~]# exit
登出
Connection to 192.168.100.10 closed.
[root@ansible ~]# 
2.目录结构
(1)项目目录

首先在/opt目录下创建一个项目目录Openstack_ansible

[root@ansible ~]# mkdir /opt/openstack_ansible
[root@ansible ~]# ls /opt/
ansible  centos  iaas  openstack_ansible
(2)创建角色

在创建roles角色目录之前,考虑将Openstack云平台的安装步骤拆为多个roles执行,这样的话,Playbook易于编写和读懂

安装私有云平台,使用init(基础环境)、mysql(数据库)、keystone(认证服务)、glance(镜像服务)、placement,nova-controller(计算服务)、nova-compute(计算服务)、neutron-controller(网络服务)、neutron-compute(网络服务)、dashboard(界面服务)、cinder-controller(块存储服务)、cinder-compute(块存储服务)、swift-controller(对象存储服务)、swift-compute(对象存储服务)这些roles来完成。

创建roles相应的项目目录

[root@ansible openstack_ansible]# mkdir -p roles/{init,mysql,keystone,glance,nova-controller,nova-compute,neutron-controller,neutron-compute,dashboard,cinder-controller,cinder-compute,swift-controller,swift-compute}/{tasks,files,templates,meta,handlers,vars}

在每个角色目录下面都有一样的目录,这些目录中task目录一般是一定会用到的,其他的目录看情况来使用

(3)创建group_vars目录

在项目目录/opt/openstack_ansible下创建group_vars目录,并在该目录下创建all文件,该目录用来存放变量

[root@ansible openstack_ansible]# mkdir group_vars
[root@ansible openstack_ansible]# ls
group_vars  roles
[root@ansible openstack_ansible]# vi group_vars/all
controller_ip: 192.168.100.10
compute_ip: 192.168.100.20
controller_name: controller
compute_name: compute
PASSWD: Abc@1234
cinder_disk: sdb1
swift_disk: sdb2
manila_disk: sdb3
network_segment_ip: 192.168.100.0/24
external_network: ens34
physical_name: provider
storage_local_net_ip: 192.168.100.20
(4)init角色

该角色的任务是用来部署Controller和compute的基础环境,包括配置yum源,安装openstack-iaas脚本,安装iaas-pre-host脚本

在该init角色剧本中,创建local.repo文件到 init/files目录下,创建openrc.sh.j2 文件至init/templates 目录下。

[root@ansible openstack_ansible]# vi roles/init/files/local.repo 
[centos]
name=centos
baseurl=ftp://192.168.100.30/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=ftp://192.168.100.30/iaas/iaas-repo
gpgcheck=0
enabled=1
[root@ansible openstack_ansible]# cp -r /etc/openstack/openrc.sh  /opt/openstack_ansible/roles/init/templates/openrc.sh.j2
[root@ansible openstack_ansible]# vi roles/init/templates/openrc.sh.j2  
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}}
network_segment_IP={{network_segment_ip}}
RABBIT_USER=openstack
RABBIT_PASS={{PASSWD}}
DB_PASS={{PASSWD}}
DOMAIN_NAME=demo
ADMIN_PASS={{PASSWD}}
DEMO_PASS={{PASSWD}}
KEYSTONE_DBPASS={{PASSWD}}
GLANCE_DBPASS={{PASSWD}}
GLANCE_PASS={{PASSWD}}
PLACEMENT_DBPASS={{PASSWD}}
PLACEMENT_PASS={{PASSWD}}
NOVA_DBPASS={{PASSWD}}
NOVA_PASS={{PASSWD}}
NEUTRON_DBPASS={{PASSWD}}
NEUTRON_PASS={{PASSWD}}
METADATA_SECRET={{PASSWD}}
INTERFACE_NAME={{external_name}}
Physical_NAME={{physical_name}}
minvlan=2
maxvlan=1000
CINDER_DBPASS={{PASSWD}}
CINDER_PASS={{PASSWD}}
BLOCK_DISK={{cinder_disk}}
SWIFT_PASS={{PASSWD}}
OBJECT_DISK={{swift_disk}}
STORAGE_LOCAL_NET_IP={{storage_local_net_ip}}
TROVE_DBPASS={{PASSWD}}
TROVE_PASS={{PASSWD}}
HEAT_DBPASS={{PASSWD}}
HEAT_PASS={{PASSWD}}
CEILOMETER_DBPASS={{PASSWD}}
CEILOMETER_PASS={{PASSWD}}
AODH_DBPASS={{PASSWD}}
AODH_PASS={{PASSWD}}
ZUN_DBPASS={{PASSWD}}
ZUN_PASS={{PASSWD}}
KURYR_PASS={{PASSWD}}
OCTAVIA_DBPASS={{PASSWD}}
OCTAVIA_PASS={{PASSWD}}
MANILA_DBPASS={{PASSWD}}
MANILA_PASS={{PASSWD}}
SHARE_DISK={{manila_disk}}
CLOUDKITTY_DBPASS={{PASSWD}}
CLOUDKITTY_PASS={{PASSWD}}
BARBICAN_DBPASS={{PASSWD}}
BARBICAN_PASS={{PASSWD}}
# 这里进行了预处理

在roles/init/tasks目录下创建main.yaml文件

[root@ansible openstack_ansible]# vi roles/init/tasks/main.yaml 
- name: move repo
  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

该脚本使用了copy和template模块,copy模块使用的文件及软件包及镜像包,放入tasks同级目录下的files目录下,template模块使用的jinja2文件,放入tasks同级目录templates目录下。

(5)其他角色

其他角色的作用是执行安装Openstack

[root@ansible openstack_ansible]# vi roles/mysql/tasks/main.yaml
- name: install mysql
  shell: iaas-install-mysql.sh
[root@ansible openstack_ansible]# vi roles/keystone/tasks/main.yaml
- name: install mysql
  shell: iaas-install-keystone.sh
 ...
 ...
 把所有对应服务的角色都写上相应的安装脚本(注意nova这里是placement和nova-controller两个)
(6)编写剧本入口文件

install_openstack.yaml文件为执行剧本的入口文件,需要将调用roles的顺序及哪些主机调用哪些roles在这个文件夹中体现出来,install_openstack.yaml文件具体内容如下

[root@ansible openstack_ansible]# vi install_openstack.yaml 
---


- hosts: controller
  remote_user: root

  roles:
   - init
   - mysql
   - keystone
   - glance
   - nova-controller
   - neutron-controller
   - dashboard
   - cinder-controller
   - swift-controller


- hosts: compute
  remote_user: root

  roles:
   - init
   - nova-compute
   - neutron-compute
   - cinder-compute
   - swift-compute

3.执行PlayBook

在执行之前需要修改一些文件

(1)修改host文件
[root@ansible openstack_ansible]# vi /etc/ansible/hosts 
# 在文件里添加下面的内容
[controller]
192.168.100.10
[compute]
192.168.100.20
[root@ansible openstack_ansible]# vi /etc/hosts
192.168.100.10 controller
192.168.100.20 compute
(3)执行剧本

准备工作做完之后,使用ansible-playbook命令执行剧本

使用–syntax-check参数检测脚本的语法

[root@ansible openstack_ansible]# ansible-playbook install_openstack.yaml --syntax-check

playbook: install_openstack.yaml

直接返回文件名,表示脚本没有语法错误。执行剧本

[root@ansible openstack_ansible]# ansible-playbook install_openstack.yaml
PLAY [controller] **********************************************************************************************************************************************************
ok: [192.168.100.10]
.....
....

在等待一段时间之后,剧本执行完毕,若没有报错,访问Openstack界面

Ansible部署Openstack平台_第1张图片

你可能感兴趣的:(openstack,ansible,openstack,linux)