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 <<EOF > /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