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 ---> 正在配置節點無鑰認證\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 "----->" 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:
- 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 }}" >> /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