OpenStack的部署T版(五)——Nova组件
目錄
- 一、Nova計算服務概念
- Nova系統架構
- 二、Nova組件介紹
- 1、API
- 2、Scheduler調度器
- Nova調度器的類型
- 過濾器
- 權重(weight)
- 3、Compute組件
- Compute組件功能
- 4、Conductor組件
- 三、OpenStack-NOVA組件部署
- 1、在CT控制節點上配置 Nova 服務
- 創建nova數據庫,并執行授權操作
- 創建用戶、修改配置文件
- 2、在C1、C2計算節點上配置 Nova 服務
- 安裝nova-compute組件修改配置文件
- 3、CT節點后續操作
一、Nova計算服務概念
- 計算服務是openstack最核心的服務之一,負責維護和管理云環境的計算資源,它在openstack項目中代號是nova。
- Nova自身并沒有提供任何虛擬化能力,它提供計算服務,使用不同的虛擬化驅動來與底層支持的Hypervisor(虛擬機管理器)進行交互。所有的計算實例虛擬服務器)由Nova進行生命周期的調度管理(啟動、掛起、停止、刪除等)
- Nova需要keystone、glance、neutron、cinder和swift等其他服務的支持,能與這些服務集成,實現如加密磁盤、裸金屬計算實例等。
Nova系統架構
- DB:用于數據存儲的sql數據庫。
- API:用于接收HTTP請求、轉換命令、通過消息隊列或HTiP與其他組件通信的nova組件。
- Scheduler:用于決定哪臺計算節點承載計算實例的nova調度器。
- Network:管理IP轉發、網橋或虛擬局域網的nova網絡組件。
- Compute:管理虛擬機管理器與虛擬機之間通信的nova計算組件。
- Conductor:處理需要協調(構建虛擬機或調整虛擬機大小)的請求,或者處理對象轉換
二、Nova組件介紹
1、API
- API是客戶訪問nova的http接口,它由nova-api服務實現,nova-api服務接收和響應來自最終用戶的計算api請求。作為openstack對外服務的最主要接口, nova-api提供了一個集中的可以查詢所有api的端點。
- 所有對nova的請求都首先由nova-api處理。API提供REST標準調用服務,便于與第三方系統集成。
- 最終用戶不會直接改送RESTful API請求,而是通過openstack命令行、dashbord和其他需要跟nova交換的組件來使用這些API。
- 只要跟虛擬機生命周期相關的操作,nova-api都可以響應。
nova-api對接收到的HTTP API請求做以下處理:
1)檢查客戶端傳入的參數是否合法有效
2)調用nova其他服務來處理客戶端HTTP請求
3)格式化nova其他子服務返回結果并返回給客戶端
nova-api是外部訪問并使用nova提供的各種服務的唯一途徑,也是客戶端和nova之間的中間層
2、Scheduler調度器
- Scheduler可譯為調度器,由nova-scheduler服務實現,主要解決的是如何選擇在哪個計算節點上啟動實例的問題。它可以應用多種規則,如果考慮內存使用率、cpu負載率、cpu構架( intel/amd)等多種因素,根據一定的算法,確定虛擬機實例能夠運行在哪一臺計算服務器上。Nova-scheduler服務會從隊列中接收一個虛擬機實例的請求,通過讀取數據庫的內容,從可用資源池中選擇最合適的計算節點來創建新的虛擬機實例。
- 創建虛擬機實例時,用戶會提出資源需求,如cpu、內存、磁盤各需要多少,openstack講這些需求定義在實例類型中,用戶只需指定使用哪個實例類型就可以了
Nova調度器的類型
- 隨機調度器(chance scheduler) :從所有正常運行nova-compute服務的節點中隨機選擇。
- 過濾器調度器(filter scheduler):根據指定的過濾條件以及權重選擇最佳的計算節點,Filter又稱為篩選器
- 調度器調度過程:主要分兩個階段
- 通過指定的過濾器選擇滿足條件的計算節點,比如內存使用率小于50%,可以使用多個過濾器依次進行過濾。
- 對過濾之后的主機列表進行權重計算并排序,選擇最優的計算節點來創建虛擬機實例。
- 緩存調度器(caching scheduler):可看作隨機調度器的一種特殊類型,在隨機調度的基礎上將主機資源信息緩存在本地內存中,然后通過后臺的定時任務定時從數據庫中獲取最新的主機資源信息。
過濾器
- 當過濾調度器需要執行調度操作時,會讓過濾器對計算節點進行判斷,返回True或False。
在配置文件/etc/nova/nova.conf中 - scheduler_available_filters選項用于配置可用過濾器,默認是所有nova自帶的過濾器都可以用于過濾作用
- 另外還有一個選項scheduler_ default_ filters用于指定,nova-scheduler服務真正使用的過濾器
過濾調度器將按照下列順序依次過濾
RetryFilter(再審過濾器)
主要作用是過濾掉之前已經調度過的節點。如A、B、C都通過了過濾,A權重最大被選中執行操作,由于某種原因,操作在A上失敗了。Nova-filter將重新執行過濾操作,那么此時A就被會RetryFilter直接排除,以免再次失敗
AvailabilityZoneFilter(可用區域過濾器)
為提高容災性并提供隔離服務,可以將計算節點劃分到不同的可用區域中。Openstack默認有一個命名為nova的可用區域,所有的計算節點初始是放在nova區域中的。用戶可以根據需要創建自己的一個可用區域。創建實例時,需要指定將實例部署在哪個可用區域中。Nova-scheduler執行過濾操作時,會使用AvailabilityZoneFilter不屬于指定可用區域計算節點過濾掉
RamFilter(內存過濾器)
根據可用內存來調度虛擬機創建,將不能滿足實例類型內存需求的計算節點過濾掉,但為了提高系統資源利用率,Openstack在計算節點的可用內存時允許超過實際內存大小超過的程度是通過nova.conf配置文件中
ram_allocation_ratio參數來控制的,默認值是1.5。
Vi letc/nova/nova.conf
Ram_allocation_ratio=1.5
DiskFilter(硬盤調度器)
根據磁盤空間來調度虛擬機創建,將不能滿足類型磁盤需求的計算節點過濾掉。破盤同樣允許超量超量值可修改nova.conf中disk_allocation_ratio參數控制,默認值是1.0
Vi letc/nova/nova.conf
disk_allocation_ratio=1.0
CoreFilter(核心過濾器)
根據可用CPU核心來調度虛擬機創建,將不能滿足實例類型vCPU需求的計算節點過濾掉。vCPU也允許超量,超量值是通過修改nova.conf中
cpu_allocation_ratio參數控制,默認值是16。
Vi letc/nova/nova.conf
cpu_allocation_ratio=16.0
ComputeFilter(計算過濾器)
保證只有nova-compute服務正常工作的計算節點才能被nova-scheduler調度,它是必選的過濾器。
ComputeCapablilitiesFilter (計算能力過濾器)
根據計算節點的特性來過濾,如x86_ 64和ARM架構的不同節點,將實例分別進行過濾
ImagePropertiesFilter(鏡像屬性過濾器)
根據所選鏡像的屬性來篩選匹配的計算節點。通過元數據來指定其屬性。如希望鏡像只運行在KVM的Hypervisor上,可以通過Hypervisor Type屬性來指定。
ServerGroupAntiAffinityFilter(服務器組反親和性過濾器)
要求盡量將實例分散部署到不同的節點上。例如有3個實例s1、s2、s3, 3個計算節點A、B、C。具體操作如下:
創建一個anti-affinit策略的服務器組
openstack server group create -policy antiaffinity group-1
創建三個實例,將它們放入group-1服務器組
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s1
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s2
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s3
ServerGroupAffinityFilter(服務器組親和性過濾器)
與反親和性過濾器相反,此過濾器盡量將實例部署到同-個計算節點上
權重(weight)
- nova-scheduler服務可以使用多個過濾器依次進行過濾,過濾之后的節點再通過計算權重選出能夠部署實例的節點。
- 注意:
- 所有權重位于novalschedulerlweights目錄下。目前默認實現是RAMweighter,根據計算節點空閑的內存量計算權重值,空閑越多,權重越大,實例將被部署到當前空閑內存最多的計算節點上
3、Compute組件
- Nova-compute在計算節點上運行,負責管理節點上的實例。通常一個主機運行一個Nova-compute服務,一個實例部署在哪個可用的主機上取決于調度算法。OpenStack對實例的操作,最后都是提交給Nova-compute來完成。
- Nova-compute可分為兩類,一類是定向openstack報告計算節點的狀態,另一類是實現實例生命周期的管理。
通過Driver (驅動)架構支持多種Hypervisor虛擬機管理器
- 面對多種Hypervisor(虛擬層),nova-compute為這些Hypervisor定義統一的接口。
- Hypervisor只需要實現這些接口,就可以Driver的形式即插即用到OpenStack系統中
Compute組件功能
- 定期向OpenStack 報告計算節點的狀態
- 每隔一段時間,nova-compute就會報告當前計算節點的資源使用情況和nova-compute服務狀態。
- nova-compute是通過Hypervisor的驅動獲取這些信息的。
- 實現虛擬機實例生命周期的管理
- OpenStack對虛擬機實例最主要的操作都是通過nova-compute實現的。
創建、關閉、重啟、掛起、恢復、中止、調整大小遷移、快照 - 以實例創建為例來說明nova-compute的實現過程。
(1)為實例準備資源。
(2)創建實例的鏡像文件。
(3)創建實例的XML定義文件。
(4)創建虛擬網絡并啟動虛擬機。
- OpenStack對虛擬機實例最主要的操作都是通過nova-compute實現的。
4、Conductor組件
- 由nova-conductor模塊實現,旨在為數據庫的訪問提供一層安全保障。
Nova-conductor作為nova-compute服務與數據庫之間交互的中介,避免了直接訪問由nova-compute服務創建對接數據庫。 - Nova-compute訪問數據庫的全部操作都改到nova-conductor中,nova-conductor作為對數據庫操作的一個代理,而且nova-conductor是部署在控制節點上的
- Nova-conductor 有助于提高數據庫的訪問性能,nova-compute可以創建多個線程使用遠程過程調用(RPC)訪問nova-conductor。
- 在一個大規模的openstack部署環境里,管理員可以通過增加nova-conductor的數量來應付月益增長的計算節點對數據庫的訪問量
三、OpenStack-NOVA組件部署
配置接:OpenStack的部署T版(四)——Placement組件
Nova 計算服務為 OpenStack 云環境提供了計算能力,相關環境需要在控制節點和計算節點分別進行部署。
CT VM:192.168.100.10 NAT:192.168.172.70
?nova-api(nova主服務)
?nova-scheduler(nova調度服務)
?nova-condutor(nova數據庫服務,提供數據庫訪問)
?nova-novncproxy(nova的vnc服務,提供實例的控制臺)
C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90
nova-compute(nova計算服務)
1、在CT控制節點上配置 Nova 服務
CT VM:192.168.100.10 NAT:192.168.172.70
創建nova數據庫,并執行授權操作
mysql -uroot -pCREATE DATABASE nova_api; 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';CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';CREATE DATABASE nova_cell0; 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'; flush privileges; exit創建用戶、修改配置文件
創建nova用戶 openstack user create --domain default --password NOVA_PASS nova把nova用戶添加到service項目,擁有admin權限 openstack role add --project service --user nova admin創建nova服務 openstack service create --name nova --description "OpenStack Compute" compute給Nova服務關聯endpoint(端點)
openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1安裝nova組件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler修改nova配置文件(nova.conf)
cp -a /etc/nova/nova.conf{,.bak} grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf添加/etc/nova/nova.conf配置
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.10 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement openstack-config --set /etc/nova/nova.conf api auth_strategy keystone openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS openstack-config --set /etc/nova/nova.conf vnc enabled true openstack-config --set /etc/nova/nova.conf vnc server_listen '$my_ip' openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip' openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp openstack-config --set /etc/nova/nova.conf placement region_name RegionOne openstack-config --set /etc/nova/nova.conf placement project_domain_name Default openstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type password openstack-config --set /etc/nova/nova.conf placement user_domain_name Default openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3 openstack-config --set /etc/nova/nova.conf placement username placement openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
初始化數據庫
初始化nova_api數據庫 su -s /bin/sh -c "nova-manage api_db sync" nova注冊cell0數據庫;nova服務內部把資源劃分到不同的cell中,把計算節點劃分到不同的cell中;openstack內部基于cell把計算節點進行邏輯上的分組 su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova創建cell1單元格 su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova初始化nova數據庫;可以通過 /var/log/nova/nova-manage.log 日志判斷是否初始化成功 su -s /bin/sh -c "nova-manage db sync" nova驗證cell0和cell1是否注冊成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova啟動Nova服務
systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxysystemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy檢查nova服務是否啟動
netstat -tnlup|egrep '8774|8775' curl http://ct:87742、在C1、C2計算節點上配置 Nova 服務
C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90
安裝nova-compute組件修改配置文件
yum -y install openstack-nova-compute cp -a /etc/nova/nova.conf{,.bak} grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf注意:下列命令中第三行需要修改當前節點的IP地址(C1:192.168.100.20 C2:192.168.100.30)
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.30 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver openstack-config --set /etc/nova/nova.conf api auth_strategy keystone openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS openstack-config --set /etc/nova/nova.conf vnc enabled true openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0 openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip' openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://ct:6080/vnc_auto.html openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp openstack-config --set /etc/nova/nova.conf placement region_name RegionOne openstack-config --set /etc/nova/nova.conf placement project_domain_name Default openstack-config --set /etc/nova/nova.conf placement project_name service openstack-config --set /etc/nova/nova.conf placement auth_type password openstack-config --set /etc/nova/nova.conf placement user_domain_name Default openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3 openstack-config --set /etc/nova/nova.conf placement username placement openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu開啟 Nova 計算服務并配置開機啟動
systemcontrollerl start libvirtd.service openstack-nova-compute.service systemcontrollerl enable libvirtd.service openstack-nova-compute.service3、CT節點后續操作
CT VM:192.168.100.10 NAT:192.168.172.70
查看compute節點是否注冊到controller上,通過消息隊列;需要在controller節點執行
openstack compute service list --service nova-compute發現計算節點
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova默認每次添加個計算節點,在控制端就需要執行一次掃描,這樣會很麻煩,所以可以修改控制端nova的主配置文件
vim /etc/nova/nova.conf [scheduler] discover_hosts_in_cells_interval = 300systemctl restart openstack-nova-api.service
驗證計算節點服務
檢查 nova 的各個服務是否都是正常,以及 compute 服務是否注冊成功 openstack compute service list 查看各個組件的 api 是否正常 openstack catalog list 查看是否能夠拿到鏡像 openstack image list 查看cell的api和placement的api是否正常,只要其中一個有誤,后期無法創建虛擬機 nova-status upgrade check總結
以上是生活随笔為你收集整理的OpenStack的部署T版(五)——Nova组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存超频攻略:三步曲提升电脑性能
- 下一篇: 内存频率高,电脑性能提升三部曲