OpenStack搭建企業私有雲 三:計算服務(持續更新...)
使用OpenStack計算服務來托管和管理雲計算系統。OpenStack計算服務是基礎設施即服務(Iaas)系統的主要部分,模塊主要由python實現。
OpenStack計算組件請求OpenStack Identity服務進行認證;請求OpenStack Image服務提供磁盤鏡像;為OpenStack dashboard提供用戶與管理員接口。磁盤鏡像訪問限制在項目與用戶上;配額以每個項目進行設定(例如,每個項目下可以創建多少實例)。OpenStack組件可以在標準硬件上水平大規模擴展,並且下載磁盤鏡像啟動虛擬機實例。
OpenStack計算服務由下列組件所構成:
nova-api 服務
接收和響應來自最終用戶的計算API請求。此服務支持OpenStack計算服務API,Amazon EC2 API,以及特殊的管理API用於賦予用戶做一些管理的操作。它會強制實施一些規則,發起多數的編排活動,例如運行一個實例。- nova-api-metadata 服務
接受來自虛擬機發送的元數據請求。nova-api-metadata
服務一般在安裝nova-network
服務的多主機模式下使用。- nova-compute服務
一個持續工作的守護進程,通過Hypervior的API來創建和銷毀虛擬機實例。例如:- XenServer/XCP 的 XenAPI
- KVM 或 QEMU 的 libvirt
- VMware 的 VMwareAPI
過程是蠻復雜的。最為基本的,守護進程同意了來自隊列的動作請求,轉換為一系列的系統命令如啟動一個KVM實例,然後,到數據庫中更新它的狀態。- nova-scheduler服務
拿到一個來自隊列請求虛擬機實例,然後決定那臺計算服務器主機來運行它。- ova-conductor模塊
媒介作用於nova-compute服務與數據庫之間。它排除了由nova-compute服務對雲數據庫的直接訪問。nova-conductor模塊可以水平擴展。但是,不要將它部署在運行nova-compute服務的主機節點上。- nova-cert模塊
服務器守護進程向Nova Cert服務提供X509證書。用來為euca-bundle-image生成證書。僅僅是在EC2 API的請求中使用- nova-network worker 守護進程
與nova-compute服務類似,從隊列中接受網絡任務,並且操作網絡。執行任務例如創建橋接的接口或者改變IPtables的規則。- nova-consoleauth 守護進程
授權控制臺代理所提供的用戶令×××。- nova-novncproxy 守護進程
提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持基於瀏覽器的novnc客戶端。- nova-spicehtml5proxy 守護進程
提供一個代理,用於訪問正在運行的實例,通過 SPICE 協議,支持基於瀏覽器的 HTML5 客戶端。- nova-xvpvncproxy 守護進程
提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持OpenStack特定的Java客戶端。- nova-cert 守護進程
X509 證書。- nova客戶端
用於用戶作為租戶管理員或最終用戶來提交命令。- 隊列
一個在守護進程間傳遞消息的中央集線器。- SQL數據庫
存儲構建時和運行時的狀態,為雲基礎設施,包括有: 可用實例類型、使用中的實例、可用網絡、項目。
?
操作步驟
-
部署compute服務
-
創建nova_api, nova, nova_cell0數據庫
# mysql -u root -p > CREATE DATABASE nova_api; > CREATE DATABASE nova; > CREATE DATABASE nova_cell0;
-
數據庫登錄授權
> GRANT ALL PRIVILEGES ON nova_api.* TO ‘nova‘@‘localhost‘ IDENTIFIED BY ‘123456‘; > GRANT ALL PRIVILEGES ON nova_api.* TO ‘nova‘@‘%‘ IDENTIFIED BY ‘123456‘; > GRANT ALL PRIVILEGES ON nova.* TO ‘nova‘@‘localhost‘ IDENTIFIED BY ‘123456‘; > GRANT ALL PRIVILEGES ON nova.* TO ‘nova‘@‘%‘ IDENTIFIED BY ‘123456‘; > GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova‘@‘localhost‘ IDENTIFIED BY ‘123456‘; > GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova‘@‘%‘ IDENTIFIED BY ‘123456‘;
-
創建nova用戶
# source ~/admin-openrc # openstack user create --domain default --password-prompt nova User Password: //密碼123456 Repeat User Password: //密碼123456
-
添加admin用戶為nova用戶
# openstack role add --project service --user nova admin
-
創建nova服務端點
# openstack service create --name nova --description "OpenStack Compute" compute
-
創建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
?
-
創建一個placement服務用戶(監控資源)
一個資源提供者可以是一個計算節點,共享存儲池,或一個IP分配池。
placement服務跟蹤每個供應商的庫存和使用情況。
例如,在一個計算節點創建一個實例的可消費資源如計算節點的資源提供者的CPU和內存,
磁盤從外部共享存儲池資源提供商和IP地址從外部IP資源提供者# openstack user create --domain default --password-prompt placement User Password: //密碼123456 Repeat User Password: //密碼123456
-
添加placement用戶為項目服務admin角色
# openstack role add --project service --user placement admin
-
創建在服務目錄創建Placement API服務
# openstack service create --name placement --description "Placement API" placement
-
創建Placement API服務端點
# openstack endpoint create --region RegionOne placement public http://controller:8778 # openstack endpoint create --region RegionOne placement internal http://controller:8778 # penstack endpoint create --region RegionOne placement admin http://controller:8778
?
-
安裝軟件包
# 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 [DEFAULT] //2756行 enabled_apis=osapi_compute,metadata //3156行 transport_url=rabbit://openstack:123456@controller //1291行 my_ip=192.168.200.133 //1755行 use_neutron=true //2417行 firewall_driver=nova.virt.firewall.NoopFirewallDriver [api_database] //3513行 connection=mysql+pymysql://nova:123456@controller/nova_api [database] //4588行 connection=mysql+pymysql://nova:123456@controller/nova [api] //3221行 auth_strategy=keystone [keystone_authtoken] //6073行 auth_uri=http://controller:5000 auth_url=http://controller:35357 //6124行 memcached_servers=controller:11211 //6231行 auth_type=password project_domain_name = default user_domain_name = default project_name = service username = nova password = 123456 [vnc] //10213行 enabled=true //10237行 server_listen=$my_ip //10250行 server_proxyclient_address=$my_ip [glance] //5266行 api_servers=http://controller:9292 [oslo_concurrency] //7841行 lock_path=/var/lib/nova/tmp [placement] //8740行 os_region_name=RegionOne //8780行 auth_type=password //8786行 auth_url=http://controller:35357/v3 //8801行 project_name=service //8807行 project_domain_name=Default //8827行 username=placement //8833行 user_domain_name=Default //8836行 password=123456
-
由於包錯誤,您必須啟用對Placement API的訪問,在文件末尾添加
# 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.service
-
同步nova-api數據庫
# su -s /bin/sh -c "nova-manage api_db sync" nova
-
註冊cell0數據庫
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
-
創建cell1 cell
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
-
同步nova數據庫
# su -s /bin/sh -c "nova-manage db sync" nova
-
驗證 nova、 cell0、 cell1數據庫是否註冊正確
# nova-manage cell_v2 list_cells
?
-
啟動服務並添加開機自啟動
# systemctl enable openstack-nova-api.service # systemctl enable openstack-nova-consoleauth.service # systemctl enable openstack-nova-scheduler.service # systemctl enable openstack-nova-conductor.service # systemctl enable openstack-nova-novncproxy.service # systemctl start openstack-nova-api.service # systemctl start openstack-nova-consoleauth.service # systemctl start openstack-nova-scheduler.service # systemctl start openstack-nova-conductor.service # systemctl start openstack-nova-novncproxy.service
在compute 上安裝和配置compute節點
# yum install openstack-nova-compute -y
# vim /etc/nova/nova.conf
[DEFAULT]
//1291
my_ip = 192.168.200.134
//1755
use_neutron=true
//2417
firewall_driver=nova.virt.firewall.NoopFirewallDriver
//2756
enabled_apis = osapi_compute,metadata
//3156
transport_url = rabbit://openstack:RABBIT_PASS@controller
.
[api]
//3221
auth_strategy=keystone
[keystone_authtoken]
//6073
auth_uri = http://controller:5000
auth_url = http://controller:35357
//6124
memcached_servers=controller:11211
//6231
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=123456
.
[vnc]
//10213
enabled=true
//10237
server_listen=0.0.0.0
//10250
server_proxyclient_address=$my_ip
//10268
novncproxy_base_url=http://controller:6080/vnc_auto.html
.
[glance]
//5266
api_servers=http://controller:9292
[oslo_concurrency]
//7841
lock_path=/var/lib/nova/tmp
[placement]
//8740
os_region_name=RegionOne
//8780
auth_type = password
//8786
auth_url=http://controller:35357/v3
//8801
project_name = service
//8807
project_domain_name = Default
//8833
user_domain_name = Default
//8827
username = placement
//8836
password = 123456
-
啟動服務並加入開機啟動
# systemctl enable libvirtd.service # systemctl enable openstack-nova-compute.service # systemctl stop libvirtd # systemctl start libvirtd # systemctl start openstack-nova-compute.service
以下都在controller操作 添加compute節點到cell數據庫
# source ~/admin-openrc
-
驗證有幾個計算節點在數據庫中
# openstack compute service list --service nova-compute
-
發現計算節點
# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
-
在controller節點驗證計算服務操作
# openstack compute service list
-
列出身份服務中的API端點以驗證與身份服務的連接
# openstack catalog list
-
列出鏡像
# openstack image list
-
檢查cells和placement API是否正常
# nova-status upgrade check
OpenStack搭建企業私有雲 三:計算服務(持續更新...)