热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Ansible脚本部署OpenStack

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Ansible 脚本部署 OpenStack相关的知识,希望对你有一定的参考价值。  1.规划节点 Ansible 部署 OpenStack

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Ansible 脚本部署 OpenStack相关的知识,希望对你有一定的参考价值。



 

1.规划节点

Ansible 部署 OpenStack 平台的节点规划,

表 8-3-1 节点规划























IP 主机名 节点
172.16.51.65 ansible Ansible
172.16.51.69 controller 控制节点
172.16.51.70 compute 计算节点

2.基础准备 controller 和 compute 节点拥有两张网卡,其中一个网卡和 Ansible 节点在同一个网络中。

Ansible、controller 和 compute 节点为 OpenStack 中虚拟机,Ansible 节点提供 Yum 安装源和 Ansible 部署脚本,利用安装源和部署脚本可一键部署并配置 OpenStack 平台。提供 Ansible qcow2 镜像,可直接在 OpenStack 中启动 Ansible 虚拟机。

8.3.3 案例实施

1.基础环境的配置

(1)上传所需 ISO 镜像

使用 SecureFX 工具,上传 CentOS-7-x86_64-DVD-1511.iso 和 XianDian-IaaS-v2.2.iso 镜像到 Ansible 节点中。

[root@ansible ~]# ll total 7012768 -rw-r--r-- 1 root root 4329570304 Jan 16 2017 CentOS-7-x86_64-DVD-1511.iso

-rw-r--r-- 1 root root 2851502080 Nov 6 2017 XianDian-IaaS-v2.2.iso

(2)设置 Yum 源

在/opt/目录中创建 centos7 和 iaas 文件夹,将 CentOS-7-x86_64-DVD-1511.iso 和 XianDian-IaaS-v2.2.iso 镜像挂载至文件夹中。

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

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

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

[root@ansible ~]# mount XianDian-IaaS-v2.2.iso /opt/iaas

删除/etc/yum.repos.d/文件中所有默认源,创建本地源文件,并设置/opt/centos7 和

/opt/iaas/iaas-repo/两个源路径。

[root@ansible ~]# rm -rf /etc/yum.repos.d/* [root@ansible ~]# cat < /etc/yum.repos.d/local.repo [centos7] name=centos7 baseurl=file:///tmp/centos7 gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=file:///tmp/iaas/iaas-repo gpgcheck=0 enabled=1 EOF

(3)配置 vsftpd 服务安装 vsftpd 服务,并提供 FTP 方式访问 Yum 源。

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

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

[root@ansible ~]# systemctl restart vsftpd

[root@ansible ~]# systemctl enable vsftpd

2.设置 Ansible 基础配置

(1) 设置 Ansible 的 host 主机名

此节中需要编写配置安装 OpenStack 所有的基础环境配置内容,内容包括安装服务的账

号和密码,配置基础服务(如 RabbitMQ、mysql 等)用户密码和账号等。在/etc/ansible/hosts 文件中设置 controller 和 compute 节点的主机名,配置内容如下。

[root@ansible ~]# cat /etc/ansible/hosts

[controller]

172.16.51.69

[compute]

172.16.51.70

(2) 配置环境变量编辑提供的 Ansible 脚本中的环境变量文件,根据当前环境配置所需变量。

[root@ansible]#cat /opt/openstack_base_x/group_vars/all HOST_IP: 172.16.51.69 ##controller 节点 IP 地址 HOST_NAME: controller ##controller 节点主机名称 HOST_IP_NODE: 172.16.51.70 ##compute 计算节点 IP 地址 HOST_NAME_NODE: compute ##compute 计算节点主机名 RABBIT_USER: openstack ##rabbitmq 用户名 RABBIT_PASS: 123456 ##rabbitmq 用户密码 DB_PASS: 123456 ##数据库密码 DOMAIN_NAME: xiandian ##openstack 域名称 ADMIN_PASS: 123456

DEMO_PASS: 123456

KEYSTONE_DBPASS: 123456

GLANCE_DBPASS: 123456

GLANCE_PASS: 123456

NOVA_DBPASS: 123456

NOVA_PASS: 123456

NEUTRON_DBPASS: 123456

NEUTRON_PASS: 123456

METADATA_SECRET: 123456

##openstack 组件的密码

INTERFACE_NAME: eth1

##设置 openstack 平台外部网卡

ALL_SERVER_ROOT_PASSWORD: 000000

##设置 controller 节点和 compute 节点的 root 密码

NAME1: centos7

URL1: ftp://172.16.51.65/centos7/

NAME2: iaas

URL2: ftp://172.16.51.65/iaas/iaas-repo/

##设置 yum 源的路径

3.环境安装

(1)执行 Ansible 部署脚本配置完成所需环境变量后,进入 Ansible 脚本目录,执行 Ansible 脚本,一键自动部署

OpenStack 平台。

[root@ansible ~]# cd /opt/openstack_base_x/ [root@ansible openstack_base_x]# sh install.sh

具体执行过程如图 8-3-1 所示。

(2)Ansible 脚本执行完毕

Ansible 脚本执行完成后,可以在最后查看到执行结果,显示安装过程中是否有错误异常,如图 8-3-2 所以。

图 8-3-2 Ansible 脚本执行完毕

4.访问 OpenStack 平台

(1)访问 OpenStack 平台

等待执行完成后可以通过 Web 界面查看最后的安装效果,如图 8-3-3 所示。

(2)登录 Dashboard

输入在环境变量中设置的域、用户名、密码,单击“连接”按钮,即可登录 Dashboard 平台中,查看到项目列表,如图 8-3-4 所示。

图 8-3-4 登录 Dashboard

5.目录结构(1)目录构成

了解一个简单 Ansible 的 playbooks 的构成部分。首先要了解 Ansible 脚本目录。此目录拥有所有使用到的数据和变量信息。此目录的所有文件和目录如下所示。

openstack_base/

├── deploy.yml ├── install.sh

├── group_vars

│ └── all

├── library

└── roles

├── config_basic

│ ├── tasks

│ │ └── main.yml

│ └── templates

│ ├── iaas-pre-host.j2

│ └── local.repo

├── dashboard

│ ├── tasks

│ │ └── main.yml

│ └── templates

│ └── dashboard.j2

├── glance

│ ├── tasks

│ │ └── main.yml

│ └── templates

│ └── glance.j2

├── keystone

│ ├── tasks

│ │ └── main.yml

 

│ └── templates │ └── keystone.j2 ├── mysql │ ├── tasks │ │ └── main.yml │ └── templates │ └── base.j2 ├── neutron_compute │ ├── tasks │ │ └── main.yml │ └── templates │ └── neutron-compute.j2 ├── neutron_controller │ ├── tasks │ │ └── main.yml │ └── templates │ └── neutron-controller.j2 ├── nova_compute │ ├── tasks │ │ └── main.yml │ └── templates │ └── nova-compute.j2 ├── nova_controller │ ├── tasks │ │ └── main.yml │ └── templates │ └── nova-controller.j2 ├── ntpclient │ └── tasks │ └── main.yml

 

└── rabbit

└── tasks

└── main.yml

 

34 directories, 23 files

从上述文件可以看出 playbooks 的内一个操作由 roles 目录内的执行方法来执行。所有的默认环境参数则由 group_vars 目录内 all 文件来定义。每一个 roles 目录内的方法均分为 tasks 和 templates 两个目录,tasks 目录为该方法执行的所有脚本,templates 目录为此方法所有的模板文件或者是配置文件。

(2)install.sh 安装脚本

install.sh 安装脚本主要是设置与控制节点和计算节点的无秘钥通信,以及关联了 playbooks 的安装命令,通过执行 install.sh 脚本直接一键安装 OpenStack 平台。











#!/bin/bash printf "\\033[35m \\n ---> 正在配置节点无钥认证\\n\\033[0m" all_hosts=cat group_vars/all |grep HOST_IP|awk -F : \'{print $2}\' ALL_SERVER_ROOT_PASSWORD=cat group_vars/all |grep ALL_SERVER_ROOT_PASSWORD|awk -F : \'{print $2}\' if [[ ! -s ~/.ssh/id_rsa.pub ]];then ssh-keygen -t rsa -N \'\' -f ~/.ssh/id_rsa -q -b 2048 fi echo "----->" for hosts in $all_hosts; do echo "$hosts ==> ..." ping $hosts -c 4 >> /dev/null 2>&1 if [ 0 -ne $? ]; then echo -e "\\033[31mWarning\\n$hosts IP unreachable!\\033[0m" exit 1 fi
expect -c "set timeout -1; spawn ssh-copy-id -i /root/.ssh/id_rsa $hosts ; expect { (yes/no) {send -- yes\\r;exp_continue;} assword: {send -- $ALL_SERVER_ROOT_PASSWORD\\r;exp_continue;} eof {exit 0;} }"; done printf "\\033[35m 节点无秘钥环境配置完毕\\n\\033[0m" ansible-playbook deploy.yml ##通过 ansible-playbook 安装 openstack 平台

(3)playbook 文件

playbook 文件为编辑好任务安排,通过执行 playbook 文件实现批量管理。此文件中编

写了对 controller 节点需要安装的所有服务,以及 compute 节点需要安装的所有服务。

- hosts: controller remote_user: root roles:

- config_basic

- mysql

- rabbit

- keystone

- glance

- nova_controller

- neutron_controller

- dashboard

 

 

- hosts: compute remote_user: root roles:

- config_basic

- ntpclient

- nova_compute

- neutron_compute

(4)环境变量

环境变量是在执行 Ansible 安装过程中,所需要的一些当前环境的参数,Ansible 会根据环境变量的参数来进行安装 OpenStack 平台。用户需要填写环境参数文件 group_vars 目录内 all 文件如下。

HOST_IP: 172.16.51.69

##controller 节点 IP 地址 HOST_NAME: controller

##controller 节点主机名称

HOST_IP_NODE: 172.16.51.70

##compute 计算节点 IP 地址

HOST_NAME_NODE: compute

##compute 计算节点主机名

RABBIT_USER: openstack

##rabbitmq 用户名

RABBIT_PASS: 123456

##rabbitmq 用户密码 DB_PASS: 123456

##数据库密码

DOMAIN_NAME: xiandian

##openstack 域名称

ADMIN_PASS: 123456

DEMO_PASS: 123456

KEYSTONE_DBPASS: 123456

GLANCE_DBPASS: 123456

GLANCE_PASS: 123456

NOVA_DBPASS: 123456

NOVA_PASS: 123456

NEUTRON_DBPASS: 123456

NEUTRON_PASS: 123456

METADATA_SECRET: 123456

##openstack 组件的密码

INTERFACE_NAME: eth1

##设置 openstack 平台外部网卡

ALL_SERVER_ROOT_PASSWORD: 000000

##设置 controller 节点和 compute 节点的 root 密码

NAME1: centos7

URL1: ftp://172.16.51.65/centos7/

NAME2: iaas

URL2: ftp://172.16.51.65/iaas/iaas-repo/

##设置 yum 源的路径

6.roles 目录结构

(1)config_basic 目录

config_basic 任务是配置和安装节点的基础服务,包括配置 Yum源文件、修改主机名称、

配置防火墙设置。

config_basic/

├── tasks

│ └── main.yml

└── templates

├── iaas-pre-host.j2

└── local.repo

main.yml 为 config_basic 的任务列表,编写了所需要执行的操作内容和过程。templates 目录下的 iaas-pre-host.j2 为所要安装服务的脚本文件,local.repo 为所需的 Yum 源配置文件, main.yml 将脚本文件和 local.repo 文件复制至目标主机中,并执行脚本安装基础服务和配置。 config_basic 目录内 tasks 的 main.yml 文件如下。

- name: delete the default installation source

shell: rm -rf /etc/yum.repos.d/* - name: Configure the installation source template: src=local.repo dest=/etc/yum.repos.d/local.repo

- name: configuration base environment template: src=iaas-pre-host.j2 dest=/var/tmp/iaas-pre-host.sh

- command: bash /var/tmp/iaas-pre-host.sh

(2)mysql 目录

在配置完成基本的环境之后,需要配置相对应的基础服务,MySQL 任务是配置和安装

控制节点的数据库服务。

mysql/

├── tasks

│ └── main.yml

└── templates

└── base.j2

main.yml 为 MySQL 的任务列表,将所需的安装和配置 MySQL 服务的脚本 base.j2 文件复制至目标节点中,并执行脚本安装 MySQL 服务。base.j2 文件为安装、配置 MySQL 服务脚本。tasks 目录内新建 main.yml 文件,文件如下。

- name: Copy Basic Configuration Files template: src=base.j2 dest=/var/tmp/base.sh

 

- command: bash /var/tmp/base.sh

(3)ntpclient 目录

ntpclient 任务是配置计算节点向控制节点进行时间同步,保证计算节点和控制节点时间

相同。

ntpclient/

└── tasks

└── main.yml

main.yml 为 ntpclient 的任务列表,配置节点的 NTP 服务时间同步节点,并启动 ntpd 服

务器。tasks 目录内新建 main.yml 文件,文件具体如下。

- name: NtpDate From Controller Node

 

shell: "{{ item }}" with_items:

- sed -i \'/server/d\' /etc/ntp.conf

- echo "server {{ HOST_IP }}" >> /etc/ntp.conf

- service ntpd restart

(4) rabbit 目录 rabbit 任务是配置控制节点 rabbitmq 服务。

rabbit/

└── tasks

└── main.yml

main.yml 为 rabbit 的任务列表,配置节点 rabbitmq 服务创建 OpenStack 基础服务所使用

的用户名和密码,以及访问权限。tasks 目录 main.yml 文件,文件具体如下。

- name: Start Rabbitmq Services service: name=rabbitmq-server state=restarted enabled=true - name: Start Memcached Services service: name=memcached state=restarted enabled=true - name: Add Rabbitmq User rabbitmq_user: user={{ RABBIT_USER }} password={{ RABBIT_PASS }} vhost=/ configure_priv=.* read_priv=.* write_priv=.* state=present

(5) keystone 目录 keystone 任务是安装和配置 OpenStack 平台中 keystone 服务,main.yml 为 keystone 的任务列表,编写将 keystone.j2 脚本复制至节点中,并执行脚本,keystone.j2 文件包含了 keystone 服务的安装和配置。

keystone/

├── tasks

│ └── main.yml

└── templates

└── keystone.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Keystone Configuration Files template: src=keystone.j2 dest=/var/tmp/keystone.sh

- command: bash /var/tmp/keystone.sh

(6)glance 目录

Glance 任务是安装和配置 OpenStack 平台中 Glance 服务,main.yml 为 Glance 的任务列表,编写将 glance.j2 脚本复制至节点中,并执行脚本,glance.j2 包含了 Glance 服务的安装和配置。

glance/

├── tasks

│ └── main.yml

└── templates

└── glance.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Glance Configuration Files template: src=glance.j2 dest=/var/tmp/glance.sh

- command: bash /var/tmp/glance.sh

(7)nova_controller 目录 nova_controller 任务是安装和配置 OpenStack 平台中控制节点 Nova 所有服务。main.yml 为 nova_controller 的任务列表,编写将 nova-controller.j2 脚本复制至节点中,并执行脚本, nova-controller.j2 文件中包含了控制节点 Nova 服务的安装和配置。

nova_controller/

├── tasks

│ └── main.yml

└── templates

└── nova-controller.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Nova Controller Configuration Files template: src=nova-controller.j2 dest=/var/tmp/nova-controller.sh

- command: bash /var/tmp/nova-controller.sh

(8)nova_compute 目录 nova_compute 任务是安装和配置 OpenStack 平台中计算节点 nova-compute 服务, main.yml 为 nova_compute 的任务列表,编写将 nova-compute.j2 脚本复制至节点中,并执行脚本。nova_compute.j2 文件中包含了计算节点 nova-compute 服务的安装和配置。

nova_compute/

├── tasks

│ └── main.yml

└── templates

└── nova-compute.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Nova Compute Configuration Files template: src=nova-compute.j2 dest=/var/tmp/nova-compute.sh

- command: bash /var/tmp/nova-compute.sh

(9)neutron_controller 目录 neutron_controller 任务是安装和配置 OpenStack 平台中控制节点 Neutron 服务,main.yml 为 neutron_controller 的任务列表,编写将 neutron-controller.j2 脚本复制至节点中,并执行脚本。neutron_controller.j2 文件中包含了控制节点 Neutron 服务的安装和配置。

neutron_controller/

├── tasks

│ └── main.yml

└── templates

└── neutron-controller.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Neutron Controller Configuration Files template: src=neutron-controller.j2 dest=/var/tmp/neutron-controller.sh

- command: bash /var/tmp/neutron-controller.sh

(10)neutron_compute 目录 neutron_compute 任务是安装和配置 OpenStack 平台中计算节点 Neutron 服务,main.yml

 

为neutron_compute的任务列表,编写将neutron-compute.j2脚本复制至节点中,并执行脚本, neutron-compute.j2 文件中包含了计算节点 Neutron 服务的安装和配置。

neutron_compute/

├── tasks

│ └── main.yml

└── templates

└── neutron-compute.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Neutron Compute Configuration Files template: src=neutron-compute.j2 dest=/var/tmp/neutron-compute.sh

- command: bash /var/tmp/neutron-compute.sh

(11)dashboard 目录

Dashboard 任务是安装和配置 OpenStack 平台中 Dashboard 服务,main.yml 为 Dashboard 的任务列表,编写将 dashboard.j2 脚本复制至节点中,并执行脚本,dashboard.j2 文件中包含了 Dashboard 服务的安装和配置。

dashboard/

├── tasks

│ └── main.yml

└── templates

└── dashboard.j2

tasks 目录 main.yml 文件,文件如下。

- name: Copy Dashboard Configuration Files template: src=dashboard.j2 dest=/var/tmp/dashboard.sh

- command: bash /var/tmp/dashboard.sh

 



推荐阅读
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
mobiledu2502875267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有