天天看點

Ansible 腳本部署 OpenStack

1.規劃節點

ansible 部署 openstack 平台的節點規劃,

表 8-3-1 節點規劃

ip

主機名

節點

172.16.51.65

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]

[compute]

(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

│ └── dashboard.j2

├── glance

│ └── glance.j2

├── keystone

│ └── 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 ---&gt; 正在配置節點無鑰認證\n\033[0m" all_hosts=<code>cat group_vars/all |grep host_ip|awk -f : '{print $2}'</code> all_server_root_password=<code>cat group_vars/all |grep all_server_root_password|awk -f : '{print $2}'</code> if [[ ! -s ~/.ssh/id_rsa.pub ]];then ssh-keygen -t rsa -n '' -f ~/.ssh/id_rsa -q -b 2048 fi echo "-----&gt;" for hosts in $all_hosts; do echo "$hosts ==&gt; ..." ping $hosts -c 4 &gt;&gt; /dev/null 2&gt;&amp;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:

- 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

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/

└── 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/

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 }}" &gt;&gt; /etc/ntp.conf

- service ntpd restart

(4) rabbit 目錄 rabbit 任務是配置控制節點 rabbitmq 服務。

rabbit/

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/

└── 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/

└── glance.j2

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

└── nova-controller.j2

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

└── nova-compute.j2

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

└── neutron-controller.j2

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

└── neutron-compute.j2

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

└── dashboard.j2

- name: copy dashboard configuration files template: src=dashboard.j2 dest=/var/tmp/dashboard.sh

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

繼續閱讀