linux雲計算Openstack創建虛擬機步驟2(nova組件 控制節點和計算節點)


Nova服務 組件介紹

1.Nova服務部署 工作流程

nova 計算服務(經典)一 套控制器openstack 框架

 

nova- api: 接收處理外界實例相關請求(創建實例) (os cpu網絡等 配置 )

把實例元數據寫到nova數據庫

請求放到消息隊列(消息隊列實現異步通信 )

nova-scheduler: 調度-- 選擇最合適的計算節點來創建實例

nova- compute: 創建實例(具體干活) -- hypervisor來管理一 driver

nova-conductor: 對接nova數據庫  computer通過消息隊列連接到數據庫

 

openstack 分布式

nova 分層各司其職

公司

 

 

 

 

 

2.工作流程 6步

 

 

 

 

簡單來說

1.用戶發起請求

2.Apl請求發送消息隊列  進行調度scheduler(Apl接受請求,寫到數據庫中)

3.調度結果放到隊列中  分配到主機上的任務  分配到哪台機器哪台機器取這個調度結果消息

4.消息隊列通過conductor從數據庫中取消息

5.取完之后將信息通過消息隊列發送到computer主機上

 

 

1.客戶(可以是OpenStack最終用戶,也可以是其他程序)向API(nova-api)發送請求:“幫我創建一個虛機”;

2.API對請求做一些必要處理后,向Messaging(RabbitMQ)發送了一條消息:“讓Scheduler創建一個虛機”;

3.Scheduler(nova-scheduler)從Messaging獲取到API發給它的消息,然后執行調度算法,從若干計算節點中選出節點 A ;

4.Scheduler向Messaging發送了一條消息:“在計算節點 A 上創建這個虛機”

5.計算節點 A 的Compute(nova-compute)從Messaging中獲取到Scheduler發給它的消息,然后在本節點的Hypervisor上啟動虛機;

6.在虛機創建的過程中,Compute如果需要查詢或更新數據庫信息,會通過Messaging向Conductor(nova-conductor)發送消息,Conductor負責數據庫訪問。

 

2.Openstack 通用設計思路   Nova組件介紹

1.設計思路

Openstack設計思路

API前端服務

Scheduler調度服務

Worker工作服務

Driver框架

 

2.組件介紹

Nova由很多子服務組成,同時OpenStack是一個分布式系統,對於Nova這些服務會部署在兩類節點上,計算節點和控制節點,

計算節點上安裝了Hypervisor,上面運行虛擬機,只有nova-compute需要放在計算節點上,其他子服務則是放在控制節點上的。

lnova-api

lnova-api-metadata

lnova-compute

lnova-placement-api

lnova-scheduler

lnova-conductor

lnova-consoleauth

lnova-novncproxy

lThe queue

lSQL database

3.Nova支持 的hypervisor

nova-compute運行在計算節點上,通過插件形式對Hypervisor進行管理,當前的版本(Ocata),對各種主流的虛擬化平台都提供了支持,

典型地通過XenAPI/vCenter API/Libvirt等所提供的插件接口執行虛擬機的創建、終止、遷移等生命周期管理。

 

 

 

 

4.Nova操作指令

常規操作
常規操作中,Launch、Start、Reboot、Shut Off 和 Terminate 都很好理解。

 

Resize
通過應用不同的 flavor 分配給 instance 的資源。

 

Lock/Unlock
可以防止對 instance 的誤操作。

 

Pause/Suspend/Resume
暫停當前 instance,並在以后恢復。 Pause 和 Suspend 的區別在於 Pause 將 instance 的運行狀態保存在計算節點的內存中,而 Suspend 保存在磁盤上。

Pause 的優點是 Resume 速度比 Suspend 快;

缺點是如果計算節點因某種原因重啟,內存數據丟失,就無法 Resume 了,而 Suspend 則沒有這個問題。

 

Snapshot
備份 instance 到 Glance。 Snapshot 生成的 image 可用於故障恢復,或者以此為模板部署新的 instance。

 

 

3.Nova控制節點 服務案例 做一個主鍵之前  先建立數據庫

1.Nova創建三個數據庫  授權

mysql -u root -p123登錄數據庫

 

CREATE DATABASE nova_api;創建三個庫

CREATE DATABASE nova;

CREATE DATABASE nova_cell0;Cell單元格的意思

sql數據庫和消息隊列壓力最大

 

 

 

 

 

 

授權每個庫三個權

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'controller'  IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%'  IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'  IDENTIFIED BY '123';

 

 

 

 

 

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller'  IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'  IDENTIFIED BY '123';

 

 

 

 

 

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'controllert' IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%'  IDENTIFIED BY '123';

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '123';

 

 

 

 

 

 

2.注冊keystone消息創建nova用戶綁定角色 暴露url  端口為8774

 

創建用戶

. admin.sh

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

 

openstack role add --project service --user nova admin綁定admin角色

 

 

 

 

 

注冊service服務  暴露出url 端口為 8774

注意 --符號問題

openstack service create --name nova  --description "OpenStack Compute" compute注冊服務service

 

 

 

 

 

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

 

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

 

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

 

 

 

 

 

 

3.再創建placement用戶  添加角色   注冊服務  暴露endpoint 的url   端口為8778

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

 

openstack role add --project service --user placement adminplacement創建角色 為admin

 

openstack service create --name placement --description "Placement API" placement   注冊服務

 

 

 

 

 

 

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

注意 :controlle可暴露出去寫公網IP也可以

 

 

 

 

 

 

 

4.安裝軟件包 修改配置文件/etc/nova/nova.conf  (修改9處)

yum install openstack-nova-api openstack-nova-conductor   openstack-nova-console openstack-nova-novncproxy   openstack-nova-scheduler openstack-nova-placement-api-y安裝五個軟件包

 

vim /etc/nova/nova.conf

1.

[DEFAULT]

enabled_apis = osapi_compute,metadata

transport_url = rabbit://openstack:123@controller

my_ip = 192.168.20.40控制節點IP

use_neutron = True啟用neutron

firewall_driver = nova.virt.firewall.NoopFirewallDriver

 

 

 

 

 

2.

[api_database]api庫

connection = mysql+pymysql://nova:123@controller/nova_api

 

 

 

 

 

3.

[database]    主庫

connection = mysql+pymysql://nova:123@controller/nova

 

 

 

 

 

4.

[api]指定認證方式

auth_strategy = keystone

 

 

 

 

 

5.

[keystone_authtoken]認證

auth_url = http://controller:5000/v3

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = nova

password = 123

 

 

 

 

 

6.

[vnc]

enabled = true開啟vnc

server_listen = $my_ip監聽控制節點我的IP

server_proxyclient_address = $my_ip

 

 

 

 

 

7.

[glance]鏡像地址

api_servers = http://controller:9292

 

 

 

 

 

8.

[oslo_concurrency]鎖路徑這是關於文件鎖的機制

lock_path = /var/lib/nova/tmp

 

 

 

 

 

9.

[placement]調度服務user對應的信息

os_region_name = RegionOne

project_domain_name = Default

project_name = service

auth_type = password

user_domain_name = Default

auth_url = http://controller:5000/v3

username = placement

password = 123

 

 

 

 

 

 

 

5.因為安裝包packaging有bug  修復bug 修改httpd的配置文件(增加一個標簽對)

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>

 

systemctl restart httpd

 

 

 

 

6.填充數據庫 注冊cell0  和創建cell1

 

su -s /bin/sh -c "nova-manage api_db sync" nova填充api數據庫

 

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova注冊cello0

su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova創建cell1

 

su -s /bin/sh -c "nova-manage db sync" nova填充nova數據庫

 

 

 

 

 

 

nova-manage cell_v2 list_cells驗證查看列表

 

 

 

 

 

7.啟動這五個服務 查看狀態 (服務出錯解決方法)

啟動服務  開機自啟  rabbitmqctl服務啟動失敗解決方法

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

 

查看狀態

systemctl status openstack-nova-api.service   openstack-nova-consoleauth.service openstack-nova-scheduler.service   openstack-nova-conductor.service openstack-nova-novncproxy.service

 

systemctl status openstack-nova-api.service   openstack-nova-consoleauth.service openstack-nova-scheduler.service   openstack-nova-conductor.service openstack-nova-novncproxy.service | grep "running" | wc -l統計正在運行的服務

 

 

8.openstack-nova-scheduler服務出錯  因為缺少openstack的rabbitmqctl 用戶 解決方法

假如說控制節點報錯啟動五個服務 其中openstack-nova-consoleauth 和 openstack-nova-scheduler  服務起不來

 

 

 

 

方法 查看日志

cd /var/log/nova/

tail -f nova-scheduler.log 意思是缺少用戶

 

 

 

 

 

 

rabbitmqctl list_users此時在控制節點查看rabbitmq用戶

 

 

 

 

發現之前創建的openstack用戶不見了

 

rabbitmqctl add_user openstack 123重新添加openstack用戶

rabbitmqctl set_permissions openstack “." ".” “.*”賦予權限

systemctl start rabbitmq-server.service啟動服務

 

 

 

 

 

 

再次查看狀態

systemctl status openstack-nova-novncproxy

 

 

 

 

 

4.計算節點上的nova部署 安裝nova軟件包,修改配置啟動服務,控制節點驗證注意關閉防火牆selinux

1.檢測 控制節點的user endpoint 鏡像和service列表(四個列表)

. admin.sh

openstack user list

openstack endpoint list

 

 

 

 

 

 

 

 

查看鏡像  service

openstack image list

openstack compute service list未做實驗的computer 的service

 

 

 

 

這個是做完計算節點后驗證出來的新的computer

 

 

 

 

2.計算節點下載安裝nova包 修改yum源,下載

 

yum install openstack-nova-compute -y下載安裝包會發現少這個安裝包

 

 

 

 

vim /etc/yum.repos.d/CentOS-Base.repo再原有的yum配置里面增加virt鏡像包

yum makecache :q建立

 

 

 

 

[virt]

name=virt

enable=1

gpgcheck=0

baseurl=http://mirrors.aliyun.com/centos/7.7.1908/virt/x86_64/kvm-common/

 

3.修改計算節點 nova主配置文件(6處)

vim /etc/nova/nova.conf

 

1.

[DEFAULT]

enabled_apis = osapi_compute,metadata

transport_url = rabbit://openstack:123@controller

my_ip = 192.168.20.11

firewall_driver = nova.virt.firewall.NoopFirewallDriver

 

 

 

 

 

2.

[api]

auth_strategy = keystone

 

 

 

 

 

3.

[keystone_authtoken]

auth_url = http://controller:5000/v3

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = nova

password = 123

 

 

 

 

 

 

4.

[vnc]

enabled = True

server_listen = 0.0.0.0

server_proxyclient_address = $my_ip

novncproxy_base_url = http://controller:6080/vnc_auto.html

 

 

 

 

 

 

5.

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

 

 

 

 

 

 

6.

[placement]

os_region_name = RegionOne

project_domain_name = Default

project_name = service

auth_type = password

user_domain_name = Default

auth_url = http://controller:5000/v3

username = placement

password = 123

 

 

 

 

 

4.確定計算節點是否支持虛擬機硬件加速 若為0,修改配置文件 啟動服務

 

egrep -c '(vmx|svm)' /proc/cpuinfo確定計算節點是否支持虛擬機的硬件加速

如果此命令返回一個或更大的值,則compute節點支持硬件加速,這通常不需要額外的配置。

如果此命令返回的值為0,則計算節點不支持硬件加速,必須配置libvirt來使用QEMU而不是KVM。

 

2.編輯/etc/nova/nova.conf文件中的[libvirt]部分

vim /etc/nova/nova.conf

[libvirt]

virt_type = qemu

 

 

啟動服務看selinux狀態,主機名

 

systemctl enable libvirtd.service openstack-nova-compute.service

systemctl start libvirtd.service openstack-nova-compute.service

 

 

check /var/log/nova/nova-compute.log如果報錯查看

 

 

 

 

 

5.控制節點上  填充數據庫 將計算節點添加到cell數據庫操作中

將計算節點添加到cell數據庫操作中

. admin.sh

openstack compute service list --service nova-compute

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova填充庫

來源的管理憑據,以啟用只管理的CLI命令,然后確認在數據庫中有計算主機:

 

 

 

 

 

假如  添加新的計算節點時,必須在控制器節點上運行nova-manage cell_v2 discover_hosts來注冊這些新的計

算節點。或者,可以在/etc/nova/nova.conf中設置一個適當的間隔

 

 

 

 

6.驗證  控制節點上 查看computer service和catalog和image列表 查看更新

. admin.sh

 

openstack compute service list

 

 

 

 

 

openstack catalog list

 

 

 

 

 

 

openstack image list

 

 

 

 

 

nova-status upgrade check查看更新

 

 

 

 

 

 

 

 

4.計算服務nova各子組件工作詳解

nova-api

nova-api 是整個 Nova 組件的門戶,所有對 Nova 的請求都首先由 nova-api 處理。nova-api 向外界暴露若干 HTTP REST API 接口, 在 keystone 中可以查詢 nova-api 的 endponits。

客戶端就可以將請求發送到 endponits 指定的地址,向 nova-api 請求操作。 當然,作為最終用戶的我們不會直接發送 Rest AP I請求。 OpenStack CLI,Dashboard 和其他需要跟 Nova 交換的組件會使用這些 API。

 

 

 

 

nova-conductor
nova-compute 需要獲取和更新數據庫中 instance 的信息。但 nova-compute 並不會直接訪問數據庫,而是通過 nova-conductor 實現數據的訪問。

這樣做有兩個顯著好處:

1.更高的系統安全性

2.更好的系統伸縮性

 

nova-scheduler

nova-scheduler 如何選擇計算節點

nova-scheduler 的調度機制和實現方法:即解決如何選擇在哪個計算節點上啟動 instance 的問題。


創建 Instance 時,用戶會提出資源需求,例如 CPU、內存、磁盤各需要多少。OpenStack 將這些需求定義在 flavor 中,用戶只需要指定用哪個 flavor 就可以了。

 

 

 

可用的 flavor 在 System->Flavors 中管理。

 

 

 

Flavor 主要定義了 VCPU,RAM,DISK 和 Metadata 這四類。 nova-scheduler 會按照 flavor 去選擇合適的計算節點。

 

Filter scheduler

Filter scheduler 是 nova-scheduler 默認的調度器,調度過程分為兩步:

1.通過過濾器(filter)選擇滿足條件的計算節點(運行 nova-compute)

2.通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建 Instance。

 

RetryFilter

RetryFilter 的作用是刷掉之前已經調度過的節點。

 

AvailabilityZoneFilter

為提高容災性和提供隔離服務,可以將計算節點划分到不同的Availability Zone中。例如把一個機架上的機器划分在一個 Availability Zone 中。 OpenStack 默認有一個命名為 “Nova” 的 Availability Zone,所有的計算節點初始都是放在 “Nova” 中。 用戶可根據需要創建自己的 Availability Zone。

 

 

 

 

 

 

RamFilter

RamFilter 將不能滿足 flavor 內存需求的計算節點過濾掉。

 

DiskFilter

DiskFilter 將不能滿足 flavor 磁盤需求的計算節點過濾掉。

CoreFilter

CoreFilter 將不能滿足 flavor vCPU 需求的計算節點過濾掉。

 

nova-compute

nova-compute 的功能可以分為兩類:

1.定時向 OpenStack 報告計算節點的狀態

2.實現 instance 生命周期的管理

 

定期向 OpenStack 報告計算節點的狀態

 

nova-scheduler 的很多 Filter 是根據算節點的資源使用情況進行過濾的。比如 RamFilter 要檢查計算節點當前可以的內存量;CoreFilter 檢查可用的 vCPU 數量;DiskFilter 則會檢查可用的磁盤空間。

 

那么:OpenStack 是如何得知每個計算節點的這些信息呢?

 

nova-compute 會定期向 OpenStack 報告。從 nova-compute 的日志 /var/log/nova/nova-compute.log 可以發現: 每隔一段時間,nova-compute 就會報告當前計算節點的資源使用情況和 nova-compute 服務狀態。

 

 

 


nova-compute 是如何獲得當前計算節點的資源使用信息的?

要得到計算節點的資源使用詳細情況,需要知道當前節點上所有 instance 的資源占用信息。 這些信息誰最清楚? 當然是 Hypervisor。

 

nova-compute 可以通過 Hypervisor 的 driver 拿到這些信息。舉例來說,在我們的實驗環境下 Hypervisor 是 KVM,用的 Driver 是 LibvirtDriver。 LibvirtDriver 可以調用相關的 API 獲得資源信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM