① 什麼是OpenStack
本文詳細介紹了Openstack的網路原理和實現,主要內容包括:Neutron的網路架構及網路模型還有neutron虛擬化的實現和對二三層網橋的理解。
一、Neutron概述
Neutron是一個用Python寫的分布式軟體項目,用來實現OpenStack中的虛擬網路服務,實現軟體定義網路。Neutron北向有自己的REST API,中間有自己的業務邏輯層,有自己的DB和進程之間通訊的消息機制。同時Neutron常見的進程包括Neutron-server和Neutron-agent,分布式部署在不同的操作系統。
OpenStack發展至今,已經經歷了20個版本。雖然版本一直在更替,發展的項目也越來越多,但是Neutron作為OpenStack三大核心之一,它的地位是不會動搖的。只不過當初的Neutron也只是Nova項目的一個模塊而已,到F版本正式從中剝離,成為一個正式的項目。
從Nova-Network起步,經過Quantum,多年的積累Neutron在網路各個方面都取得了長足的發展。其主要的功能為:
(1)支持多租戶隔離
(2)支持多種網路類型同時使用
(3)支持隧道技術(VXLAN、GRE)
(4)支持路由轉發、SNAT、DNAT技術
(5)支持Floating IP和安全組
多平面租戶私有網路
圖中同時有VXLAN和VLAN兩種網路,兩種網路之間互相隔離。租戶A和B各自獨佔一個網路,並且通過自己的路由器連接到了外部網路。路由器為租戶的每個虛擬機提供了Float IP,完成vm和外網之間的互相訪問。
二、Neutron架構及網路模型
1、Neutron架構
Neutron-sever可以理解為類似於nova-api那樣的一個專門用來接收API調用的組件,負責將不同的api發送到不同Neutron plugin。
Neutron-plugin可以理解為不同網路功能實現的入口,接收server發來的API,向database完成一些注冊信息。然後將具體要執行的業務操作和參數通知給對應的agent來執行。
Agent就是plugin在設備上的代理,接受相應的plugin通知的業務操作和參數,並轉換為具體的命令行操作。
總得來說,server負責交互接收請求,plugin操作資料庫,agent負責具體的網路創建。
2、Neutron架構之Neutron-Server
(1)Neutron-server的本質是一個Python Web Server Gateway Interface(WSGI),是一個Web框架。
(2)Neutron-server接收兩種請求:
REST API請求:接收REST API請求,並將REST API分發到對應的Plugin(L3RouterPlugin)。
RPC請求:接收Plugin agent請求,分發到對應的Plugin(NeutronL3agent)。
3、Neutron架構之Neutron-Plugin
Neutron-plugin分為Core-plugin和Service-plugin。
Core-plugin:ML2負責管理二層網路,ML2主要包括Network、Subnet、Port三類核心資源,對三類資源進行操作的REST API是原生支持的。
Service-plugin:實現L3-L7網路,包括Router、Firewall、VPN。
4、Neutron架構之Neutron-Agent
(1)Neutron-agent配置的業務對象是部署在每一個網路節點或者計算節點的網元。
(2)網元區分為PNF和VNF:
PNF:物理網路功能,指傳統的路由器、交換機等硬體設備
VNF:虛擬網路功能,通過軟體實現的網路功能(二層交換、三層路由等)
(3)Neutron-agent三層架構如下圖:
Neutron-agent架構分為三層,北向為Neutron-server提供RPC介面,供Neutron server調用,南向通過CLI協議棧對Neutron VNF進行配置。在中間會進行兩種模型的轉換,從RPC模型轉換為CLI模型。
5、Neutron架構之通信原理
(1)Neutron是OpenStack的核心組件,官網給出Neutron的定義是NaaS。
(2)Naas有兩層含義:
對外介面:Neutron為Network等網路資源提供了RESTful API、CLI、GUI等模型。
內部實現:利用Linux原生或者開源的虛擬網路功能,加上硬體網路,構建網路。
Neutron接收到API請求後,交由模塊WSGI進行初步的處理,然後這個模塊通過Python API調用neutron的Plugin。Plugin做了相應的處理後,通過RPC調用Neutron的Agent組件,agent再通過某種協議對虛擬網路功能進行配置。其中承載RPC通信的是AMQP server,在部署中常用的開源軟體就是RabbitMQ
6、Neutron架構之控制節點網路模型
控制節點沒有實現具體的網路功能,它對各種虛擬設備做管理配合的工作。
(1)Neutron:Neutron-server核心組件。
(2)API/CLI:Neutron進程通過API/CLI介面接收請求。
(3)OVS Agent:Neutron通過RPC協議與agent通信。
控制節點部署著各種服務和Neutron-server,Neutron-server通過api/cli介面接收請求信息,通過RPC和Agent進行交互。Agent再調用ovs/linuxbridge等網路設備創建網路。
7、Neutron架構之計算節點網路模型
(1)qbr:Linux Bridge網橋
(2)br-int:OVS網橋
(3)br-tun:OVS隧道網橋
(4)VXLAN封裝:網路類型的轉變
8、Neutron架構之網路節點網路模型
網路節點部署了Router、DHCP Server服務,網橋連接物理網卡。
(1)Router:路由轉發
(2)DHCP: 提供DNS、DHCP等服務。
(3)br-ex: 連接物理網口,連接外網
三、Neutron虛擬化實現功能及設備介紹
1、Neutron虛擬化實現功能
Neutron提供的網路虛擬化能力包括:
(1)二層到七層網路的虛擬化:L2(virtual Switch)、L3(virtual Router 和 LB)、L47(virtual Firewall )等
(2)網路連通性:二層網路和三層網路
(3)租戶隔離性
(4)網路安全性
(5)網路拓展性
(6)REST API
(7)更高級的服務,包括 LBaaS,FWaaS,VPNaaS 等
2、Neutron虛擬化功能之二層網路
(1)按照用戶許可權創建網路:
Provider network:管理員創建,映射租戶網路到物理網路
Tenant network:租戶創建的普通網路
External network:物理網路
(2)按照網路類型:
Flat network:所有租戶網路在一個網路中
Local network:只允許在伺服器內通信,不通外網
VLAN network:基於物理VLAN實現的虛擬網路
VXLAN network:基於VXLAN實現的虛擬網路
3、Neutron虛擬化實現功能之租戶隔離
Neutron是一個支持多租戶的系統,所以租戶隔離是Neutron必須要支持的特性。
(1)租戶隔離三種含義:管理面隔離、數據面的隔離、故障面的隔離。
(2)不同層次租戶網路的隔離性
租戶與租戶之間三層隔離
同一租戶不同網路之間二層隔離
同一租戶同一網路不同子網二層隔離
(3)計算節點的 br-int 上,Neutron 為每個虛機連接 OVS 的 access port 分配了內部的 VLAN Tag。這種 Tag 限制了網路流量只能在 Tenant Network 之內。
(4)計算節點的 br-tun 上,Neutron 將內部的 VLAN Tag 轉化為 VXLAN Tunnel ID,然後轉發到網路節點。
(5)網路節點的 br-tun 上,Neutron 將 VXLAN Tunnel ID 轉發了一一對應的 內部 VLAN Tag,使得 網路流被不同的服務處理。
(6)網路節點的 br-int 上連接的 DHCP 和 L3 agent 使用 Linux Network Namespace 進行隔離。
4、Neutron虛擬化實現功能之租戶網路安全
除了租戶隔離以外 Neutron還提供數據網路與外部網路的隔離性。
(1)默認情況下,所有虛擬機通過外網的流量全部走網路節點的L3 agent。在這里,內部的固定IP被轉化為外部的浮動IP地址
(1)Neutron還利用Linux iptables特性,實現其Security Group特性,從而保證訪問虛機的安全性
(3)Neutron利用網路控制節點上的Network Namespace中的iptables,實現了進出租戶網路的網路防火牆,從而保證了進出租戶網路的安全性。
5、Neutron虛擬化設備
(1)埠:Port代表虛擬網路交換機上的一個虛擬交換機埠
虛擬機的網卡連接到Port上就會擁有MAC地址和IP地址
(2)虛擬交換機:Neutron默認採用開源的Openvswitch,
同時還支持Linux Bridge
(3)虛擬路由器VR:
- 路由功能
- 一個VR只屬於一個租戶,租戶可以有多個VR
- 一個VR可以有若干個子網
- VR之間採用Namespace隔離
四、Neutron網橋及二三層網路理解
1、Neutron-Local-Bridge
僅用於測試;網橋沒有與物理網卡相連VM不通外網。
圖中創建了兩個local network,分別有其對應的qbr網橋。Vm123的虛擬網卡通過tap連接到qbr網橋上。其中2和3屬於同一個network可以通信,1屬於另一個網路不能和23進行通信。並且qbr網橋不連物理網卡,所以說local網路虛擬機只能同網路通信,不能連通外網。
2、Neutron-Flat-Bridge
- Linux Bridge直接與物聯網卡相連
- 每個Flat獨佔一個物理網卡
- 配置文件添加響應mapping
Flat網路是在local網路的基礎上實現不同宿主機之間的二層互聯,但是每個flat network都會佔用一個宿主機的物理介面。其中qbr1對應的flatnetwork 連接 eth1 qbr2,兩個網路的虛機在物理二層可以互聯。其它跟local network類似。
3、Neutron-VLAN-Bridge
在基於linux bridge的vlan網路中,eht1物理網卡上創建了兩個vlan介面,1.1連接到qbr1網橋,1.2連接到了qbr2網橋。在這種情況下vm通過eth1.1或者eth1.2發送到eth1的包會被打上各自的vlan id。此時vm2和vm3屬於同一個network所以是互通的,vm與vm2和vm3不通。
4、Neutron-VXLAN-Bridge
這個是以Linux bridge作agent的Vxlan網路:
Vxlan網路比Vxlan網路多了個VXLAN隧道,在Openstack中創建好內部網路和實例後,agent就會在計算節點和網路節點創建一對vxlan vtep.組成隧道的兩個端點。
Vxlan連接在eth0網口。在網路節點多了兩個組件dhcp 和router,他們分別通過一對veth與qbr網橋連接在一起,多個dhcp和路由之間使用namesapce隔離,當vm產生ping包時,發往linux 網橋qbr1,通過網橋在vxlan12上封裝數據包,數據通過eth0網卡出計算節點到網路節點的eth0,在vxlan12解包。到達路由器之後經過nat地址轉換,從eth1出去訪問外網,由租戶網路到運營商網路再到外部網路。
5、Neutron-VLAN-OVS
與Linux bridge不同,openvswitch 不是通過eth1.1 eth1.2這樣的vlan介面來隔離不同的vlan,而是通過openvswitch的流表規則來指定如何對進出br-int的數據進行轉發,實現不同vlan的隔離。
圖中計算節點的所有虛擬機都連接在int網橋上,虛擬機分為兩個網路。Int網橋會對到來的數據包根據network的不同打上vlan id號,然後轉發到eth網橋,eth網橋直連物理網路。這時候流量就從計算節點到了網路節點。
網路節點的ehx int網橋的功能相似,多了一個ex網橋,這個網橋是管理提前創建好的,和物理網卡相連,ex網橋和int網橋之間通過一對patch-port相連,虛擬機的流量到達int網橋後經過路由到ex網橋。
6、Neutron-VXLAN-OVS
Vxlan的模型和vlan的模型十分相似,從表面上來看,他倆相比只有一個不同,vlan對應的是ethx網橋,而vxlan對應的是tun網橋。
在這里ethx和tun都是ovs網橋,所以說兩者的差別不是實現組件的差別而是組件所執行功能的差別,ethx執行的是普通二層交換機的功能,tun執行的是vxlan中的vtep的功能,圖中倆tun對應的介面ip就是vxlan的隧道終結點ip。所以說虛機的數據包在到達tun網橋之前是打的是vlan tag,而到達tun之後會發生網路類型的轉換,從vlan封裝為vxlan然後到達網路節點。而之前的vlan類型的網路,虛機數據包的類型一直都是vlan。
7、物理的二層與虛擬的二層(VLAN模式)
(1)物理的二層指的是:物理網路是二層網路,基於乙太網協議的廣播方式進行通信。
(2)虛擬的二層指的是:Neutron實現的虛擬網路也是二層網路(openstack的vm機所用的網路必須是大二層),也是基於乙太網協議的廣播方式進行通信,但毫無疑問的是該虛擬網路是依賴於物理的二層網路。
(3)物理二層+虛擬二層的典型代表:VLAN網路模式。
8、物理的三層與虛擬的二層(GRE模式與VXLAN模式)
(1)物理三層指的是:物理網路是三層網路,基於IP路由的方式進行通信。
(2)虛擬的二層指的是:Neutron實現的虛擬網路仍然是二層網路(openstack的vm機所用的網路必須是大二層),仍然是基於乙太網的廣播方式進行通信,但毫無疑問的是該虛擬機網路是依賴於物理的三層網路,這點有點類似於VPN的概念,根本原理就是將私網的包封裝起來,最終打上隧道的ip地址傳輸。
(3)物理三層+虛擬二層的典型代表:GRE模式與VXLAN模式。
② 如何藉助OpenStack命令行工具管理虛擬機
OpenStack中有兩種不同的界面用來管理雲資源。一個是通過Horizon,這是基於Web的OpenStack儀錶板;另一個就是通過OpenStack命令行介面(CLI)。
我在本教程中將演示如何從命令行,在OpenStack上創建或終止虛擬機。這個過程是在Havana版本的OpenStack中進行測試的。至於像OpenStack Folsom這些早期的OpenStack版本,你只要將本教程所用的命令行中的「neutron」換成「quantum」即可。
姑且假設部署的一套OpenStack系統已在某處構建並運行起來。我要使用OpenStack CLI客戶程序,在現有的OpenStack系統上管理虛擬機。
安裝OpenStack CLI客戶程序
第一步就是安裝必要的OpenStack命令行客戶程序:
在Debian、Ubuntu或Linux Mint上,執行這個命令:
$ sudo apt-get install python-pip $ sudo pip install python-novaclient python-keystoneclient python-neutronclient
在CentOS、Fedora或RHEL上,執行這個命令:
$ sudo yum install python-pip $ sudo pip install python-novaclient python-keystoneclient python-neutronclient
設定環境變數
為了能夠使用OpenStack CLI客戶程序,你就要設定必要的環境變數。為此,創建一個名為openrc.sh的腳本,如下所示。
$ sudo vi openrc.sh export OS_USERNAME=dan export OS_PASSWORD=my_password export OS_TENANT_NAME=demo export OS_AUTH_URL=http://192.168.10.10:5000/v2.0
在上述腳本中,OS_USERNAME/OS_PASSWORD是OpenStack用戶名及密碼。OS_TENANT_NAME是所創建的項目的名稱。OS_AUTH_URL是Keystone端點的URL。Keystone是一項OpenStack服務,負責不同的OpenStack組件之間的身份驗證。你應該把192.168.10.10換成所部署的系統中運行OpenStack Keystone的那個主機的IP地址。
現在,運行openrc.sh,設定環境變數,如下所示。
$ source openrc.sh
這時候,你可以准備運行OpenStack命令行客戶程序了。確認你在運行時沒有遇到任何錯誤:
$ nova list
它顯示內容為空的結果,這意味著一切都正常。
構建網路
現在,你可以准備構建一個連接虛擬機的網路了。
創建一個名為"xmolo"的新網路。
$ neutron net-create xmolo
創建一個名為"xmolo_subnet"的新子網,並將其添加到剛構建的那個網路。
$ neutron subnet-create xmolo 10.0.0.0/24 --name xmolo_subnet
檢查可用網路列表,確認該網路已成功構建。
$ neutron net-list
在輸出結果中,要記下你所構建的網路的"ID"(編號)。之後你創建虛擬機時,要用到這個編號。
啟動虛擬機
在創建並啟動虛擬機之前,你首先要知道幾個信息。
查明你想創建的那個虛擬機的類型。為此,運行下面這個命令。
$ nova flavor-list
在該示例中,我准備選擇最小的虛擬機類型"m1.nano",它有64 MB內存、1個虛擬處理器(vCPU)、無磁碟。記下這個類型名稱。
下一步,為你的虛擬機選擇所要使用的虛擬機映像。為了列出所有可用的虛擬機映像,請使用這個命令:
$ nova image-list
記下你想為虛擬機使用的那個映像的ID。
下一步,為你的虛擬機選擇所要使用的安全組的類型。安全組為你的虛擬機決定了入站訪問規則。想了解可用的安全組,請運行該命令:
$ nova secgroup-list
想檢查"默認"安全組的訪問規則,請使用這個命令:
$ nova secgroup-list-rules default
在該示例中,我准備為虛擬機選擇名為"default"的安全組。該安全組裡面正好沒有規則。
最後,我們使用到目前為止所獲得的信息,創建一個虛擬機。指定你已了解的虛擬機類型(--flavor)、虛擬機映像的ID(--image)以及網路的ID(net-id=)。把[vm-name]換成你虛擬機的名稱,這個名稱需要很獨特。
$ nova boot [vm-name] --flavor m1.nano --image d2b830be-3 7df-4fa9-90b2-91c472d19aaa --security-groups default -ni c net-id=1cbcddcf-3a7d-481f-b6f2-a97c6447c925
為了確認虛擬機已成功創建並啟動,請運行這個命令:
$ nova list
停止、暫停和清除虛擬機
當你停止運行某個虛擬機時,它完全關閉。另一方面,你暫停虛擬機時,它臨時被凍結,隨時可以從暫停狀態重新啟動。在這兩種情況下,虛擬機映像仍留在OpenStack裡面。
想停止虛擬機,運行這個命令:
$ nova stop [vm-name]
想暫停虛擬機,運行這個命令:
$ nova suspend [vm-name]
如果你想從OpenStack清除已終停止虛擬機或已暫停虛擬機的映像,請使用這個命令:
$ nova delete [vm-name]
③ 使用 OpenStack 有什麼好處
易於訪問和管理,企業可以通過三種主要方式訪問和管理 OpenStack 部署。1.命令行工具:安裝和配置 OpenStack 命令行界面 (CLI) 後,用戶可以使用它來部署、優化和管理整個數據中心所需的計算、存儲和網路資源。2.基於 Web 的 GUI 儀錶板:系統管理員可以通過基於Web的儀錶板管理 OpenStack 部署。3.面向軟體開發人員的 API:OpenStack有許多RESTful API 可供軟體開發人員訪問操作工具,例如監控服務、資源優化、計費和業務邏輯,以及測試或基準測試等。Accrets國際提供給企業的私有雲解決方案,是利用開源軟體OpenStack作為基礎,包含OpenStack所有的固有優勢,除此之外,Accrets的工程師們將通過最先進的科技手段優化現有的數據中心以及私有雲IT基礎設施,為用戶提供更加便捷、快速、智能、安全的企業服務∞
④ Openstack
Openstack是一個開源的雲平台管理項目,可以用於構建公有雲或者私有雲平台,提供了基礎設施及服務(Iaas)的解決方案,OpenStack是一個雲操作系統,通過數據中心可控制計算、存儲、網路等資源池,OpenStack覆蓋了網路、虛擬化、操作系統、伺服器等各個方面,通過openstack可以啟動,分配和管理虛擬機資源,所有的管理也都可以通過前端界面就可以完成。我們部署openstack之後,可以通過這個平台創建各個不同版本的虛擬機,如centos,windows等系統,可以按需分配cpu,內存,磁碟給這些虛擬機,同時還可以提供網路支持。
操作系統版本選擇centos7.6
1.機器規劃
修改虛擬機的ip變成靜態ip,controller節點的配置如下所示:
vim /etc/hosts 最後一行添加如下內容
192.168.124.200上操作
192.168.124.201上操作
(1)上傳openstack離線軟體包到root目錄下(在controller和computer節點操作)
在root下創建一個目錄openstack,然後把軟體包解壓到這個目錄下
(2)解壓之後會出現一個openstack目錄,把openstack目錄整體移動到/下(controller和computer節點操作)
(3)重新配置yum源(controller和computer節點都操作)
生成一個新的openstack的yum源
這里只在controller上操作:
(1)查看openstack應答文件內容
(2)修改openstack.txt文件,修改的內容如下
(3)查看修改之後的openstack.txt文件中安裝哪些
看到y的表示是需要安裝的組件
(4)基於應答文件安裝組件
(5)安裝過程需要查看iptables狀態,在controller和computer節點
如果發現iptables處於active狀態,需要停掉
(6)看到如下說明安裝成功
**** Installation completed successfully ******
(1)啟動rabbitmq的管理界面,controller節點操作
(2)在瀏覽器訪問
192.168.124.200:15672
賬號:guest
密碼:guest
在瀏覽器輸入:
192.168.124.200
賬號:admin
密碼:16e424911af144ca
登陸之後顯示界面
獲取密碼的方法,在controller節點上,可以看到PASSWORD是16e424911af144ca
顯示如下所示
⑤ ⑩ OpenStack高可用集群部署方案(train版)—OpenStack對接Ceph存儲
參考Ceph官方安裝文檔
Openstack環境中,數據存儲可分為臨時性存儲與永久性存儲。
臨時性存儲:主要由本地文件系統提供,並主要用於nova虛擬機的本地系統與臨時數據盤,以及存儲glance上傳的系統鏡像;
永久性存儲:主要由cinder提供的塊存儲與swift提供的對象存儲構成,以cinder提供的塊存儲應用最為廣泛,塊存儲通常以雲盤的形式掛載到虛擬機中使用。
Openstack中需要進行數據存儲的三大項目主要是nova項目(虛擬機鏡像文件),glance項目(共用模版鏡像)與cinder項目(塊存儲)。
下圖為cinder,glance與nova訪問ceph集群的邏輯圖:
ceph與openstack集成主要用到ceph的rbd服務,ceph底層為rados存儲集群,ceph通過librados庫實現對底層rados的訪問;
openstack各項目客戶端調用librbd,再由librbd調用librados訪問底層rados;
實際使用中,nova需要使用libvirtdriver驅動以通過libvirt與qemu調用librbd;cinder與glance可直接調用librbd;
寫入ceph集群的數據被條帶切分成多個object,object通過hash函數映射到pg(構成pg容器池pool),然後pg通過幾圈crush演算法近似均勻地映射到物理存儲設備osd(osd是基於文件系統的物理存儲設備,如xfs,ext4等)。
CEPH PG數量設置與詳細介紹
在創建池之前要設置一下每個OSD的最大PG 數量
PG PGP官方計算公式計算器
參數解釋:
依據參數使用公式計算新的 PG 的數目:
PG 總數= ((OSD總數*100)/最大副本數)/池數
3x100/3/3=33.33 ;舍入到2的N次幕為32
openstack集群作為ceph的客戶端;下面需要再openstack集群上進行ceph客戶端的環境配置
在openstack所有控制和計算節點安裝ceph Octopus源碼包,centos8有默認安裝,但是版本一定要跟連接的ceph版本一致
glance-api 服務運行在3個控制節點, 因此三台控制節點都必須安裝
cinder-volume 與 nova-compute 服務運行在3個計算(存儲)節點; 因此三台計算節點都必須安裝
將配置文件和密鑰復制到openstack集群各節點
配置文件就是生成的ceph.conf;而密鑰是 ceph.client.admin.keyring ,當使用ceph客戶端連接至ceph集群時需要使用的密默認密鑰,這里我們所有節點都要復制,命令如下
※Glance 作為openstack中鏡像服務,支持多種適配器,支持將鏡像存放到本地文件系統,http伺服器,ceph分布式文件系統,glusterfs和sleepdog等開源的分布式文件系統上。目前glance採用的是本地filesystem的方式存儲,存放在默認的路徑 /var/lib/glance/images 下,當把本地的文件系統修改為分布式的文件系統ceph之後,原本在系統中鏡像將無法使用,所以建議當前的鏡像刪除,部署好ceph之後,再統一上傳至ceph中存儲。
※Nova 負責虛擬機的生命周期管理,包括創建,刪除,重建,開機,關機,重啟,快照等,作為openstack的核心,nova負責IaaS中計算重要的職責,其中nova的存儲格外重要,默認情況下,nova將instance的數據存放在/var/lib/nova/instances/%UUID目錄下,使用本地的存儲空間。使用這種方式帶來的好處是:簡單,易實現,速度快,故障域在一個可控制的范圍內。然而,缺點也非常明顯:compute出故障,上面的虛擬機down機時間長,沒法快速恢復,此外,一些特性如熱遷移live-migration,虛擬機容災nova evacuate等高級特性,將無法使用,對於後期的雲平台建設,有明顯的缺陷。對接 Ceph 主要是希望將實例的系統磁碟文件儲存到 Ceph 集群中。與其說是對接 Nova,更准確來說是對接 QEMU-KVM/libvirt,因為 librbd 早已原生集成到其中。
※Cinder 為 OpenStack 提供卷服務,支持非常廣泛的後端存儲類型。對接 Ceph 後,Cinder 創建的 Volume 本質就是 Ceph RBD 的塊設備,當 Volume 被虛擬機掛載後,Libvirt 會以 rbd 協議的方式使用這些 Disk 設備。除了 cinder-volume 之後,Cinder 的 Backup 服務也可以對接 Ceph,將備份的 Image 以對象或塊設備的形式上傳到 Ceph 集群。
使用ceph的rbd介面,需要通過libvirt,所以需要在客戶端機器上安裝libvirt和qemu,關於ceph和openstack結合的結構如下,同時,在openstack中,需要用到存儲的地方有三個:
為 Glance、Nova、Cinder 創建專用的RBD Pools池
需要配置hosts解析文件,這里最開始已經配置完成,如未添加hosts解析需要進行配置
在cephnode01管理節點上操作 ;命名為:volumes,vms,images
記錄:刪除存儲池的操作
在cephnode01管理節點上操作 ;
針對pool設置許可權,pool名對應創建的pool
nova-compute與cinder-volume都部署在計算節點 ,不必重復操作,如果計算節點與存儲節點分離需要分別推送;
全部計算節點配置;以compute01節點為例;
Glance 為 OpenStack 提供鏡像及其元數據注冊服務,Glance 支持對接多種後端存儲。與 Ceph 完成對接後,Glance 上傳的 Image 會作為塊設備儲存在 Ceph 集群中。新版本的 Glance 也開始支持 enabled_backends 了,可以同時對接多個存儲提供商。
寫時復制技術(-on-write) :內核只為新生成的子進程創建虛擬空間結構,它們復制於父進程的虛擬空間結構,但是不為這些段分配物理內存,它們共享父進程的物理空間,當父子進程中有更改相應的段的行為發生時,再為子進程相應的段分配物理空間。寫時復制技術大大降低了進程對資源的浪費。
全部控制節點進行配置;以controller01節點為例;
只修改涉及glance集成ceph的相關配置
變更配置文件,重啟服務
ceph官網介紹 QEMU和塊設備
對接 Ceph 之後,通常會以 RAW 格式創建 Glance Image,而不再使用 QCOW2 格式,否則創建虛擬機時需要進行鏡像復制,沒有利用 Ceph RBD COW 的優秀特性。
總結
將openstack集群中的glance鏡像的數據存儲到ceph中是一種非常好的解決方案,既能夠保障鏡像數據的安全性,同時glance和nova在同個存儲池中,能夠基於-on-write(寫時復制)的方式快速創建虛擬機,能夠在秒級為單位實現vm的創建。
全部計算節點進行配置; 以compute01節點為例;只修改glance集成ceph的相關配置
全部計算節點重啟cinder-volume服務;
任意openstack控制節點上查看;
在任意控制節點為cinder的ceph後端存儲創建對應的type,在配置多存儲後端時可區分類型;
為ceph type設置擴展規格,鍵值 volume_backend_name ,value值 ceph
任意控制節點上創建一個1GB的卷 ;最後的數字1代表容量為1G
查看創建好的卷
openstack創建一個空白 Volume,Ceph相當於執行了以下指令
從鏡像創建 Volume 的時候應用了 Ceph RBD COW Clone 功能,這是通過 glance-api.conf [DEFAULT] show_image_direct_url = True 來開啟。這個配置項的作用是持久化 Image 的 location,此時 Glance RBD Driver 才可以通過 Image location 執行 Clone 操作。並且還會根據指定的 Volume Size 來調整 RBD Image 的 Size。
一直存在的cirros_qcow2鏡像為對接ceph之前的鏡像,現在已無法使用,所以將之刪除
在openstack上從鏡像創建一個Volume,Ceph相當於執行了以下指令
任意控制節點操作;
查看快照詳細信息
在openstack上對鏡像的卷創建快照,Ceph相當於執行了以下指令
如果說快照時一個時間機器,那麼備份就是一個異地的時間機器,它具有容災的含義。所以一般來說 Ceph Pool backup 應該與 Pool images、volumes 以及 vms 處於不同的災備隔離域。
https://www.cnblogs.com/luohaixian/p/9344803.html
https://docs.openstack.org/zh_CN/user-guide/backup-db-incremental.html
一般的,備份具有以下類型:
在虛擬磁碟映像的計算節點上使用本地存儲有一些缺點:
Nova 為 OpenStack 提供計算服務,對接 Ceph 主要是希望將實例的系統磁碟文件儲存到 Ceph 集群中。與其說是對接 Nova,更准確來說是對接 QEMU-KVM/libvirt ,因為 librbd 早已原生集成到其中。
如果需要從ceph rbd中啟動虛擬機,必須將ceph配置為nova的臨時後端;
推薦在計算節點的配置文件中啟用rbd cache功能;
為了便於故障排查,配置admin socket參數,這樣每個使用ceph rbd的虛擬機都有1個socket將有利於虛擬機性能分析與故障解決;
相關配置只涉及全部計算節點ceph.conf文件的[client]與[client.cinder]欄位,以compute163節點為例
全部計算節點配置 ceph.conf文件相關的 [client] 與 [client.cinder] 欄位,以compute01節點為例;
在全部計算節點配置nova後端使用ceph集群的vms池,以compute01節點為例;
在全部計算節點操作;
在全部計算節點操作,以compute01節點為例;
以下給出libvirtd.conf文件的修改處所在的行num
⑥ 全面認識openstack,它到底是什麼包含什麼
(1)官方的解釋相信大家都已經了解了,不了解也沒有關系。現在從常識的角度來給大家解釋和說明。
OpenStack是一個雲平台管理的項目,它不是一個軟體。這個項目由幾個主要的組件組合起來完成一些具體的工作。
OpenStack是一個旨在為公共及私有雲的建設與管理提供軟體的開源項目,OpenStack被公認作為基礎設施即服務(簡稱IaaS)資源的通用前端。
如果這些還不明白,那麼從另外的角度給大家介紹:
首先讓大家看下面兩個圖就很簡單明了了:
此圖為openstack的登錄界面
下面是openstack的一個管理界面
從這兩個圖,相信有一定開發經驗,就能看出openstack是什麼了。可以說他是一個框架,甚至可以從軟體的角度來理解它。如果不明白,就從傳統開發來講解。不知道你是否了解oa,erp等系統,如果不了解可以到網上去找,資料一大把。他和oa,erp有什麼不同。很簡單就是openstack是用做雲計算的一個平台,或則一個解決方案。它是雲計算一個重要組成部分。
上面對openstack有了一個感性的認識。
(2)openstack能幹什麼。
大家都知道阿里雲平台,網路雲平台,而阿里雲平台據傳說就是對openstack的二次開發。對於二次開發相信只要接觸過軟體的都會明白這個概念。不明白的自己網上去查一下。也就是說openstack,可以搭建雲平台,什麼雲平台,公有雲,私有雲。現在網路在招聘的私有雲工程師,應該就是這方面的人才。
(3)openstack自身都包含什麼
以下是5個OpenStack的重要構成部分:
l Nova – 計算服務
l Swift – 存儲服務
l Glance – 鏡像服務
l Keystone – 認證服務
l Horizon – UI服務
圖1 OpenStack基本構架
下圖展示了Keystone、Dashboard二者與其它OpenStack部分的交互。
下面詳細介紹每一個服務:
(一)OpenStack計算設施—-Nova Nova是OpenStack計算的彈性控制器。OpenStack雲實例生命期所需的各種動作都將由Nova進行處理和支撐,這就意味著Nova以管理平台的身份登場,負責管理整個雲的計算資源、網路、授權及測度。雖然Nova本身並不提供任何虛擬能力,但是它將使用libvirt API與虛擬機的宿主機進行交互。Nova通過Web服務API來對外提供處理介面,而且這些介面與Amazon的Web服務介面是兼容的。
功能及特點
l 實例生命周期管理
l 計算資源管理
l 網路與授權管理
l 基於REST的API
l 非同步連續通信
l 支持各種宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
OpenStack計算部件
l Nova彈性雲包含以下主要部分:
l API Server(nova-api)
l 消息隊列(rabbit-mq server)
l 運算工作站(nova-compute)
l 網路控制器(nova-network)
l 卷管理(nova-volume)
l 調度器(nova-scheler)
API伺服器(nova-api)
API伺服器提供了雲設施與外界交互的介面,它是外界用戶對雲實施管理的唯一通道。通過使用web服務來調用各種EC2的API,接著API伺服器便通過消息隊列把請求送達至雲內目標設施進行處理。作為對EC2-api的替代,用戶也可以使用OpenStack的原生API,我們把它叫做「OpenStack API」。
消息隊列(Rabbit MQ Server)
OpenStack內部在遵循AMQP(高級消息隊列協議)的基礎上採用消息隊列進行通信。Nova對請求應答進行非同步調用,當請求接收後便則立即觸發一個回調。由於使用了非同步通信,不會有用戶的動作被長置於等待狀態。例如,啟動一個實例或上傳一份鏡像的過程較為耗時,API調用就將等待返回結果而不影響其它操作,在此非同步通信起到了很大作用,使整個系統變得更加高效。
運算工作站(nova-compute)
運算工作站的主要任務是管理實例的整個生命周期。他們通過消息隊列接收請求並執行,從而對實例進行各種操作。在典型實際生產環境下,會架設許多運算工作站,根據調度演算法,一個實例可以在可用的任意一台運算工作站上部署。
網路控制器(nova-network)
網路控制器處理主機的網路配置,例如IP地址分配,配置項目VLAN,設定安全群組以及為計算節點配置網路。
卷工作站(nova-volume)
卷工作站管理基於LVM的實例卷,它能夠為一個實例創建、刪除、附加卷,也可以從一個實例中分離卷。卷管理為何如此重要?因為它提供了一種保持實例持續存儲的手段,比如當結束一個實例後,根分區如果是非持續化的,那麼對其的任何改變都將丟失。可是,如果從一個實例中將卷分離出來,或者為這個實例附加上卷的話,即使實例被關閉,數據仍然保存其中。這些數據可以通過將卷附加到原實例或其他實例的方式而重新訪問。
因此,為了日後訪問,重要數據務必要寫入卷中。這種應用對於數據伺服器實例的存儲而言,尤為重要。
調度器(nova-scheler)
調度器負責把nova-API調用送達給目標。調度器以名為「nova-schele」的守護進程方式運行,並根據調度演算法從可用資源池中恰當地選擇運算伺服器。有很多因素都可以影響調度結果,比如負載、內存、子節點的遠近、CPU架構等等。強大的是nova調度器採用的是可插入式架構。
目前nova調度器使用了幾種基本的調度演算法:
隨機化:主機隨機選擇可用節點;
可用化:與隨機相似,只是隨機選擇的范圍被指定;
簡單化:應用這種方式,主機選擇負載最小者來運行實例。負載數據可以從別處獲得,如負載均衡伺服器。
(二)OpenStack鏡像伺服器—-GlanceOpenStack鏡像伺服器是一套虛擬機鏡像發現、注冊、檢索系統,我們可以將鏡像存儲到以下任意一種存儲中:
本地文件系統(默認)
l OpenStack對象存儲
l S3直接存儲
l S3對象存儲(作為S3訪問的中間渠道)
l HTTP(只讀)
功能及特點
提供鏡像相關服務
Glance構件
l Glance控制器
l Glance注冊器
(三)OpenStack存儲設施—-Swift
Swift為OpenStack提供一種分布式、持續虛擬對象存儲,它類似於Amazon Web Service的S3簡單存儲服務。Swift具有跨節點百級對象的存儲能力。Swift內建冗餘和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆位元組)和大容量(多對象數量)的測度非常高效。
功能及特點
l 海量對象存儲
l 大文件(對象)存儲
l 數據冗餘管理
l 歸檔能力—–處理大數據集
l 為虛擬機和雲應用提供數據容器
l 處理流媒體
l 對象安全存儲
l 備份與歸檔
l 良好的可伸縮性
Swift組件
l Swift賬戶
l Swift容器
l Swift對象
l Swift代理
l Swift RING
Swift代理伺服器
用戶都是通過Swift-API與代理伺服器進行交互,代理伺服器正是接收外界請求的門衛,它檢測合法的實體位置並路由它們的請求。
此外,代理伺服器也同時處理實體失效而轉移時,故障切換的實體重復路由請求。
Swift對象伺服器
對象伺服器是一種二進制存儲,它負責處理本地存儲中的對象數據的存儲、檢索和刪除。對象都是文件系統中存放的典型的二進制文件,具有擴展文件屬性的元數據(xattr)。
注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是並沒有有效測試證明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同樣能運行良好。不過,XFS被認為是當前最好的選擇。
Swift容器伺服器
容器伺服器將列出一個容器中的所有對象,默認對象列表將存儲為SQLite文件(譯者註:也可以修改為MySQL,安裝中就是以MySQL為例)。容器伺服器也會統計容器中包含的對象數量及容器的存儲空間耗費。
Swift賬戶伺服器
賬戶伺服器與容器伺服器類似,將列出容器中的對象。
Ring(索引環)
Ring容器記錄著Swift中物理存儲對象的位置信息,它是真實物理存儲位置的實體名的虛擬映射,類似於查找及定位不同集群的實體真實物理位置的索引服務。這里所謂的實體指賬戶、容器、對象,它們都擁有屬於自己的不同的Rings。
(四)OpenStack認證服務(Keystone)
Keystone為所有的OpenStack組件提供認證和訪問策略服務,它依賴自身REST(基於Identity API)系統進行工作,主要對(但不限於)Swift、Glance、Nova等進行認證與授權。事實上,授權通過對動作消息來源者請求的合法性進行鑒定。如下圖所示:
Keystone採用兩種授權方式,一種基於用戶名/密碼,另一種基於令牌(Token)。除此之外,Keystone提供以下三種服務:
l 令牌服務:含有授權用戶的授權信息
l 目錄服務:含有用戶合法操作的可用服務列表
l 策略服務:利用Keystone具體指定用戶或群組某些訪問許可權
認證服務組件
服務入口:如Nova、Swift和Glance一樣每個OpenStack服務都擁有一個指定的埠和專屬的URL,我們稱其為入口(endpoints)。
l 區位:在某個數據中心,一個區位具體指定了一處物理位置。在典型的雲架構中,如果不是所有的服務都訪問分布式數據中心或伺服器的話,則也稱其為區位。
l 用戶:Keystone授權使用者
譯者註:代表一個個體,OpenStack以用戶的形式來授權服務給它們。用戶擁有證書(credentials),且可能分配給一個或多個租戶。經過驗證後,會為每個單獨的租戶提供一個特定的令牌。[來源:http://blog.sina.com.cn/s/blog_70064f190100undy.html]
l 服務:總體而言,任何通過Keystone進行連接或管理的組件都被稱為服務。舉個例子,我們可以稱Glance為Keystone的服務。
l 角色:為了維護安全限定,就雲內特定用戶可執行的操作而言,該用戶關聯的角色是非常重要的。
譯者註:一個角色是應用於某個租戶的使用許可權集合,以允許某個指定用戶訪問或使用特定操作。角色是使用許可權的邏輯分組,它使得通用的許可權可以簡單地分組並綁定到與某個指定租戶相關的用戶。
l 租間:租間指的是具有全部服務入口並配有特定成員角色的一個項目。
譯者註:一個租間映射到一個Nova的「project-id」,在對象存儲中,一個租間可以有多個容器。根據不同的安裝方式,一個租間可以代表一個客戶、帳號、組織或項目。
(五)OpenStack管理的Web介面—-Horizon
Horizon是一個用以管理、控制OpenStack服務的Web控制面板,它可以管理實例、鏡像、創建密匙對,對實例添加卷、操作Swift容器等。除此之外,用戶還可以在控制面板中使用終端(console)或VNC直接訪問實例。總之,Horizon具有如下一些特點:
l 實例管理:創建、終止實例,查看終端日誌,VNC連接,添加卷等
l 訪問與安全管理:創建安全群組,管理密匙對,設置浮動IP等
l 偏好設定:對虛擬硬體模板可以進行不同偏好設定
l 鏡像管理:編輯或刪除鏡像
l 查看服務目錄
l 管理用戶、配額及項目用途
l 用戶管理:創建用戶等
l 卷管理:創建卷和快照
l 對象存儲處理:創建、刪除容器和對象
l 為項目下載環境變數
⑦ Openstack概述 、 部署安裝環境 、 部署Openstack 、 Openstack操作基礎
案例1:配置yum倉庫
案例2:測試時間伺服器
案例3:配置yum倉庫
案例4:檢查基礎環境
案例5:部署Openstack
案例6:網路管理
案例7:登錄openstack
1 案例1:配置yum倉庫
1.1 問題
本案例要求配置基本環境:
配置三台虛擬機
2CPU,6G 內存,50G 硬碟
2CPU,4.5G 內存,100G 硬碟
配置靜態IP ifcfg-eth0
openstack : 192.168.1.10
nova: 192.168.1.11, 192.168.1.12
配置主機名 /etc/hosts,能夠相互 ping 通
配置 dns 伺服器 /etc/resolv.conf
1.2 方案
此實驗的整體方案需要三台機器,openstack作為主節點,nova01 和 nova02作為額外節點,真機做為DNS轉發和NTP的伺服器(這里不再在表-1中體現),提供域名解析和時間同步服務,具體情況如表-1所示:
表-1
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:准備三台虛擬機
[student@room9pc01 images]$base-vm openstack nova01 nova02
[student@room9pc01 images]$virsh start openstack
[student@room9pc01 images]$virsh start nova01
[student@room9pc01 images]$virsh start nova02
2)opensatck主機擴容為50G
[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/openstack.img--size 100G openstack
[student@room9pc01 images]$ virsh console openstack
[root@localhost~]#/usr/bin/growpart /dev/vda1
[root@localhost~]#/usr/sbin/xfs_growfs /
[root@localhost~]# df-h
Filesystem Size Used Avail Use%Mounted on
/dev/vda1 50G 914M 50G2%/
3)nova01 和 nova02 主機擴容為100G(以nova01為例)
[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/nova01.img--size 50G nova01
重新定義'/var/lib/libvirt/images/nova01.img'塊設備大小
[root@localhost~]#/usr/bin/growpart /dev/vda1
[root@localhost~]#/usr/sbin/xfs_growfs /
[root@localhost~]# df-h
Filesystem Size Used Avail Use%Mounted on
/dev/vda1 100G 917M 100G1%/
4)三台主機配置靜態ip(以一台為例)
openstack:192.168.1.10
nova01: 192.168.1.11
nova02: 192.168.1.12
[root@localhost~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
5)三台主機修改主機名,配置/etc/hosts,和/etc/resolv.conf文件(以一台為例)
[root@localhost~]# hostname openstack
[root@localhost~]# echo openstack>/etc/hostname
[root@localhost~]#vim /etc/hosts
192.168.1.10openstack
192.168.1.11nova01
192.168.1.12nova02
[root@localhost~]#vim /etc/resolv.conf//去掉search開頭的行
;generatedby /usr/sbin/dhclient-script
nameserver192.168.1.254
6)修改三台主機的內存(openstack6G,nova01 和nova02 4G)
[student@room9pc01~]$ virsh edit openstack
...
<memory unit='KiB'>6588282</memory>
<currentMemory unit='KiB'>6588282</currentMemory>
...
[student@room9pc01~]$ virsh edit nova01
...
<memory unit='KiB'>4588282</memory>
<currentMemory unit='KiB'>4588282</currentMemory>
...
[student@room9pc01~]$ virsh start openstack
域 openstack 已開始
[student@room9pc01~]$ virsh start nova01
域 nova01 已開始
[student@room9pc01~]$ virsh start nova02
域 nova02 已開始
2 案例2:測試時間伺服器
2.1 問題
本案例要求掌握時間服務的配置:
修改 openstack,nova01,nova02 的時間伺服器
重啟服務後驗證配置
2.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:修改openstack,nova01 和 nova02 的時間伺服器(以一台為例)
[root@openstack~]#vim /etc/chrony.conf
...
server192.168.1.254iburst
[root@openstack~]# systemctl restart chronyd
步驟二:驗證
[root@openstack~]# chronyc sources-v
...
||||\
MSName/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^*gateway36376-93ns[+903ns]+/-26ms
步驟三:兩台虛擬機配置靜態ip
注意:兩台主機同樣操作,改一下ip即可(以openstack.te.cn為例)
[root@localhost~]# echo openstack.te.cn>/etc/hostname
[root@localhost~]# hostname openstack.te.cn
//另外一台主機改名為nova.te.cn,配置ip為1.20
[root@openstack~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
IPV6INIT="no"
IPV4_FAILURE_FATAL="no"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
[root@openstack~]# systemctl restart network
3 案例3:配置yum倉庫
3.1 問題
本案例要求配置yum倉庫:
配置 yum 源,軟體倉庫一共 4 個
3.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:三台主機配置yum源(以一台主機為例,共10670個軟體包)
[student@room9pc01~]$cd /linux-soft/04/openstack/
[student@room9pc01 openstack]$ ls
cirros.qcow2 RHEL7-extras.iso RHEL7OSP-10.iso small.qcow2
[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7-extras
[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7OSP-10
[student@room9pc01 openstack]$ mount RHEL7-extras.iso /var/ftp/RHEL7-extras/
mount:/dev/loop1 防寫,將以只讀方式掛載
[student@room9pc01 openstack]$ mount RHEL7OSP-10.iso /var/ftp/RHEL7OSP-10/
mount:/dev/loop2 防寫,將以只讀方式掛載
[root@openstack~]#vim /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever-Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=1
[RHEL7-extras]
name=RHEL7-extras
baseurl="ftp://192.168.1.254/RHEL7-extras"
enabled=1
gpgcheck=0
[RHEL7OSP-package]
name=RHEL7OSP-package
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[RHEL7OSP-devtools]
name=RHEL7OSP-devtools
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0
[root@openstack~]#scp /etc/yum.repos.d/local.repo192.168.1.11:/etc/yum.repos.d/
[email protected]'s password:
local.repo 100% 490 484.4KB/s 00:00
[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/
[email protected]'s password:
local.repo
4 案例4:檢查基礎環境
4.1 問題
本案例要求准備基礎環境,為安裝openstack做准備:
安裝額外的軟體包
是否卸載firewalld 和 NetworkManager
檢查配置主機網路參數(靜態IP)
主機名必須能夠相互 ping 通
檢查配置主機yum源(4個,10670)
依賴軟體包是否安裝
檢查NTP伺服器是否可用
檢查 /etc/resolv.conf 不能有 search 開頭的行
4.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:檢查基礎環境
1)安裝額外軟體包(三台機器操作,這里以一台為例)
[root@openstack yum.repos.d]# yum install-y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools
2)是否卸載firewalld 和 NetworkManager
[root@openstack~]# rpm-qa|grep NetworkManager*
[root@openstack~]# rpm-qa|grep firewalld*
3)檢查配置主機網路參數
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
4)驗證主機名是否互通
[root@openstack~]# ping openstack
...
64bytes fromopenstack(192.168.1.10):icmp_seq=1ttl=255time=0.023ms
64bytes fromopenstack(192.168.1.10):icmp_seq=2ttl=255time=0.027ms
...
[root@openstack~]# ping nova01
PINGnova01(192.168.1.11)56(84)bytes of data.
64bytes fromnova01(192.168.1.11):icmp_seq=1ttl=255time=0.139ms
...
[root@openstack~]# ping nova02
PINGnova02(192.168.1.12)56(84)bytes of data.
64bytes fromnova02(192.168.1.12):icmp_seq=1ttl=255time=0.251ms
...
5)檢查配置主機yum源
[root@openstack~]# yum repolist
已載入插件:fastestmirror
Loading mirror speeds from cached hostfile
源標識 源名稱 狀態
RHEL7-extras RHEL7-extras76
RHEL7OSP-devtools RHEL7OSP-devtools3
RHEL7OSP-package RHEL7OSP-package680
local_repo CentOS-7-Base9,911
repolist:10,670
6)檢查時間同步是否可用
[root@openstack~]# chronyc sources-v
210Numberof sources=1
....
||||\
MSName/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^*gateway3737728+31us[+89us]+/-25ms
[root@openstack~]#
7)檢查/etc/resolv.conf 不能有 search 開頭的行
[root@openstack~]#cat /etc/resolv.conf
;generatedby /usr/sbin/dhclient-script
nameserver192.168.1.254
5 案例5:部署Openstack
5.1 問題
本案例要求通過packstack完成以下配置:
通過packstack部署Openstack
根據相關日誌文件進行排錯
5.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:安裝packstack
[root@openstack~]# yum install-y openstack-packstack
[root@openstack~]# packstack--gen-answer-file answer.ini
//answer.ini與answer.txt是一樣的,只是用vim打開answer.ini文件有顏色
Packstack changed given value to requiredvalue /root/.ssh/id_rsa.pub
[root@openstack~]# vim answer.ini
42CONFIG_SWIFT_INSTALL=n
45CONFIG_CEILOMETER_INSTALL=n//計費相關模塊
49CONFIG_AODH_INSTALL=n//計費相關模塊
53CONFIG_GNOCCHI_INSTALL=n//計費相關模塊
75CONFIG_NTP_SERVERS=192.168.1.254//時間伺服器的地址
98CONFIG_COMPUTE_HOSTS=192.168.1.11
102CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11
333CONFIG_KEYSTONE_ADMIN_PW=a//修改管理員的密碼
840CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan//驅動類型
876CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5
//設置組播地址,最後一個隨意不能為0和255,其他固定
910CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex//物理網橋的名稱
921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接
1179CONFIG_PROVISION_DEMO=n//DEMO是否測試
[root@openstack~]# packstack--answer-file=answer.ini
Welcome to the Packstack setup utility
The installation log file is available at:/var/tmp/packstack/20190423-170603-b43g_i/openstack-setup.log
Installing:
Clean Up[DONE]
Discovering ip protocol version[DONE]
[email protected]'s password:
[email protected]'s password:
Setting up ssh keys
****Installation completed successfully******//出現這個為成功
6 案例6:網路管理
6.1 問題
本案例要求運用OVS完成以下配置:
查看外部OVS網橋及其埠
驗證OVS配置
6.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:查看外部OVS網橋
1)查看br-ex網橋配置(br-ex為OVS網橋設備)
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-br-ex
ONBOOT="yes"
NM_CONTROLLED="no"
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="static"
TYPE=OVSBridge
2)查看eth0網卡配置(該網卡為OVS網橋的介面)
[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none
3)驗證OVS配置
[root@openstack~]# ovs-vsctl show
Bridge br-ex
Controller"tcp:127.0.0.1:6633"
is_connected:true
fail_mode:secure
Port br-ex
Interface br-ex
type:internal
Port phy-br-ex
Interface phy-br-ex
type:patch
options:{peer=int-br-ex}
Port"eth0"
Interface"eth0"
ovs_version:"2.5.0"
7 案例7:登錄openstack
7.1 問題
本案例要求通過Horizon完成以下操作:
修改/etc/httpd/conf.d/15-horizon_vhost.conf 配置文件,使其可以成功登錄openstack
7.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:瀏覽器訪問openstack
1)瀏覽器訪問
[root@openstack~]# firefox192.168.1.10//訪問失敗
2)需要改配置文件並重新載入
[root@openstack~]#
[root@openstack conf.d]# vi15-horizon_vhost.conf
35WSGIProcessGroup apache
36WSGIApplicationGroup%{GLOBAL}//添加這一行
[root@openstack conf.d]# apachectl graceful//重新載入配置文件
3)瀏覽器訪問,出現頁面,如圖-6所示:
圖-6
3)查看用戶名和密碼
[root@openstack conf.d]# cd
[root@openstack~]# ls
answer.ini keystonerc_admin//keystonerc_admin生成的文件,裡面有用戶名和密碼
[root@openstack~]# cat keystonerc_admin
unset OS_SERVICE_TOKEN
exportOS_USERNAME=admin//用戶名
exportOS_PASSWORD=a//密碼
exportOS_AUTH_URL=http://192.168.1.10:5000/v2.0
exportPS1='[\u@\h \W(keystone_admin)]\$ '
exportOS_TENANT_NAME=admin
exportOS_REGION_NAME=RegionOne
4)在火狐瀏覽器中輸入用戶名和密碼,登錄後頁面如圖-7所示:
圖-7
安裝openstack可能會出現的錯誤以及排錯方法
1)ntp時間不同步,如圖-2所示:
圖-2
解決辦法:查看ntp時間伺服器,是否出現*號,若沒有,查看配置文件,配置ntp伺服器步驟在案例3,可以參考
[root@room9pc01~]# chronyc sources-v//出現*號代表NTP時間可用
^*120.25.115.20261762-753us[-7003us]+/-24ms
[root@openstack~]# chronyc sources-v
^*192.168.1.25439377504+50us[-20us]+/-24ms
[root@nova~]# chronyc sources-v
^*192.168.1.25439377159-202us[-226us]+/-24ms
2)網橋名稱寫錯,如圖-3所示:
圖-3
解決辦法:檢查配置文件
[root@openstack~]# vim answer.ini
...
921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接
...
3)若/root/.ssh/id_rsa.pub,提示password,同樣是配置文件沒有寫對,如圖-4所示:
圖-4
4)yum源沒有配置正確,如圖-5所示:
圖-5
解決辦法:檢查yum是否為10853個軟體包,查看是否是yum源沒有配置正確,之後安裝oprnstack-dashboard
5)出現Cannot allocate memory,如圖-6所示:
圖-6
解決辦法:
內存不足,重新啟動主機
6)出現/usr/bin/systemctl start openvswith ... falied,說明是ssse3指令集的錯誤,如圖-7所示:
圖-7
解決辦法:編輯openstack的xml文件,在裡面添加
<cpu mode='host-passthrough'>
</cpu>
7)若出現 Could not prefetch... 『openstack』。 如圖-8所示:
圖-8
配置文件裡面有中文符號
9)訪問openstack出錯
圖-9
沒有修改Apache配置文件
4)創建名為myproject的項目
[root@openstack~]# source~/keystonerc_admin //初始化環境變數
[root@openstack~(keystone_admin)]# openstack project create myproject
+-------------+----------------------------------+
|Field|Value|
+-------------+----------------------------------+
|description|None|
|enabled|True|
|id||
|name|myproject|
+-------------+----------------------------------+
5)查看項目信息
[root@openstack~(keystone_admin)]# openstack project list
+----------------------------------+-----------+
|ID|Name|
+----------------------------------+-----------+
||services|
||admin|
||myproject|
+----------------------------------+-----------+
6)更新vcpu配額為30
[root@openstack~(keystone_admin)]# nova quota-update--cores30myproject
7)刪除myproject
[root@openstack~(keystone_admin)]# openstack projectdeletemyproject
⑧ OpenStack neutron相關概念闡述
VLAN網路允許用戶使用外部物理網路中的VLAN ID創建多個租戶或供應商網路。VLAN網路通過VLAN ID進行二層網路的隔離, 相同VLAN ID內部的實例可以實現自由通信 ,而 不同VLAN之間的實例通信則需要經過三層路由的轉發 。由於VLAN網路可以實現靈活多樣的網路劃分與隔離,故VLAN網路是生產環境中使用最為普遍的網路。而在雲計算環境中,VLAN網路主要用於私有雲環境中,對於大型公有雲數據中心,在租戶增加的情況下,VLAN ID的限制是VLAN網路的一大弊端(最大隻有4096個)。
為了創建豐富的網路拓撲,Neutron提供了兩種網路類型,即 租戶網路(Project Network) 和 供應商網路(Provider Network) 。在租戶網路中,每個租戶可以創建多個私有網路,租戶可以自定義私有網路的IP地址范圍,此外,不同的租戶可以同時使用相同的IP地址或地址段。 與租戶網路不同,供應商網路由雲管理員創建 ,並且必須與現有的物理網路匹配。
為了實現不同租戶網路互相隔離,Neutron提供了幾種不同的網路拓撲與隔離技術 ,Flat網路便是其中之一。在Flat網路中, 不同計算節點上的全部實例接入同一個大二層網路內,全部實例共享此網路,不存在VLAN標記或其他網路隔離技術 。接入Flat網路的全部實例通過數據中心核心路由接入Internet,相對於其他的網路類型,Flat網路是最簡單的網路類型。在Neutron的網路實現中,可以同時部署多個隔離的Flat網路,但是 每個Flat網路都要獨佔一個物理網卡 ,這意味著要通過Flat網路來實現多租戶的隔離,尤其是在公有雲環境中,這種方法似乎不太現實。
GRE和VxLAN是一種 網路封裝協議 ,基於這類封裝協議可以創建重疊(overlay)網路以實現和控制不同計算節點實例之間的通信。 GRE和VxLAN的主要區別 在於GRE網路通過IP包進行數據傳輸,而VxLAN通過UDP包進行數據傳輸, GRE或VxLAN數據包在流出節點之前會被打上相應的GRE或VxLAN網路ID(Segmentation ID),而在進入節點後對應的ID會被剝離,之後再進入節點內部的虛擬網路進行數據轉發 。
GRE和VxLAN網路中的 數據流要進入外部網路,必須配有路由器, 而且要將租戶網路與外部網路互連,路由器也是必備的。在GRE和VxLAN網路中, 路由器的主要作用在於通過實例浮動IP提供外部網路對實例的直接訪問。 在很多公有雲環境中,GRE和VxLAN網路被廣泛使用,因此用戶在公有雲上創建實例後,通常需要向供應商購買或申請通信運營商IP和一個虛擬路由器,並將運營商IP作為實例浮動IP,才能通過Internet訪問自己的公有雲實例。
埠(Port)在OpenStack網路中是一種虛擬介面設備,用於模擬物理網路介面。在Neutron中, 埠是網路設備連接到某個虛擬網路的接入點 ,如虛擬機的NIC只能通過埠接入虛擬網路,埠還描述了與網路相關的配置,如配置到埠上的MAC和IP。
子網(Subnet)代表的是一個IP段和相關的配置狀態。子網IP和網路配置信息通常被認為是網路服務為租戶網路和供應商網路提供的原生IPAM。當某個網路上有新的埠被創建時,網路服務便會使用子網提供的IP段為新埠分配IP。
一般來說,終端用戶可以在沒有任何約束的情況下使用有效的IP創建子網,不過有時需要為admin或租戶用戶預先定義可用IP池,並在創建子網時從此IP池中自動分配地址。通過子網池,便可要求每個創建的子網必須在預定義的子網池中,從而約束子網所能使用的IP。此外,子網池的使用還可以避免IP被重復使用和不同子網使用重疊的IP。
在Neutron中,路由Router是個用以在不同網路中進行數據包轉發的邏輯組件,即路由是個虛擬設備,在特定插件支持下,路由還提供了L3和NAT功能,以使得外部網路(不一定是Internet)與租戶私有網路之間實現相互通信 。在Neutron中, 虛擬路由通常位於網路節點上 ,而租戶私有網路要實現與外部Provider物理網路(或Public網路)的通信,則必須經過虛擬路由。Neutron網路節點虛擬路由連接租戶網路和外部網路的示意如下圖所示。
路由通常包含內部介面和外部介面,如上圖所示,位於租戶網路中的主機Host_A和主機Host_B通過內部介面接入路由,並通過路由公共網關(外部介面)訪問外部Provider網路和Public中的主機Host_C。但是Host_C要訪問租戶私網中的Host_A和Host_B主機,則必須通過路由DNAT功能才能實現,因此需要為Host_A和Host_B主機配置Floating IP。
安全組(Security Group)是虛擬防火牆的規則集合,這些 防火牆規則對外部訪問實例和實例訪問外部的數據包實現了埠級別(Port Level)的控制 。安全組使用默認拒絕策略(Default Deny Policy),其僅包含允許特定數據流通過的規則,每個埠都可以通過附加的形式添加到一個或多個安全組中,防火牆驅動會自動將安全組規則轉換為底層的數據包過濾技術,如iptables。 在Neutron中,每個項目(Project)都包含一個名為default的默認安全組,default安全組允許實例對外的全部訪問,但是拒絕全部外網對實例的訪問 。如果在創建實例時未指定安全組,則Neutron會自動使用默認安全組default。同樣,如果創建埠時沒有指定安全組,則default安全組也會被默認用到此埠。 要訪問特定實例中某個埠的應用程序,必須在該實例的安全組中開通應用程序要訪問的埠 。
在雲計算網路中,一個租戶可以有多個租戶子網,租戶子網通常稱為 內部網路 (簡稱內網),不同內網中通常會接入不同用途的實例。租戶內部子網之間的數據訪問通常稱為 東西向通信 。此外,位於租戶內網中的應用要對外提供服務,則必須實現外部網路與租戶網路彼此之間的通信,這包括了外網訪問內網和內網訪問外網兩種方式,通常內外網之間的訪問稱為 南北向通信 。網路東西向通信和南北向通信的示意圖如圖所示。
在圖中,子網A與子網B之間的通信稱為網路的東西流向,外部網路與租戶網路之間的通信稱為網路的南北向流量。由於子網A和子網B屬於不同的子網,因此網路東西向通信需要Router轉發,同樣,外部網路與租戶網路之間的南北向通信也必須經過Router轉發才能實現。在雲計算網路環境中, Router的東西向轉發實現了內部子網之間的通信 ,而 南北向轉發實現了內部與外部網路之間的通信 。
源地址轉換(Source Network Address Transfer, SNAT) 主要用於控制內網對外網的訪問,SNAT通常只需一個外部網關,而無須屬於外部網路的浮動IP(Floating IP) ,即可實現內網全部實例對外網的訪問。在內網存在大量實例的情況下,相對DNAT, SNAT可以節約大量外網IP。在SNAT中,盡管內部私網可以訪問外網,但是外網卻不能訪問內部私網,因而SNAT具有很好的安全防護機制。 很多企業為了防止外網入侵都會使用SNAT來實現內網對Internet的訪問, 而在OpenStack網路中,SNAT主要用來實現租戶虛擬機實例對外網的訪問。SNAT的工作原理就是,內部私網TCP/IP數據包在進入路由後,數據包中的私網源IP會被路由上的外網網關IP替換,這是源地址轉換的核心步驟,即將數據包中源IP轉換為外網網關地址。這里再次指出,在私有或者公有雲中,虛擬機要訪問外網,並不意味著必須為虛擬機分配Floating IP,而只需創建路由並為路由設置外網網關,將內網接入路由即可實現內網實例對外網的訪問。由於SNAT是在數據包經過路由之後再進行的IP替換,因此SNAT又稱POST-Routing。
目的地址轉換(Destination Network Address Transfer, DNAT)主要用於外網對內網的訪問,由於外網要訪問位於內網中的某個特定實例,因此必須向位於外網中的訪問客戶端提供具體的目的IP,而這個實例目的IP通常稱為Floating IP。Floating IP並不屬於內網地址,而是外網地址。Floating IP與內網實例地址是一一綁定的關系,它們之間的地址轉換便是DNAT。一旦為實例綁定Floating IP,位於外網中的訪問客戶端便可通過該Floating IP直接訪問內網中的實例。目前很多公有雲供應商都是通過DNAT的形式, 利用電信運行商提供的公網IP段創建一個Floating IP ,並將其綁定到租戶的特定虛擬機上,從而允許租戶基於Internet訪問位於供應商數據中心的虛擬機。 DNAT的工作原理就是, 在外網數據包進入路由之前,將數據包中的目的地址(屬於外網)替換為內部私網地址(租戶內網網關地址),這也是目的地址轉換的核心步驟。經過DNAT之後,數據包目的地址被替換並進入路由,路由便將數據包轉發到對應的虛擬機。DNAT過程發生在進入路由之前,即先將外網目的IP替換成為內網私有IP再進入路由進行轉發(地址替換發生在路由之前),因此,DNAT又稱PRE-Routing。
在Linux系統中,網路命名空間(Network Namespace)就是一個虛擬的網路設備, 網路命名空間有獨立的路由表、iptables策略和介面設備等 ,網路命名空間彼此之間完全隔離。假設系統中有eth0和eth1兩個網卡設備,且eth0屬於命名空間namespace1,而eth1屬於命名空間namespace2,則eth1和eth2就類似於兩個獨立網路設備上的介面,彼此相互獨立,而且只有進入各自的命名空間後,才能夠對命名空間中的介面設備進行配置更改與查看。因此,如果eth0和eth1加入各自的命名空間後,在Linux系統中,針對全局系統的網路配置命令ifconfig是不能看到這兩個網卡設備的相關配置信息的,必須進入各自的命名空間使用此命令才能看到相關信息。在Linux中,使用命令ip netns可以查看系統中的全部網路命名空間,要配置或者查看命名空間中的設備,則需要進入特定命名空間並在命名空間中執行相應命令。例如,當前系統中有一個路由命名空間qrouter-xxx,想要查看該命名空間中的介面和IP配置情況,可以執行命令:
ip netns exec qrouter-xxx ip addr show
其中,ip netns exec qrouter-xxx指明了運行ip addr show命令的命名空間。命名空間是Linux系統中使用非常廣泛的技術,尤其是在網路技術領域,命名空間具有極佳的網路設備模擬能力和配置隔離性。因此在Neutron項目中,網路命名空間被大量使用,例如不同的租戶網路可以使用重疊的IP地址,就是因為不同租戶具有獨立的路由命名空間。