1. 程式人生 > >Oenstack Queens 部署全過程(未更新完)

Oenstack Queens 部署全過程(未更新完)

1、安裝並配置系統基礎環境

1.1 作業系統版本

 CentOS 7.4  64bit

1.2 配置IP地址資訊

首先建議大家用vim,vim和vi操作的區別就是高亮,vim能讓人更清晰的看出程式碼之間的差異。

yum install vim

正式配置我們的網絡卡資訊,我的網絡卡有四張,名字為ens33,ens34,ens35,ens36

#配置管理網/API網路的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#配置Ovelary網路的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens34
vim /etc/sysconfig/network-scripts/ifcfg-ens35
vim /etc/sysconfig/network-scripts/ifcfg-ens36
#四張網絡卡操作均相同
#1、ONBOOT=yes #2、刪除網絡卡UUID

1.3 配置主機名

這項操作是為了讓今後對節點操作的時候心中不亂。

hostnamectl set-hostname controller
hostnamectl set-hostname cinder
hostnamectl set-hostname compute-01
hostnamectl set-hostname compute-02

1.4 配置域名解析

此項操作在controller,compute01,compute02和cinder結點都相同。分別配置他們的DNS。

vi /etc/hosts
#複製如下資訊至四臺結點
#這是我自己的ens33網絡卡的資訊,其中具體的ip地址要按照你們的網路分配的IP來
#不要完全複製我的網絡卡IP地址。 192.168.124.27 controller 192.168.124.31 network 192.168.124.32 compute-01 192.168.124.33 compute-02

1.5 關閉Selinux

這項操作要在四個結點都進行操作

vim /etc/sysconfig/selinux
#設定如下資訊
SELINUX=disabled
#該操作需要重啟才能生效,但先別急著重啟。

1.6 關閉並禁用防火牆

這項操作同樣要在四個結點都進行操作

#關閉防火牆(重啟後才生效)
systemctl stop firewalld
#禁用防火牆
systemctl disable firewalld

1.7 重啟系統

重啟系統,讓selinux的關閉,以及防火牆的關閉以及禁用操作生效。

reboot

檢視一下selinux關閉成功了沒:

getenforce
#顯示應該為disabled

再檢視一下防火牆關閉成功了沒:

systemctl status firewalld

1.8 配置網路時間協議(NTP)

這個操作也要再四臺虛擬機器同時操作,但控制節點和其他節點不同,他的目的是讓其他節點的時間和控制節點同步。

#1)首先四臺結點都要安裝chrony包
yum install chrony -y
#2)下面的操作在controller結點的配置檔案設定
vi /etc/chrony.conf
#設定允許以下網段的資訊:(直接找到allow開頭的一行,把註釋去掉進行修改)
allow 192.168.124.0/24
#3)下面的操作在cinder,compute01,compute02結點的配置檔案設定
vi /etc/chrony.conf
#註釋掉前面server0,server1,server2,server3的三行程式碼,同時在其下新增一行:
server controller iburst
#4)下面開啟chrony服務,此操作要在四個結點都進行
systemctl enable chronyd.service
systemctl start chronyd.service
#5)檢視一下服務開啟情況
chronyc sources
#正常情況下,在compute01,compute02,cinder結點執行上述命令後
#會顯示一個controller的資訊,不會出現其他資訊。
#如果出現了的列表中沒有controller,則執行以下操作,
#如果出現了就以下操作就不用進行操作了。
#6)安裝ntpdate
yum install ntpdate
ntpdate controller
#7)重啟並檢視一下服務開啟情況
systemctl restart chronyd.service
chronyc sources
#此時應該已經成功了

1.9 安裝Stack軟體倉庫 和 OpenStack client

 yum install centos-release-openstack-queens
 yum install python-openstackclient
  • 注意,以下部分都是在控制節點安裝配置的

1.10 安裝並配置SQL資料庫

yum install mariadb mariadb-server python2-PyMySQL -y
vim /etc/my.cnf.d/openstack.cnf
# 開啟配置文件並修改以下資訊,取消其註釋
#[mysqld]
bind-address = 192.168.124.27
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
# 退出編輯文件,設定開機啟動並開啟服務
systemctl enable mariadb.service
systemctl start mariadb.service
# 注意這一步開始的時候要注意執行完這個語句,會讓你選擇
# 先按一個Enter,然後依次輸入y,n,y,y
# 其中的n那一項為是否禁止遠端連線資料庫
mysql_secure_installation

1.11 安裝並配置訊息佇列

# 安裝rabbitmq-server
yum install rabbitmq-server -y
# 啟動訊息佇列服務並將其配置為開機啟動
systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server
# 新增 openstack 使用者,RABBIT_PASS 為密碼
rabbitmqctl add_user openstack RABBIT_PASS
# 給openstack使用者配置寫和讀許可權
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

1.12 安裝並配置Memcached

yum install memcached python-memcached -y
vim /etc/sysconfig/memcached
# 編輯如下選項,記住不要複製過去,只是在選項括號內的末尾新增上controller即可
OPTIONS="-l 127.0.0.1,::1,controller"
# 啟動Memcached並將其配置為開機啟動
systemctl enable memcached.service
systemctl start memcached.service

1.13 安裝並配置etcd

yum install etcd -y
vim /etc/etcd/etcd.conf
# 編輯以下資訊,其中192.168.124.27為我本機ens33網絡卡的ip地址
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.124.27:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.124.27:2379"
ETCD_NAME="controller"
# 退出編輯並啟動服務
systemctl start etcd

2、 安裝部署認證服務 (Identity Service )

Keystone為所有OpenStack服務提供身份認證和授權,跟蹤使用者以及它們的許可權,提供一個可用服務以及API的列表。接收前臺請求的Keystone API和後臺的Keystone-db。

2.1 建立Keystone 使用者、資料庫並分配訪問許可權

mysql -u root -p
#建立資料庫keystone
CREATE DATABASE keystone;
#退出資料庫
\q
#配置資料庫許可權
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

2.2 安裝並配置

yum install openstack-keystone httpd mod_wsgi
vim /etc/keystone/keystone.conf
#配置下面的引數
[database]
# ...
connection = mysql+pymysql://keystone:[email protected]/keystone
[token]
# ...
provider = fernet

2.3 構建認證服務的資料庫

su -s /bin/sh -c "keystone-manage db_sync" keystone

2.4 初始化 Fernet key

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

2.5 引導身份服務

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller:35357/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne
#管理員的密碼為  ADMIN_PASS ,可以替換,第一次部署不建議替換。

2.6 配置Apache HTTP 服務

vi /etc/httpd/conf/httpd.conf
# 編輯下列內容
ServerName controller
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
systemctl enable httpd.service
systemctl start httpd.service

2.7 配置管理賬戶

export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3

2.8 建立domain, projects, users, and roles

openstack domain create --description "An Example Domain" example
openstack project create --domain default \
  --description "Service Project" service
openstack project create --domain default \
  --description "Demo Project" demo
openstack user create --domain default \
  --password-prompt demo
# 密碼 DEMO_PASS
openstack role create user
openstack role add --project demo --user demo user

2.9 驗證操作

unset OS_AUTH_URL OS_PASSWORD
openstack --os-auth-url http://controller:35357/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin token issue
# 密碼  ADMIN_PASS
openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name demo --os-username demo token issue
# 密碼 DEMO_PASS

3、安裝映象服務 - Glance(在控制節點安裝)

OpenStack映象服務是IaaS的核心服務,它接受磁碟映象或伺服器映象API請求,和來自終端使用者或OpenStack計算元件的元資料定義。
它也支援包括OpenStack物件儲存在內的多種型別倉庫上的磁碟映象或伺服器映象儲存。
大量週期性程序運行於OpenStack映象服務上以支援快取。
同步複製(Replication)服務保證叢集中的一致性和可用性。
其它週期性程序包括auditors, updaters, 和 reapers。
OpenStack映象服務包括以下元件:
glance-api
接收映象API的呼叫,諸如映象發現、恢復、儲存。
glance-registry
儲存、處理和恢復映象的元資料,元資料包括項諸如大小和型別。

3.1 建立 OpenStack 客戶端環境指令碼

# 建立admin專案和使用者客戶端環境變數指令碼
vim admin-openrc
# 複製以下內容
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

# 建立demo專案和使用者客戶端環境變數指令碼
vim demo-openrc
# 複製以下內容
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

3.2 使用指令碼

. admin-openrc

3.3 請求認證令牌

openstack token issue

3.4 安裝Glance

# 建立建立Glance資料庫、服務憑證和API端點。
mysql -u root -p
# 建立 glance 資料庫
CREATE DATABASE glance;		
# 對``glance``資料庫授予恰當的許可權 , GLANCE_DBPASS 資料庫密碼可以替換,第一次安裝不建議替換
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
  IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
  IDENTIFIED BY 'GLANCE_DBPASS';
# 退出資料庫
\q

3.5 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問許可權

. admin-openrc

3.6 建立 glance 使用者 , 密碼 GLANCE_PASS

openstack user create --domain default --password-prompt glance

3.7 新增 admin 角色到 glance 使用者和 service 專案上

openstack role add --project service --user glance admin

3.8 建立glance服務實體

openstack service create --name glance \
  --description "OpenStack Image" image

3.9 建立映象服務的 API 端點

openstack endpoint create --region RegionOne \
  image public http://controller:9292
openstack endpoint create --region RegionOne \
  image internal http://controller:9292
openstack endpoint create --region RegionOne \
  image admin http://controller:9292

3.10 安裝glance軟體包

yum install openstack-glance -y
# 編輯檔案 /etc/glance/glance-api.conf 並完成如下修改:
vim /etc/glance/glance-api.conf
# 在 [database] 部分,配置資料庫訪問:(如果修改了glance使用者密碼要替換 GLANCE_PASS )
[database]
# ...
connection = mysql+pymysql://glance:[email protected]/glance

在 [keystone_authtoken][paste_deploy] 部分,配置認證服務訪問:
[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
# ...
flavor = keystone


在 [glance_store] 部分,配置本地檔案系統儲存和映象檔案位置:

[glance_store]
# ...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/


# 編輯 /etc/glance/glance-registry.conf 檔案,並完成如下配置:
vim /etc/glance/glance-registry.conf

# 在 [database] 部分,配置資料庫訪問(如果更改了密碼,注意替換GLANCE_DBPASS):
[database]
# ...
connection = mysql+pymysql://glance:[email protected]/glance

在 [keystone_authtoken][paste_deploy] 部分,配置認證服務訪問(如果更改了密碼,注意替換GLANCE_PASS):

[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
# ...
flavor = keystone

3.11 寫入映象服務資料庫

su -s /bin/sh -c "glance-manage db_sync" glance

3.12 啟動映象服務、配置開機啟動

systemctl start openstack-glance-api.service \
  openstack-glance-registry.service
systemctl enable openstack-glance-api.service \
  openstack-glance-registry.service

3.13 測試驗證

# 下載源映象cirros:
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img

# 使用 QCOW2 磁碟格式, bare 容器格式上傳映象到映象服務並設定公共可見,這樣所有的專案都可以訪問它
openstack image create "cirros" \
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public
  
# 確認映象的上傳並驗證屬性
openstack image list

4、安裝計算服務-Nova(控制節點)

Nova是基礎設施即服務(IaaS)系統的主要部分,該模組主要由Python實現。

Nova請求Keystone服務進行認證;
請求Image服務提供磁碟映象;
為dashboard提供使用者與管理員介面。

首先,要在控制節點安裝部署Nova元件:

4.1 用資料庫連線客戶端

mysql -u root -p

4.2 建立 nova_api 、 nova 和nova_cell0資料庫

CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

4.3 授予對資料庫的適當訪問許可權

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
 
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
  
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
  
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
  
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

4.4 獲得 admin 憑證

# 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問許可權
. admin-openrc

4.5 建立 nova 使用者 (密碼 NOVA_PASS)

openstack user create --domain default --password-prompt nova

4.6 給 nova 使用者新增 admin 角色

openstack role add --project service --user nova admin

4.7 建立 nova 服務實體

openstack service create --name nova \
  --description "OpenStack Compute" compute

4.8 建立 Compute 服務 API 端點

openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
  
openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
  
openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1

4.9 建立Placement service (密碼 PLACEMENT_PASS)

openstack user create --domain default --password-prompt placement

4.10 給 placement 新增 admin 角色

openstack role add --project service --user placement admin

4.11 建立 Placement API

openstack service create --name placement --description "Placement API" placement

4.12 建立 Placement API service endpoints

openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

4.13 安裝控制節點Nova軟體包

yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler openstack-nova-placement-api

4.14 編輯/etc/nova/nova.conf檔案並完成下面的操作

vim /etc/nova/nova.conf 

[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:[email protected]
my_ip = 192.168.124.27
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
# ...
connection = mysql+pymysql://nova:[email protected]/nova_api
[database]
# ...
connection = mysql+pymysql://nova:[email protected]/nova
[api]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS
[vnc]
enabled = true
# ...
server_listen = $my_ip
server_proxyclient_address = $my_ip
[glance]
# ...
api_servers = http://controller:9292
[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp
[placement]
# ...
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:35357/v3
username = placement
password = PLACEMENT_PASS
# 新建一個配置檔案
vim /etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>

4.15 重啟http服務

systemctl restart httpd

4.16 同步資料庫

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
nova-manage cell_v2 list_cells

4.17 啟動 Nova 服務並將其設定為隨系統啟動

systemctl start openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl enable openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service