OpenStack


 

  Openstack是一個雲平台管理的項目,它不是一個軟件。也就是說我們可以使用Openstack來管理我們數據中心里面的各種資源池;它里面包含了很多子項目。

 

  Openstack通過一個抽象層將普通計算機中的各種資源分成單一的組當我們需要創建虛擬機的時候可以選擇為其分配多少內存幾個CPU、幾塊網卡多大的存儲等;Openstack就是將這些資源划分成組然后在這些組里為虛擬機分配資源(這些資源也是有限制的,比如網我們有一個20G的內存資源組它是由45G的主機組合而來的;當我們創建虛擬機時,是無法為其分配大於5G的內存的,因為虛擬機是受單個物理機限制的。);

 

  Openstack的各services

    1.Compute(計算):管理虛擬機的整個生命周期用於對虛擬機進行調度資源分配創建銷毀、遠程連接等,其項目名稱為Nova

      nova-api:接收並響應終端用戶對compute節點的調用服務;它會將請求放入Message Queue供其他組件獲取

      nova-api-metadata:接收並響應運行起來的虛擬機實例發起的meta相應的調用請求

      nova-compute:借助於HypervisorAPI啟動及終止虛擬機實例更新虛擬機在數據庫中的信息等;從隊列中接收請求並執行操作;

      nova-scheduler:從隊列中取出VM的啟動請求並決定由哪個運行compute服務的Hypervisor來啟動並運行虛擬機

      nova-conductor:作為nova-computedatabase的中間層,避免nova-compue直接與數據庫進行交互,從而導致數據庫出錯;(nova-computenova-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:有着關聯配置的狀態的三層網絡或者說是由Ipv4Ipv6定義的地址塊形成的網絡

      Port:將主機連入網絡設備的連接接口

 

         ML2:作為管理網絡設備的統一管理接口

    3.Object Storage(對象存儲):基於RESTfulAPI對非結構化數據對象進行存儲和檢索,其中的數據自帶元數據信息,使用分布式存儲,一般用於存儲磁盤映像文件,適用於存儲一次寫入,多次讀取的文件,其項目名稱為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

        EndpointOpenstack中各種服務的訪問入口(URI形式);

        Endpoint分為三種:public url可以被全局所有人訪問、private url可以被局域網內訪問、admin url只可以被管理員訪問

    6.Image(映像):為虛擬機存儲和檢索其要使用的映像文件的位置,其項目名稱為Glance

      Glance組件

        glance-api:GlanceAPI服務接口負責接收對Image Service API中映像文件的創建刪除查找下載及存儲請求;監聽在9292端口

        glance-registry:用於與Mysql數據庫交互(在Glance的數據庫中存儲着兩張表:image表保存了映像文件的格式、大小等信息;image properties表保存了映像的定制化信息;),存儲處理及獲取映像文件的元數據例如映像文件的大小及類型等;監聽在9191端口

        image store:是一個存儲的接口層通過這個接口glance可以獲取和保存映像,具體的實現需要外部存儲的支持;image store支持亞馬遜的S3、Swift、sheepdog、GlusterFS

        database:存儲映像文件的元數據

        映像文件存儲倉庫支持多中類型的映像文件存儲機制包括使用普通的文件系統對象存儲、RADOS塊設備HTTP以及AmazonS3

 

 

 

    7.Dashboard:OpenstackWeb管理接口其項目名稱為Horizon;

    8.Teiemetry:提供監控和計量服務,其項目名稱為Ceilometer;

    9.Orchestration:提供基於模板自動化部署虛擬機的組件,其項目名稱為Heat

    10.Database Service:提供數據庫應用服務其項目名稱為Trove;

    ……

 

  概念架構

 

 

  邏輯架構

 

    如概念結構所示,OpenStack由幾個獨立的部分組成,稱為OpenStack服務。所有服務都通過公共身份服務進行身份驗證。各個服務通過公共API相互交互,除非需要特權管理員命令。

    在內部,OpenStack服務由幾個進程組成。所有服務都至少有一個API進程,它監聽API請求,預處理它們並將它們傳遞給服務的其他部分。除Identity服務外,實際工作由不同的進程完成。

    對於一個服務的進程之間的通信,使用AMQP消息代理。服務的狀態存儲在數據庫中。在部署和配置OpenStack雲時,您可以選擇多種消息代理和數據庫解決方案,例如RabbitMQMySQLMariaDBSQLite

    用戶可以通過Horizo​​n Dashboard實現的基於Web的用戶界面,命令行客戶端以及通過瀏覽器插件或curl等工具發出API請求來訪問OpenStack 。對於應用程序, 可以使用多個SDK。最終,所有這些訪問方法都會向各種OpenStack服務發出REST API調用。

  Openstack各服務的請求流程

 

  網絡拓撲類型

 

    提供商網絡選項以最簡單的方式部署OpenStack Networking服務,主要是第2層(橋接/交換)服務和網絡的VLAN分段。從本質上講,它將虛擬網絡橋接到物理網絡,並依賴於物理網絡基礎設施來實現第3層(路由)服務。

    此選類型乏對自助(私有)網絡,第3層(路由)服務以及LBaaSFWaaS等高級服務的 支持。如果您需要這些功能,請考慮下面的自助服務網絡選項。

 

    自助服務網絡選項通過第3層(路由)服務增強了提供商網絡選項,這些服務使用覆蓋分段方法(如VXLAN)實現 自助服務網絡。從本質上講,它使用NAT將虛擬網絡路由到物理網絡。此外,此選項為LBaaSFWaaS等高級服務奠定了基礎。

  OpenstackStein版)的安裝

    配置步驟

      1.為各個節點配置合理的IP地址及主機名

      2.配置時間同步

      3.安裝OpenstackClient軟件包

      4.配置SQL Database

      5.配置消息隊列RabbitMQ);

        啟動以后可以通過其監聽的15672接口訪問RadditMQweb界面

        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看不見92929191端口

          錯誤為: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.配置計算節點與控制節點時要注意節點的防火牆在計算節點要注意放行rabbit5672端口否則會報關於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上

  

 

     根據馬哥視頻做的學習筆記,如有錯誤,歡迎指正;侵刪


免責聲明!

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



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