Openstack是一個雲平台管理的項目,它不是一個軟件。也就是說我們可以使用Openstack來管理我們數據中心里面的各種資源池;它里面包含了很多子項目。
Openstack通過一個抽象層將普通計算機中的各種資源分成單一的組,當我們需要創建虛擬機的時候可以選擇為其分配多少內存、幾個CPU、幾塊網卡、多大的存儲等;Openstack就是將這些資源划分成組,然后在這些組里為虛擬機分配資源(這些資源也是有限制的,比如網我們有一個20G的內存資源組,它是由4個5G的主機組合而來的;當我們創建虛擬機時,是無法為其分配大於5G的內存的,因為虛擬機是受單個物理機限制的。);
Openstack的各services:
1.Compute(計算):管理虛擬機的整個生命周期,用於對虛擬機進行調度、資源分配、創建、銷毀、遠程連接等,其項目名稱為Nova;
nova-api:接收並響應終端用戶對compute節點的調用服務;它會將請求放入Message Queue供其他組件獲取;
nova-api-metadata:接收並響應運行起來的虛擬機實例發起的meta相應的調用請求;
nova-compute:借助於Hypervisor的API啟動及終止虛擬機實例,更新虛擬機在數據庫中的信息等;從隊列中接收請求並執行操作;
nova-scheduler:從隊列中取出VM的啟動請求,並決定由哪個運行compute服務的Hypervisor來啟動並運行虛擬機;
nova-conductor:作為nova-compute與database的中間層,避免nova-compue直接與數據庫進行交互,從而導致數據庫出錯;(nova-compute與nova-conductor不是直接交互,而是nova-compute先將消息發送到queue中,然后再由nova-conductor訂閱處理)
nova-consoleauth:用於控制台的授權驗證;
nova-novncproxy:為經由vnc接口要連入各虛擬機實例的請求提供代理服務,從而使得僅在Dashboard接口上直接向各VM所在的compute節點的VNC服務發起請求;
Compute服務中有一個核心組件Queue(隊列),幾乎各個API都要經過這個Queue才能與其他API通信;其各API直接通過訂閱其他與自己相關的API的消息隊列來完成信息交互;其中發布消息的我們可以稱之為生產者,接收消息的可以稱之為消費者;其中生產者可以有多種,也就意味着有多種隊列,消費者也可以有多種,而一個消費者可以訂閱多種生產者隊列,一個生產者隊列也可以被多個消費者訂閱;
2.Networking(網絡):管理虛擬機的網絡配置,用於為虛擬機按需分配網絡,支持眾多流行的網絡管理框架,其項目名稱為Neutron;
Network:隔離的二層網絡,類似於VLAN;
Subnet:有着關聯配置的狀態的三層網絡,或者說是由Ipv4或Ipv6定義的地址塊形成的網絡;
Port:將主機連入網絡設備的連接接口;
ML2:作為管理網絡設備的統一管理接口;
3.Object Storage(對象存儲):基於RESTful的API對非結構化數據對象進行存儲和檢索,其中的數據自帶元數據信息,使用分布式存儲,一般用於存儲磁盤映像文件,適用於存儲一次寫入,多次讀取的文件,其項目名稱為Swift;
4.Block Storage(塊存儲):用於為虛擬機提供數據的存儲功能,其項目名稱為Cinder;
cinder-api:接受API請求,並將它們路由到cinder-volumefor操作。
cinder-volume:直接面對存儲服務,通過消息隊列直接與cinder-scheduler交互;
cinder-scheduler daemon:用於調度選擇可以創建卷的最佳存儲節點;
cinder-backup daemon:為卷提供備份功能;
messaging queue:用於塊存儲進程之間傳遞信息。
5.Identity(身份認證):為Openstack中的服務提供認證授權功能以及端點編錄功能(Openstack中的各種服務要到Keystone中查詢其他服務的訪問端點),其項目名稱為Keystone;
認證方式:
token:使用一串設定的字符串作為令牌進行認證(建議使用openssl rand -hex 10生成隨機字符串);可以基於K/V方式存儲;
這個機制一般是第一次進行安裝登錄Keystone時才使用的,當設置完用戶密碼以后會被禁用;
賬號/密碼:使用用戶名和密碼進行認證;
核心術語:
User:一個用戶可以關聯至多個project;
Project:標識一個項目,以前叫Tenant(租戶);
Role:角色,標識用戶的身份,不同角色擁有不同權限;
Service:服務,即Openstack中的各種service;
Endpoint:Openstack中各種服務的訪問入口(URI形式);
Endpoint分為三種:public url可以被全局所有人訪問、private url可以被局域網內訪問、admin url只可以被管理員訪問;
6.Image(映像):為虛擬機存儲和檢索其要使用的映像文件的位置,其項目名稱為Glance;
Glance組件:
glance-api:Glance的API服務接口,負責接收對Image Service API中映像文件的創建、刪除、查找、下載及存儲請求;監聽在9292端口;
glance-registry:用於與Mysql數據庫交互(在Glance的數據庫中存儲着兩張表:image表保存了映像文件的格式、大小等信息;image properties表保存了映像的定制化信息;),存儲、處理及獲取映像文件的元數據,例如映像文件的大小及類型等;監聽在9191端口;
image store:是一個存儲的接口層,通過這個接口glance可以獲取和保存映像,具體的實現需要外部存儲的支持;image store支持亞馬遜的S3、Swift、sheepdog、GlusterFS等;
database:存儲映像文件的元數據;
映像文件存儲倉庫:支持多中類型的映像文件存儲機制,包括使用普通的文件系統、對象存儲、RADOS塊設備、HTTP以及Amazon的S3等;
7.Dashboard:Openstack的Web管理接口,其項目名稱為Horizon;
8.Teiemetry:提供監控和計量服務,其項目名稱為Ceilometer;
9.Orchestration:提供基於模板自動化部署虛擬機的組件,其項目名稱為Heat;
10.Database Service:提供數據庫應用服務,其項目名稱為Trove;
……
概念架構:
邏輯架構:
如概念結構所示,OpenStack由幾個獨立的部分組成,稱為OpenStack服務。所有服務都通過公共身份服務進行身份驗證。各個服務通過公共API相互交互,除非需要特權管理員命令。
在內部,OpenStack服務由幾個進程組成。所有服務都至少有一個API進程,它監聽API請求,預處理它們並將它們傳遞給服務的其他部分。除Identity服務外,實際工作由不同的進程完成。
對於一個服務的進程之間的通信,使用AMQP消息代理。服務的狀態存儲在數據庫中。在部署和配置OpenStack雲時,您可以選擇多種消息代理和數據庫解決方案,例如RabbitMQ,MySQL,MariaDB和SQLite。
用戶可以通過Horizon Dashboard實現的基於Web的用戶界面,命令行客戶端以及通過瀏覽器插件或curl等工具發出API請求來訪問OpenStack 。對於應用程序, 可以使用多個SDK。最終,所有這些訪問方法都會向各種OpenStack服務發出REST API調用。
Openstack各服務的請求流程:
網絡拓撲類型:
提供商網絡選項以最簡單的方式部署OpenStack Networking服務,主要是第2層(橋接/交換)服務和網絡的VLAN分段。從本質上講,它將虛擬網絡橋接到物理網絡,並依賴於物理網絡基礎設施來實現第3層(路由)服務。
此選類型乏對自助(私有)網絡,第3層(路由)服務以及LBaaS和 FWaaS等高級服務的 支持。如果您需要這些功能,請考慮下面的自助服務網絡選項。
自助服務網絡選項通過第3層(路由)服務增強了提供商網絡選項,這些服務使用覆蓋分段方法(如VXLAN)實現 自助服務網絡。從本質上講,它使用NAT將虛擬網絡路由到物理網絡。此外,此選項為LBaaS和FWaaS等高級服務奠定了基礎。
Openstack(Stein版)的安裝:
配置步驟:
1.為各個節點配置合理的IP地址及主機名;
2.配置時間同步;
3.安裝OpenstackClient軟件包;
4.配置SQL Database;
5.配置消息隊列(RabbitMQ);
啟動以后可以通過其監聽的15672接口訪問RadditMQ的web界面;
iptables -A INPUT -p tcp --dport 5672 -j ACCEPT
6.配置Memcached,提供緩存加速;
7.配置Openstack的各個Service;
Keystone
同步數據庫時要使用keystone用戶的身份,要不然就要修改/var/log/keystone/keystone.log這個文件的屬組為keystone且具有讀寫權限;
Glance
/etc/glance/glance-api.conf和/etc/glance/glance-registry.conf文件中的#auth_uri = <None>參數描述為:Reason: The auth_uri option is deprecated in favor of www_authenticate_uri and will be removed in the S release。但是如果使用auth_uri替換官網中的auth_url則會報錯。表面上的錯誤是glance已經啟動(狀態為running),但是使用netstat -nultp看不見9292和9191端口;
錯誤為:MissingRequiredOptions: Auth plugin requires parameters which were not given: auth_url
WARNING keystonemiddleware.auth_token [-] AuthToken middleware is set with keystone_authtoken.service_token_roles_required set to False. This is backwards compatible but deprecated behaviour. Please set this to True.
Plancement
WSGI:https://blog.csdn.net/jinixin/article/details/84677104
Note:這一步在之前的版本中沒有;
Nova
如果你使用的是VMware中的虛擬機作為計算機點的話,則其計算節點中nova的配置文件/etc/nova/nova.conf中的virt_type要配置為qemu,官網中為kvm,但是如果使用kvm就會卡在加載映像文件那,無法啟動系統;
Note:
1.配置計算節點與控制節點時,要注意節點的防火牆,在計算節點要注意放行rabbit的5672端口,否則會報關於rabbit連接超時的錯誤;
2.OpenStack的各種服務自己會生成相關的iptables規則,最好不要亂改,尤其是計算節點;我做實驗時在將控制節點與計算節點的iptables規則清除后,會有各種錯誤,其中就包含rabbit超時,mysql數據庫(可能是性能問題)錯誤等;
3.最好為控制節點與計算節點分配盡可能多的資源,否則會發生創建虛擬機失敗的情況,或者是執行命令極慢的情況;
報錯:
1.ResourceProviderRetrievalFailed: Failed to get resource provider with UUID
解決辦法:在/etc/httpd/conf.d/00-placement-api.conf中按照以下格式添加一段 Directory
vim /etc/httpd/conf.d/00-placement-api.conf <VirtualHost *:8778> ................... <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory> ........................ </VirtualHost>
注:如果不將上面的內容設置好,執行nova-status upgrade check會報錯,所以建議在安裝openstack-placement-api-1.1.0-1.el7.noarch是就進行修改。
2.not supported by libvirt.LibvirtDriver
解決辦法:修改下nova.conf 文件下libvirtd參數。改計算節點就行,一般都是控制計算一起改。編輯:disk_cachemodes="network=writeback"
原文鏈接地址:http://www.bbs168x.cn/thread-939-1-1.html
Neutron
Horizon
Cinder
具體配置見官網:https://docs.openstack.org/install-guide/
官網描述:https://docs.openstack.org/install-guide/overview.html
Openstack外部網絡:
Openstack通過Neutron管理雲平台中的網絡,但是無法管理外部網絡。為了連接外部網絡,Neutron提供了一個映射方式,將外部的物理網絡映射到Neutron中,然后通過Neutron設置連接外部網絡的方式。
映射方式:通過設置label來映射物理網卡,進而將物理網絡引入Neutron。
常用見的物理網絡有flat與vlan,常見的租戶網絡有vlan、vxlan與gre。
連接外部網絡配置:(橋設備使用的是OVS)
控制或網絡節點: cat /etc/neutron/l3_agent.ini external_network_bridge = br-ex #設置要連接的外部網橋 #interface_driver = linuxbridge interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver use_namespaces = True cat /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = vxlan,vlan,flat tenant_network_types = vxlan #設置租戶網絡類型 #mechanism_drivers = linuxbridge,l2population mechanism_drivers = openvswitch,l2population #使用OVS管理設備 extension_drivers = port_security [ml2_type_flat] flat_networks = myflat #自定義的label,可以定義多個,使用逗號隔開,供后面調用。 #每個flat要對應一個物理網卡或者虛擬網橋(將物理網卡橋接到虛擬網橋上)。 [ml2_type_vxlan] vni_ranges = 1:2000 #設置普通租戶使用的VNI范圍 [securitygroup] enable_ipset = true cat /etc/neutron/plugins/ml2/openvswitch_agent.ini [ovs] bridge_mappings = myflat:br-ex #對外部網絡進行映射,將物理機上的br-ex映射到Neutron網絡中,取名為myflat。br-ex上橋接這物理網卡,比如ens33,eth0等設備。
#在啟動服務之前要設置好。 tunnel_bridge = br-tun local_ip = 192.168.30.100 #租戶網絡的網卡地址 [agent] tunnel_types = vxlan l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = true 計算節點: cat /etc/neutron/plugins/ml2/openvswitch_agent.ini [ovs] bridge_mappings = #因為是通過網絡節點訪問外部網絡,所以不需要映射 tunnel_bridge = br-tun local_ip = 192.168.30.101 [agent] tunnel_types = vxlan l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = true
網橋橋接配置:
ovs-vsctl add-br br-ex #創建網橋(貌似OVS默認給提供了,OVS會自動創建br-int與br-tun,其中br-int與br-ex使用path連接,可以通過ovs-vsctl show查看)
ovs-vsctl add-port br-ex ens39 #將物理網卡橋接到虛擬網橋br-ex上
根據馬哥視頻做的學習筆記,如有錯誤,歡迎指正;侵刪