OpenStack基础平台部署案例

案例一、OpenStack基础平台部署

案例准备

1.规划节点

节点规划见表1-1。

表1-1 节点规划

IP

主机名

节点

192.168.10.100

Controller

控制节点

192.168.10.200

Compute

计算节点

案例实施

1.环境配置

(1)配置主机名

使用CRT软件连接controller节点和compute节点,用户名默认为root,密码默认为000000。连接上之后,使用linux命令修改节点主机名。

[root@controller ~]# hostnamectl set-hostname controller

[root@controller ~]# hostname
controller

[root@compute ~]# hostnamectl set-hostname compute

[root@compute ~]# hostname
compute

修改完成后,使用CRT软件断开重新连接controller节点和compute节点,生效新主机名。

(2)配置域名解析

使用vi命令在controller节点与compute节点的/etc/hosts文件添加如下内容,添加完成后输入:wq保存文件内容退出。

[root@controller ~]# vi /etc/hosts
192.168.10.100 controller
192.168.10.200 compute

[root@compute ~]# vi /etc/hosts
192.168.10.100 controller
192.168.10.200 compute

(3)配置yum环境

将OpenStack云平台部署的iso文件通过SecureCRT上传到controller节点的/root目录下。在/opt目录生成centos7-2009和iaas-train目录,将安装镜像文件内容复制到centos7-2009和iaas目录中。

[root@controller ~]# mkdir /opt/{centos7-2009,iaas}

[root@controller ~]# mount /root/CentOS-7-x86_64-DVD-2009.iso /mnt/

mount: /dev/loop0 is write-protected, mounting read-only

[root@controller ~]# cp -r /mnt/* /opt/centos7-2009/

[root@controller ~]# umount /mnt/

[root@controller ~]# mount /root/chinaskills_cloud_iaas_v2.0.iso /mnt/  

mount: /dev/loop0 is write-protected, mounting read-only

[root@controller ~]# cp -r /mnt/* /opt/iaas/

[root@controller ~]# umount /mnt/

配置controller节点yum安装源文件yum.repo,指向本地文件目录路径。

[root@controller ~]# mv /etc/yum.repos.d/* /media/

[root@controller ~]# vi  /etc/yum.repos.d/yum.repo
[centos]
name=centos7-2009
baseurl=file:///opt/centos7-2009
gpgcheck=0
enabled=1
[openstack]
name=openstack-train
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1

[root@controller ~]# yum clean all && yum repolist
…
repo id            repo name                        status
centos            centos7-2009                      4,070
openstack         openstack-train                     953
repolist: 5,023

在controller节点使用yum安装vsftpd服务,并将/opt目录下的文件共享出去。

[root@controller ~]# yum install -y vsftpd
…
Installed:
  vsftpd.x86_64 0:3.0.2-28.el7                                                               
Complete!

[root@controller ~]# echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf 

[root@controller ~]# systemctl start vsftpd

[root@controller ~]# systemctl enable vsftpd

配置compute节点yum安装源文件yum.repo,指向controller节点的共享文件目录路径。

[root@compute ~]# mv /etc/yum.repos.d/* /media/

[root@compute ~]# vi  /etc/yum.repos.d/yum.repo
[centos]	
name=centos7-2009
baseurl=ftp://controller/centos7-2009
gpgcheck=0
enabled=1
[openstack]
name=openstack-train
baseurl=ftp://controller/iaas/iaas-repo
gpgcheck=0
enabled=1

[root@compute ~]# yum clean all && yum repolist
…
repo id            repo name                        status
centos            centos7-2009                      4,070
openstack         openstack-train                     953
repolist: 5,023

(4)划分分区

在compute节点上的临时磁盘vdb中划分两个20G的分区。

[root@compute ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-104857599, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): +20G
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
Partition number (2-4, default 2): 
First sector (41945088-104857599, default 41945088): 
Using default value 41945088
Last sector, +sectors or +size{K,M,G} (41945088-104857599, default 104857599): +20G
Partition 2 of type Linux and of size 20 GiB is set

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@compute ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk 
└─vda1 253:1    0  100G  0 part /
vdb    253:16   0   50G  0 disk 
├─vdb1 253:17   0   20G  0 part 
└─vdb2 253:18   0   20G  0 part

2.OpenStack云平台部署

完成基础环境部署后,就可以开始部署安装OpenStack云平台。

(1)配置环境变量

在controller节点和compute节点安装OpenStack云平台的安装脚本软件包。

[root@controller ~]# yum install -y openstack-iaas
…
Installed:
  openstack-train.x86_64 0:v1.0.2-1.el7                                                      
Complete!

[root@compute ~]# yum install -y openstack-iaas
…
Installed:
  openstack-train.x86_64 0:v1.0.2-1.el7                                                      
Complete!

在controller节点和compute节点配置环境变量文件/etc/openstack/openrc.sh,内容如下所示。

[root@controller ~]# vi  /etc/openstack/openrc.sh 
#修改以下内容
HOST_IP=192.168.10.100
HOST_PASS=000000           #controller节点root用户密码
HOST_NAME=controller
HOST_IP_NODE=192.168.10.200
HOST_PASS_NODE=000000    #compute节点root用户密码
HOST_NAME_NODE=compute
network_segment_IP=192.168.10.0/24
RABBIT_USER=openstack
RABBIT_PASS=000000
DB_PASS=000000
DOMAIN_NAME=demo
ADMIN_PASS=000000
DEMO_PASS=000000
KEYSTONE_DBPASS=000000
GLANCE_DBPASS=000000
GLANCE_PASS=000000
PLACEMENT_DBPASS=000000
PLACEMENT_PASS=000000
NOVA_DBPASS=000000
NOVA_PASS=000000
NEUTRON_DBPASS=000000
NEUTRON_PASS=000000
METADATA_SECRET=000000
INTERFACE_NAME=ens34      #云主机第二张网卡名称
Physical_NAME=provider
minvlan=1
maxvlan=1000
CINDER_DBPASS=000000
CINDER_PASS=000000
BLOCK_DISK=sdb1          #compute节点第一个分区名称
SWIFT_PASS=000000
OBJECT_DISK=sdb2          #compute节点第二个分区名称
STORAGE_LOCAL_NET_IP=192.168.10.200

(2)部署OpenStack云平台基础环境

在controller节点和compute节点都执行脚本iaas-pre-host.sh部署OpenStack云平台基础环境。

[root@controller ~]# iaas-pre-host.sh

[root@compute ~]# iaas-pre-host.sh

(3)部署mariadb数据库及rabbit消息队列服务

在controller节点执行脚本部署mariadb数据库及rabbit消息队列服务。

[root@controller ~]# iaas-install-mysql.sh

(4)部署keystone服务

在controller节点执行脚本部署keystone服务。

[root@controller ~]# iaas-install-keystone.sh

(5)部署glance服务

在controller节点执行脚本部署glance服务。

[root@controller ~]# iaas-install-glance.sh

(6)部署nova服务

在controller节点执行脚本部署nova组件的控制服务。

[root@controller ~]# iaas-install-placement.sh

[root@controller ~]# iaas-install-nova-controller.sh

执行完上面的脚本后,在compute节点执行脚本部署nova组件的计算服务,这样就将compute节点的cpu、内存及磁盘资源添加到OpenStack云平台的资源池中了。

[root@compute ~]# iaas-install-nova-compute.sh

(7)部署neutron服务

在controller节点执行脚本部署neutron组件的控制服务。

[root@controller ~]# iaas-install-neutron-controller.sh

在compute节点执行脚本部署neutron组件的计算服务。

[root@compute ~]# iaas-install-neutron-compute.sh

(8)部署dashboard服务

在controller节点执行脚本部署dashboard组件服务。

[root@controller ~]# iaas-install-dashboard.sh

安装完成后,使用google浏览器访问OpenStack云平台,访问地址为:http://192.168.10.100/dashboard,domain为demo,用户名为admin,密码为000000。结果如图2-1和图2-2所示。

图2-1 OpenStack云平台dashboard访问1

图2-1 OpenStack云平台dashboard访问2

(9)部署cinder服务

在controller节点执行脚本部署cinder组件的控制服务。

[root@controller ~]# iaas-install-cinder-controller.sh

controller节点脚本执行完成后,在compute节点执行脚本部署cinder组件的计算服务。

[root@compute ~]# iaas-install-cinder-compute.sh

(10)部署swift服务

在controller节点执行脚本部署swift组件的控制服务。

[root@controller ~]# iaas-install-swift-controller.sh

在controller节点脚本执行完成后,在compute节点执行脚本部署swift组件的计算服务。

[root@compute ~]# iaas-install-swift-compute.sh
3.创建cirros云主机

(1)上传镜像

在controller节点使用OpenStack相关命令上传cirros镜像。

[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# glance image-create --name cirros --disk-format qcow2 --container-format bare < /opt/iaas/images/cirros-0.3.4-x86_64-disk.img 
+------------------+----------------------------------------------------------------------------------+
| Property         | Value                                                                            |
+------------------+----------------------------------------------------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6                                                 |
| container_format | bare                                                                             |
| created_at       | 2022-02-16T02:58:23Z                                                             |
| disk_format      | qcow2                                                                            |
| id               | 76ce1b38-b1fa-465c-947f-288ea4760761                                             |
| min_disk         | 0                                                                                |
| min_ram          | 0                                                                                |
| name             | cirros                                                                           |
| os_hash_algo     | sha512                                                                           |
| os_hash_value    | 1b03ca1bc3fafe448b90583c12f367949f8b0e665685979d95b004e48574b953316799e23240f4f7 |
|                  | 39d1b5eb4c4ca24d38fdc6f4f9d8247a2bc64db25d6bbdb2                                 |
| os_hidden        | False                                                                            |
| owner            | 1ac0739939db4dc78bf42802ba0205e9                                                 |
| protected        | False                                                                            |
| size             | 13287936                                                                         |
| status           | active                                                                           |
| tags             | []                                                                               |
| updated_at       | 2022-02-16T02:58:24Z                                                             |
| virtual_size     | Not available                                                                    |
| visibility       | shared                                                                           |
+------------------+----------------------------------------------------------------------------------+

(2)创建网络

在controller节点使用OpenStack相关命令创建一个net网络。

[root@controller ~]# source /etc/keystone/admin-openrc.sh

[root@controller ~]# openstack network create net

[root@controller ~]# openstack subnet create --network net --subnet-range 10.0.0.0/24 --gateway 10.0.0.1 subnet

(3)创建云主机

登录dashboard页面,在左侧菜单栏中选择“项目”-“计算”-“实例”,点击“创建实例”,输入实例名称cirros,默认可用域为nova,数量为1,点击下一步;选择已共享的cirros镜像,选择不创建新卷,点击下一步;选择

m1.tiny实例类型,点击下一步;选择net为虚拟机的网络;这样点击“创建实例”按钮就可以完成虚拟机创建。创建步骤如图3-1、图3-2、图3-3、图3-4所示。

图3-1虚拟机创建1

图3-2虚拟机创建2

图3-3虚拟机创建3

图3-4虚拟机创建4

等虚拟机创建完成后,可以看到虚拟机状态为“运行”,如图3-5所示。只要求创建cirros的云主机不报错,不要求创建后的cirros云主机可以使用CRT连接。

图3-5 cirros虚拟机运行

案例二、Ansible部署OpenStack平台

案例准备

1.规划节点

Ansible服务的节点规划,见表1-2。

表1-2规划节点

IP

主机名

节点

192.168.10.10

ansible

Ansible节点

192.168.10.100

controller

控制节点

192.168.10.200

compute

计算节点

2.基础准备

使用OpenStack平台创建三台云主机进行实验,云主机镜像使用提供的CentOS_7.9.qcow2镜像,Ansible节点flavor使用2核/4G内存/40G硬盘;controller节点flavor使用4核/12G内存/100G硬盘;compute接点flavor使用4核/8G内存/100G硬盘+50G临时磁盘。节点规划表中的IP地址为作者的IP地址,在进行实操案例的时候,按照自己的环境规划网络与IP地址(虚拟机需要使用两块网卡)。Ansible节点安装好Ansible服务。然后做好Ansible节点对controller和compute节点的无秘钥访问操作。

案例实施

1.环境准备

该实战案例为使用Ansible工具部署一个单控制单计算的OpenStack平台。

(1)配置IP并连接

连接三台云主机,并修改主机名分别为ansible、controller、compute。

(2)Ansible节点安装Ansible服务

在Ansible节点使用提供的ansible.tar.gz软件包,配置本地镜像源,安装ansible服务。把Ansible节点的防火墙和SELinux关闭。

[root@ansible ~]# tar -zxvf ansible.tar.gz -C /opt/

[root@ansible ~]# rm -rf /etc/yum.repos.d/*

[root@ansible ~]# vi /etc/yum.repos.d/local.repo
[ansible]
name=ansible
baseurl=file:///opt/ansible
gpgcheck=0
enabled=1

[root@ansible ~]# yum clean all && yum repolist

[root@ansible ~]# yum install -y ansible

[root@ansible ~]# ansible --version

(3)配置无秘钥登录

配置Ansible节点无秘钥登录controller和compute节点。配置完无秘钥登录后,使用Ansible节点ssh连接测试。(若云主机已是无秘钥访问的,则不用配置无秘钥)

[root@ansible ~]# ssh-keygen

[root@ansible ~]# ssh-copy-id ansible

[root@ansible ~]# ssh-copy-id controller

[root@ansible ~]# ssh-copy-id compute
2.目录结构

(1)项目目录

首先在/opt目录下创建一个项目目录openstack_ansible,命令如下:

[root@ansible ~]# mkdir /opt/openstack_ansible

(2)创建角色

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

安装私有云平台,使用init(基础环境)、mariadb(数据库)、keystone(认证服务)、glance(镜像服务)、placement、nova-controller(计算服务)、nova-compute(计算服务)、neutron-controller(网络服务)、neutron-compute(网络服务)、dashboard(界面服务)、cinder-controller(块存储服务)、cinder-compute(块存储服务)、swift-controller(对象存储服务)、swift-compute(对象存储服务)、heat(编排服务)这些roles来完成。下面创建这些roles和相应的项目目录,具体命令如下:

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

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

(3)创建group_vars目录

在项目目录/opt/openstack_ansible下创建group_vars目录,并在该目录下创建all文件,该目录用来存放变量声明文件all。命令如下:

[root@ansible ~]# cd /opt/openstack_ansible/

[root@ansible openstack_ansible]# mkdir group_vars

[root@ansible openstack_ansible]# cd group_vars/

[root@ansible group_vars]# touch all

(4)创建安装入口文件

进入/opt/openstack_ansible目录,创建“install_openstack.yaml”文件,该文件是安装动作的入口文件。命令如下:

[root@ansible openstack_ansible]# touch install_openstack.yaml

[root@ansible openstack_ansible]# ll
total 0
drwxr-xr-x.  2 root root  17 Aug 26 21:31 group_vars
-rw-r--r--.  1 root root   0 Aug 26 21:33 install_openstack.yaml
drwxr-xr-x. 10 root root 114 Aug 26 21:18 roles

到目前为止,ansible的目录结构与文件创建完毕。接下来对每一个role角色进行剧本的编写。

[root@ansible ~]# mkdir /opt/{centos,iaas}

[root@ansible ~]# mount CentOS-7-x86_64-DVD-2009.iso /opt/centos/

[root@ansible ~]# mount chinaskills_cloud_iaas_v2.0.iso /opt/iaas/

[root@ansible ~]# vi /etc/yum.repos.d/local.repo

[root@ansible ~]# yum clean all && yum repolist
3.编写Playbook剧本

在编写playbook前,ansible节点需要做一些基础准备工作,将CentOS-7-x86_64-DVD-2009.iso和chinaskills_cloud_iaas_v2.0.iso这两个ISO文件上传至ansible节点,分别挂载到/opt目录下的centos和iaas目了,并配置/opt目录为为ftp源,后面可供controller节点和compute节点使用。

[root@ansible ~]# mkdir /opt/{centos,iaas}

[root@ansible ~]# mount CentOS-7-x86_64-DVD-2009.iso /opt/centos/

[root@ansible ~]# mount chinaskills_cloud_iaas_v2.0.iso /opt/iaas/

[root@ansible ~]# vi /etc/yum.repos.d/local.repo

[root@ansible ~]# yum clean all && yum repolist

配置ftp服务:

[root@controller ~]# yum install -y vsftpd

[root@controller ~]# echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf 

[root@controller ~]# systemctl start vsftpd

[root@controller ~]# systemctl enable vsftpd

(1)init角色

该角色执行的任务是用来部署controller节点和compute的基础环境,包括配置yum源,安装iaas-xiandian脚本,安装iaas-pre-host脚本。在roles/init/tasks目录下,创建main.yaml文件,文件的内容如下:

[root@ansible ~]# cd /opt/openstack_ansible/roles/init/tasks/

[root@ansible tasks]# vi 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

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

在该init角色剧本中,把local.repo文件拷贝至init/files目录下,把openrc.sh.j2文件拷贝至init/templates目录下。下面贴出local.repo和host.j2的文件内容:

local.repo内容:

[root@ansible tasks]# vi local.repo
[centos]
name=centos
baseurl=ftp://192.168.10.10/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=ftp://192.168.10.10/iaas/iaas-repo
gpgcheck=0
enabled=1

openrc.sh.j2内容如下:

#--------------------system Config--------------------##
#Controller Server Manager IP. example:x.x.x.x
HOST_IP={{controller_ip}}

#Controller HOST Password. example:000000 
HOST_PASS={{PASSWD}}

#Controller Server hostname. example:controller
HOST_NAME={{controller_name}}

#Compute Node Manager IP. example:x.x.x.x
HOST_IP_NODE={{compute_ip}}

#Compute HOST Password. example:000000 
HOST_PASS_NODE={{PASSWD}}

#Compute Node hostname. example:compute
HOST_NAME_NODE={{compute_name}}

#--------------------Chrony Config-------------------##
#Controller network segment IP.  example:x.x.0.0/16(x.x.x.0/24)
network_segment_IP={{network_segment_IP}}/24

#--------------------Rabbit Config ------------------##
#user for rabbit. example:openstack
RABBIT_USER=openstack

#Password for rabbit user .example:000000
RABBIT_PASS={{PASSWD}}

#--------------------MySQL Config---------------------##
#Password for MySQL root user . exmaple:000000
DB_PASS={{PASSWD}}

#--------------------Keystone Config------------------##
#Password for Keystore admin user. exmaple:000000
DOMAIN_NAME=demo
ADMIN_PASS={{PASSWD}}
DEMO_PASS={{PASSWD}}

#Password for Mysql keystore user. exmaple:000000
KEYSTONE_DBPASS={{PASSWD}}

#--------------------Glance Config--------------------##
#Password for Mysql glance user. exmaple:000000
GLANCE_DBPASS={{PASSWD}}

#Password for Keystore glance user. exmaple:000000
GLANCE_PASS={{PASSWD}}

#--------------------Placement Config----------------------##
#Password for Mysql placement user. exmaple:000000
PLACEMENT_DBPASS={{PASSWD}}

#Password for Keystore placement user. exmaple:000000
PLACEMENT_PASS={{PASSWD}}

#--------------------Nova Config----------------------##
#Password for Mysql nova user. exmaple:000000
NOVA_DBPASS={{PASSWD}}

#Password for Keystore nova user. exmaple:000000
NOVA_PASS={{PASSWD}}

#--------------------Neutron Config-------------------##
#Password for Mysql neutron user. exmaple:000000
NEUTRON_DBPASS={{PASSWD}}

#Password for Keystore neutron user. exmaple:000000
NEUTRON_PASS={{PASSWD}}

#metadata secret for neutron. exmaple:000000
METADATA_SECRET={{PASSWD}}

#External Network Interface. example:eth1
INTERFACE_NAME={{External_Network}}

#External Network The Physical Adapter. example:provider
Physical_NAME={{Physical_NAME}}

#First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
minvlan=1

#Last Vlan ID in VLAN RANGE for VLAN Network. example:200
maxvlan=1000

#--------------------Cinder Config--------------------##
#Password for Mysql cinder user. exmaple:000000
CINDER_DBPASS={{PASSWD}}

#Password for Keystore cinder user. exmaple:000000
CINDER_PASS={{PASSWD}}

#Cinder Block Disk. example:md126p3
BLOCK_DISK={{cinder_disk}}

#--------------------Swift Config---------------------##
#Password for Keystore swift user. exmaple:000000
SWIFT_PASS={{PASSWD}}

#The NODE Object Disk for Swift. example:md126p4.
OBJECT_DISK={{swift_disk}}

#The NODE IP for Swift Storage Network. example:x.x.x.x.
STORAGE_LOCAL_NET_IP={{STORAGE_LOCAL_NET_IP}}

#--------------------Trove Config----------------------##
#Password for Mysql trove user. exmaple:000000
TROVE_DBPASS={{PASSWD}}

#Password for Keystore trove user. exmaple:000000
TROVE_PASS={{PASSWD}}

#--------------------Heat Config----------------------##
#Password for Mysql heat user. exmaple:000000
HEAT_DBPASS={{PASSWD}}

#Password for Keystore heat user. exmaple:000000
HEAT_PASS={{PASSWD}}

#--------------------Ceilometer Config----------------##
#Password for Gnocchi ceilometer user. exmaple:000000
CEILOMETER_DBPASS={{PASSWD}}

#Password for Keystore ceilometer user. exmaple:000000
CEILOMETER_PASS={{PASSWD}}

#--------------------AODH Config----------------##
#Password for Mysql AODH user. exmaple:000000
AODH_DBPASS={{PASSWD}}

#Password for Keystore AODH user. exmaple:000000
AODH_PASS={{PASSWD}}

#--------------------ZUN Config----------------##
#Password for Mysql ZUN user. exmaple:000000
ZUN_DBPASS={{PASSWD}}

#Password for Keystore ZUN user. exmaple:000000
ZUN_PASS={{PASSWD}}

#Password for Keystore KURYR user. exmaple:000000
KURYR_PASS={{PASSWD}}

#--------------------OCTAVIA Config----------------##
#Password for Mysql OCTAVIA user. exmaple:000000
OCTAVIA_DBPASS={{PASSWD}}

#Password for Keystore OCTAVIA user. exmaple:000000
OCTAVIA_PASS={{PASSWD}}

#--------------------Manila Config----------------##
#Password for Mysql Manila user. exmaple:000000
MANILA_DBPASS={{PASSWD}}

#Password for Keystore Manila user. exmaple:000000
MANILA_PASS={{PASSWD}}

#The NODE Object Disk for Manila. example:md126p5.
SHARE_DISK={{manila_disk}}

#--------------------Cloudkitty Config----------------##
#Password for Mysql Cloudkitty user. exmaple:000000
CLOUDKITTY_DBPASS={{PASSWD}}

#Password for Keystore Cloudkitty user. exmaple:000000
CLOUDKITTY_PASS={{PASSWD}}

#--------------------Barbican Config----------------##
#Password for Mysql Barbican user. exmaple:000000
BARBICAN_DBPASS={{PASSWD}}

#Password for Keystore Barbican user. exmaple:000000
BARBICAN_PASS={{PASSWD}}
############################################################
####在vi编辑器中执行:%s/^.\{1\}//  删除每行前1个字符(#号)#####
############################################################

因为设置的变量,所以需要在/opt/openstack_ansible/group_vars/all中声明变量,all文件内容如下:

[root@ansible openstack_ansible]# cat group_vars/all 
controller_ip: 192.168.10.100
controller_name: controller
compute_ip: 192.168.10.200
compute_name: compute
PASSWD: '000000'
cinder_disk: sdb1
swift_disk: sdb2
manila_disk: sdb3
network_segment_IP: 192.168.10.0
External_Network: ens33
Physical_NAME: provider
STORAGE_LOCAL_NET_IP: 192.168.10.200

至此,init角色剧本编写完成。

(2)其他角色

其他角色的作用是执行安装openstack的脚本,可以自行参考提供的openstack_ansible_train.tar.gz案例包。

4.执行Playbook

在执行剧本之前,还有一些工作需要完成,具体任务如下:

(1)修改hosts文件

此处需要修改的hosts文件并不只是/etc/hosts,还有一个/etc/ansible/hosts文件,编辑/etc/ansible/hosts,在文件的最后添加需要执行剧本的目标主机组,添加的内容如下:

## db-[99:101]-node.example.com
[controller]
192.68.10.100
[compute]
192.168.10.200

(2)编辑剧本入口文件

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

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

- hosts: controller
  remote_user: root
 
  roles: 
    - init
    - mariadb
    - keystone
    - glance
    - 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

(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 RECAP ****************************************************************************************************************************************
172.128.11.21              : ok=10   changed=9    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.128.11.39              : ok=16   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在等待一段时间之后,剧本执行完毕,若没有报错,访问controller节点的ip地址/dashboard,可以访问openstack界面。

                         

至此,使用Ansible一键部署openstack完成。关于更多组件的安装,用户可以自行编写role执行安装。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值