(1)概述
明確1:'計算節點可以有多個',本次實驗環境就部署一臺
明確2:'每一個計算節點就是一臺kvm的物理宿主機'
(2)nova服務組件
nova-api 服務 --->'接收和響應'來自'外部用戶'的計算API請求-->類似公司的前臺,'外部API請求的入口'-->'然後'向內部的nova組件'小第'來幹活
nova-api-metadata 服務 --->'作用:查虛擬機的配置信息';接受'來自虛擬機'發送的'元數據請求'
nova-compute 服務 --->'核心:管理虛擬機的生命週期;支持多種虛擬化技術;通常用'kvm'控制虛擬機,其他基本不用' -->'核心'
支持多種虛擬化技術:'kvm,xen,vmware'
#######特點##########
一個持續工作的'守護進程',通過'Hypervior'的API來創建和銷燬虛擬機實例。例如:
XenServer/XCP 的 XenAPI
KVM 或 QEMU 的 libvirt
VMware 的 VMwareAPI
基本原理:守護進程同意了來自隊列的動作請求,'轉換'爲一系列的系統命令如啓動一個KVM實例',然後到數據庫中'更新它的狀態'
################# 分割線
'問題':10個nova-compute的計算節點,現在nova-api接受一個請求,創建一個虛擬機,這個任務最終交給哪個nova-computer?涉及'分配問題'
nova-scheduler 調度服務 --->'拿到'一個來自隊列請求虛擬機實例,然後'決定'那臺計算服務器主機來運行它
說明:根據10個節點平時彙報的'剩餘CPU、磁盤、內存信息',挑出一個'最閒的'
'篩選規則是什麼?'
nova-computer'每隔一分鐘'上報自身'剩餘資源'情況-->nova-schedlue
################# 分割線
nova-conductor 模塊 --->專門'幫nova-compute服務'連接數據庫;相當於'中間層';nova-coputer不需要配置數據庫的連接信息,數據庫的信息只會配置'控制節點上'
'原因':早期直接用nova-compute連接數據庫;如果有100臺computer節點,'每臺都要配置'數據庫的地址和賬戶密碼,其中一臺如果'被黑了',刪除nova數據庫,所有數據'全部丟失'
'注意':不要將它部署在運行'nova-compute'服務的主機節點上'
################# 分割線
nova-cert 模塊 --->'爲了安全可以配置ssl證書';服務器守護進程向Nova Cert服務提供X509證書,私有云不需要啓用
################# 分割線
nova-network worker 守護進程 --->'從隊列中接受網絡任務,並且操作網絡';執行任務例如創建橋接的接口或者改變IPtables的規則;'已棄用'
備註:'早期是沒有neutron網絡服務的';把'功能保留(兼老版本容)';老版本可能沒有neturn
################# 分割線
nova-consoleauth 守護進程 --->'配合nova-novncproxy使用'
nova-novncproxy --->'提供vnc的控制檯;不是任何人都能訪問;訪問者必須帶一個token才能訪問控制檯;nova-consoleauth提供token'
'功能':提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持基於'客戶端'瀏覽器的novnc客戶端;'可以通過web界面操作虛擬機'
################# 分割線 --->'下面的不需要'
nova-spicehtml5proxy 守護進程
提供一個代理,用於訪問正在運行的實例,通過 'SPICE' 協議,支持基於瀏覽器的 HTML5 客戶端。
nova-xvpvncproxy 守護進程
提供一個代理,用於訪問正在運行的實例,通過 'VNC' 協議,支持OpenStack特定的'Java'客戶端
nova-cert 守護進程
X509 證書
(3)創庫授權
mysql -u root -p
'創'建 nova_api 和 nova 數據'庫'
CREATE DATABASE nova_api;
CREATE DATABASE nova;
對數據庫進行正確的'授權'
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';
注意:記住'該密碼' --> 'NOVA_DBPASS'
獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限
. admin-openrc
#########################創建服務證書#########################
(1)創建nova用戶
openstack user create --domain default --password NOVA_PASS nova
'記住該密碼'
(2)給 nova 用戶添加 admin 角色
openstack role add --project service --user nova admin
(3)創建 nova 服務實體
openstack service create --name nova \
--description "OpenStack Compute" compute
#########################創建 Compute 服務 API 端點#########################
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s
############
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
############
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
'public' -->'internal' -->'admin'
#########################安裝nova組件#########################
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler
'安裝軟件包'
#########################編輯 etc/nova/nova.conf#########################
'啓用兩個api,就會監聽兩個api的地址'
enabled_apis = osapi_compute('8774'),metadata('8775')
'連接之前創建的兩個數據庫'
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
'openstack支持多種消息隊列;並且是跨節點通信,需要用到消息隊列'
[DEFAULT]
...
rpc_backend = rabbit --->指定使用的'消息隊列','由於跨節點通信,完成數據的一致性'
[oslo_messaging_rabbit]
...
rabbit_host = controller --->'消息隊列安裝在哪'
rabbit_userid = openstack --->'消息隊列的賬戶和密碼'
rabbit_password = RABBIT_PASS
'連接keystone的配置;用到nova的賬戶和密碼'
[DEFAULT]
...
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
'控制節點的ip' -->可以以'變量'或者明文的形式
[DEFAULT]
...
my_ip = 10.0.0.11
'禁用nova自帶的網絡;使用neutron網絡';'禁用掉nova計算服務內置的防火牆服務'
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
'說明:nova.virt.firewall.NoopFirewallDriver-->是一個python包的路徑'
'python包的位置-->裏面的一個方法'(函數)';pass就是0的含義,功能禁用'
ls /lb64/python2.7/site-packages/nova/virt/firewall
#################
'vnc的連接地址;通過vnc的web界面進行連接'
[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
#################
'配置glance服務地址'
原因:nova在'創建虛擬機'的時候首先需要'下載鏡像模板','鏡像模板哪裏提供','知道glance api地址'
[glance]
...
api_servers = http://controller:9292
#################
'配置鎖路徑;一個任務沒有完成,就創建一個鎖文件,直到完成才把鎖文件刪除,在這期間不會重複執行用戶的指令'
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
'舉例':創建虛擬機,在虛機沒有完全創建完之前,會產生一個鎖文件,一直到虛擬創建完成,這個鎖文件刪除,如果中間又收到同樣的任務,則'拒絕'
同步Computer數據庫
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
開機啓動
systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
報錯解決
2020-05-05 22:20:50.519 22552 ERROR oslo_service.service AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism 'AMQPLAIN'. For details see the broker logfile.
'schedule和/var/log/nova/nova-consoleauth.log的日誌' -->rabbitmp的密碼問題
(4)查看computer服務的狀態
openstack computer service list
# 是否都'處於up狀態' -->3個,表示控制節點安裝ok
'實現邏輯':
1)在shell腳本的'第一行','判斷鎖文件'是否存在,如果存在說明腳本正在執行;如果'重複執行就退出'
2)一旦執行完,'鎖文件刪除'
3)'避免腳本重複執行產生的問題;是一種規範'
(5)安裝和配置計算節點
安裝 -->配置 -->啓動 ('沒有數據庫的操作')
novncproxy_base_url = http://controller:6080/vnc_auto.html
含義:'控制節點開啓了一個6080端口',利用這個端口反向代理到'計算節點'-->通過vnc連接console'虛擬機控制檯'
鎖文件作用:'防止腳本或任務被重複執行'
判斷:計算節點硬件是否支持虛擬化
egrep '(vmx|svm)' /proc/cpuinfo
'Intel和AMD中的一種'
說明:如果這個命令返回了 one or greater 的值,那麼'你的計算節點支持硬件加速且不需要額外的配置'
注意:'計算節點不支持硬件加速策略'
######################
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
注意:'如果其它服務正常,這個服務器啓動速度很快'
# 啓動不了的話'看日誌'
'5672-->定位到消息隊列;模擬了消息隊列關閉的情況'
'AMQP :高級消息隊列協議提示-->'消息隊列掛了'