openstacknova源碼
⑴ 源碼安裝openstack 的glance部分,沒有glance命令,怎麼安裝
我也是看到這部分沒有相關命令,我是直接檢查yum list是否有glance包,然後yum安裝glance一次。命令即可出現,並且後面很多配置文件和自啟動文件,包括nova.conf配置文件等等,老男孩都沒有放上去。後面,我都是自己手動寫入到文本引入進去。還是建議樓主,查看官方手冊。
⑵ 如何從零開始學習OpenStack
1)先安裝OpenStack的環境,幾種方法
第一種方法:先安裝docker,下載openstack的鏡像,關於docker的使用資料Docker資料 網上搜索一下,很多,比較容易學習和使用
第二種方法:使用fuel來安裝 Fuel 30 分鍾快速安裝OpenStack
2)安裝後,先去熟悉如何應用OpenStack
3)建議你先從horizon模塊開始研究源碼,邊研究,邊試著做些修改,這樣切入比較容易點,千萬別以上來就去啃nova neutron模塊,難度太大,不太容易切如進去
4)開發環境可以考慮
pychorm
devstack
另外,官方文檔資料寫的很詳細,多去看看
⑶ 如何獲取openstack nova各版本源碼
如果你想獲取該演算法的源碼,請到launchpad上下載F版本之前(比如E版本)的nova源碼
[python] view plain
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2010 Openstack, LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Simple Scheler
"""
from nova import db
from nova import flags
from nova import exception
from nova.scheler import driver
from nova.scheler import chance
FLAGS = flags.FLAGS
flags.DEFINE_integer("max_cores", 16,
"maximum number of instance cores to allow per host")
flags.DEFINE_integer("max_gigabytes", 10000,
"maximum number of volume gigabytes to allow per host")
flags.DEFINE_integer("max_networks", 1000,
"maximum number of networks to allow per host")
class SimpleScheler(chance.ChanceScheler):
"""Implements Naive Scheler that tries to find least loaded host."""
def _schele_instance(self, context, instance_opts, *_args, **_kwargs):
"""Picks a host that is up and has the fewest running instances."""
elevated = context.elevated()
availability_zone = instance_opts.get('availability_zone')
zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')
if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-compute')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
return host
results = db.service_get_all_compute_sorted(elevated)
if zone:
results = [(service, cores) for (service, cores) in results
if service['availability_zone'] == zone]
for result in results:
(service, instance_cores) = result
if instance_cores + instance_opts['vcpus'] > FLAGS.max_cores:
msg = _("All hosts have too many cores")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
return service['host']
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
def schele_run_instance(self, context, request_spec, *_args, **_kwargs):
num_instances = request_spec.get('num_instances', 1)
instances = []
for num in xrange(num_instances):
host = self._schele_instance(context,
request_spec['instance_properties'], *_args, **_kwargs)
instance_ref = self.create_instance_db_entry(context,
request_spec)
driver.cast_to_compute_host(context, host, 'run_instance',
instance_id=instance_ref['id'], **_kwargs)
instances.append(driver.encode_instance(instance_ref))
return instances
def schele_start_instance(self, context, instance_id, *_args, **_kwargs):
instance_ref = db.instance_get(context, instance_id)
host = self._schele_instance(context, instance_ref,
*_args, **_kwargs)
driver.cast_to_compute_host(context, host, 'start_instance',
instance_id=instance_id, **_kwargs)
def schele_create_volume(self, context, volume_id, *_args, **_kwargs):
"""Picks a host that is up and has the fewest volumes."""
elevated = context.elevated()
volume_ref = db.volume_get(context, volume_id)
availability_zone = volume_ref.get('availability_zone')
zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')
if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-volume')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
driver.cast_to_volume_host(context, host, 'create_volume',
volume_id=volume_id, **_kwargs)
return None
results = db.service_get_all_volume_sorted(elevated)
if zone:
results = [(service, gigs) for (service, gigs) in results
if service['availability_zone'] == zone]
for result in results:
(service, volume_gigabytes) = result
if volume_gigabytes + volume_ref['size'] > FLAGS.max_gigabytes:
msg = _("All hosts have too many gigabytes")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_volume_host(context, service['host'],
'create_volume', volume_id=volume_id, **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
def schele_set_network_host(self, context, *_args, **_kwargs):
"""Picks a host that is up and has the fewest networks."""
elevated = context.elevated()
results = db.service_get_all_network_sorted(elevated)
for result in results:
(service, instance_count) = result
if instance_count >= FLAGS.max_networks:
msg = _("All hosts have too many networks")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_network_host(context, service['host'],
'set_network_host', **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
⑷ 全面認識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修改nova.conf後需要重啟什麼服務
看過openstack源碼的朋友都知道,在每個工程下,都有一個bin目錄,下面是每個服務進程的啟動腳本,使用python 腳本名就能運行一個服務。但對於Linux系統來說,有自己的一套服務管理程序。 關於早期的Linux系統的啟動,熟悉Linux的人大多應該知道...
⑹ 如何查看openstack版本
要想知道已安裝的Openstack是什麼版本,是一件非常煩的事,網路搜到的都是nova版本查看跟一些不相關的,後面用google中文查找也是如此,換成英文就有所收獲了,隨手就記下來,在此感謝一位給予我指導的學長。
先查看nova版本
環境說明:Centos7,只要在安裝了nova的節點上都可以查詢
查看nova版本有以下三種方式:
命令行查看
[root@controller ~]# nova-manage version
12.0.4-1.el712
python內部查看
有兩種方式:
nova-manageshell python查看
[root@controller ~]# nova-manage shell python
>>> import nova; nova.version.version_string();
'12.0.4'123
查看python文件名
Openstack 的源代碼都在/usr/lib/python2.7/site-packages/下可以找到nova包
[root@controller ~]# ll /usr/lib/python2.7/site-packages/|grep nova
drwxr-xr-x 32 root root 4096 Mar 25 23:21 nova
drwxr-xr-x 2 root root 143 Mar 25 23:20 nova-12.0.4-py2.7.egg-info
drwxr-xr-x 5 root root 4096 Mar 25 21:48 novaclient
drwxr-xr-x 2 root root 128 Mar 25 21:48 python_novaclient-2.30.1-py2.7.egg-info12345
看到nova後面帶這一長串數字的就是nova的版本了,知道nova版本之後就可以去查Openstack 版本了
通過nova版本查看Openstack版本
本地有git clone nova的話可以通過看他的tag知道是哪個版本
通過github上對照tag知道他是哪個版本nova倉庫輸入tag搜索
有這兒可以得知是Liberty版本 希望這個回答對你有幫助
⑺ 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