偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OpenStack Metadata 服務(wù)機(jī)制及配置方式

云計(jì)算 OpenStack
Metadata 服務(wù)為用戶自定義配置虛擬機(jī)提供了有效的解決方案。本文剖析了 OpenStack 提供 metadata 服務(wù)的兩種機(jī)制:config drive 和 RESTful 服務(wù)。Config drive 機(jī)制主要用于配置虛擬機(jī)的網(wǎng)絡(luò)信息,包括 IP、子網(wǎng)掩碼、網(wǎng)關(guān)等。當(dāng)虛擬機(jī)無(wú)法通過(guò) DHCP 正確獲取網(wǎng)絡(luò)信息時(shí),config drive 是獲取 metadata 信息的必要方式。如果虛擬機(jī)能夠自動(dòng)正確配置網(wǎng)絡(luò),那么可以通過(guò) RESTful 服務(wù)的方式獲取 metadata 信息。

Metadata 的概念

在創(chuàng)建虛擬機(jī)的時(shí)候,用戶往往需要對(duì)虛擬機(jī)進(jìn)行一些配置,比如:開(kāi)啟一些服務(wù)、安裝某些包、添加 SSH 秘鑰、配置 hostname 等等。在 OpenStack 中,這些配置信息被分成兩類:metadata 和 user data。Metadata 主要包括虛擬機(jī)自身的一些常用屬性,如 hostname、網(wǎng)絡(luò)配置信息、SSH 登陸秘鑰等,主要的形式為鍵值對(duì)。而 user data 主要包括一些命令、腳本等。User data 通過(guò)文件傳遞,并支持多種文件格式,包括 gzip 壓縮文件、shell 腳本、cloud-init 配置文件等。雖然 metadata 和 user data 并不相同,但是 OpenStack 向虛擬機(jī)提供這兩種信息的機(jī)制是一致的,只是虛擬機(jī)在獲取到信息后,對(duì)兩者的處理方式不同罷了。所以下文統(tǒng)一用 matadata 來(lái)描述。

本文詳細(xì)闡述了 OpenStack 中 metadata 的服務(wù)機(jī)制,通過(guò)深入了解 metadata 的服務(wù)機(jī)制,用戶可以在適當(dāng)?shù)膽?yīng)用場(chǎng)景中選擇正確的 metadata 配置方式,從而對(duì)虛擬機(jī)進(jìn)行配置。此外,了解 metadata 服務(wù)機(jī)制能夠?yàn)橛脩粼?OpenStack 的部署、排錯(cuò)、維護(hù)提供幫助,提高工作效率。

Metadata 的獲取機(jī)制

在 OpenStack 中,虛擬機(jī)獲取 Metadata 信息的方式有兩種:Config drive 和 metadata RESTful 服務(wù)。下面我們分別對(duì)這兩種機(jī)制進(jìn)行介紹與分析。

Config drive

Config drive 機(jī)制是指 OpenStack 將 metadata 信息寫入虛擬機(jī)的一個(gè)特殊的配置設(shè)備中,然后在虛擬機(jī)啟動(dòng)時(shí),自動(dòng)掛載并讀取 metadata 信息,從而達(dá)到獲取 metadata 的目的。在客戶端操作系統(tǒng)中,存儲(chǔ) metadata 的設(shè)備需要是 ISO9660 或者 VFAT 文件系統(tǒng)。具體的實(shí)現(xiàn)會(huì)根據(jù) Hypervisor 的不同和配置有所差異,以 libvirt 為例:OpenStack 會(huì)將 metadata 寫入 libvirt 的虛擬磁盤文件中,并指示 libvirt 將其虛擬為 cdrom 設(shè)備,如圖 1 和圖 2 所示。另一方面,虛擬機(jī)在啟動(dòng)時(shí),客戶操作系統(tǒng)中的 cloud-init 會(huì)去掛載并讀取該設(shè)備,然后根據(jù)所讀取出的內(nèi)容對(duì)虛擬機(jī)進(jìn)行配置。

OpenStack 的 metadata 服務(wù)機(jī)制

圖 1.虛擬機(jī)定義的 xml 文件

OpenStack 的 metadata 服務(wù)機(jī)制

圖 2.存儲(chǔ) metadata 的虛擬磁盤文件

當(dāng)然,要實(shí)現(xiàn)上述功能,需要宿主機(jī)和虛擬機(jī)鏡像兩者協(xié)同完成,它們需要各自滿足一些條件:

宿主機(jī)(OpenStack 的計(jì)算節(jié)點(diǎn))

支持 config drive 機(jī)制的 Hypervisors 有:libvirt、hyper-v 和 VMware。當(dāng)使用 libvirt 和 VMware 作為 Hypervisor 時(shí),需要確保宿主機(jī)上安裝有 genisoimage 程序,并且設(shè)置 mkisofs_cmd 標(biāo)志為 genisoimage 的位置。當(dāng)使用 hyper-v 作為 Hypervisor 時(shí),需要設(shè)置 mkisofs_cmd 標(biāo)志為 mkisofs.exe 的全路徑,此外還需要在 hyper-v 的配置文件中設(shè)置 qume_img_cmd 為 qemu-img 命令的路徑。

虛擬機(jī)鏡像

虛擬機(jī)鏡像需要確保安裝了 cloud-init。如果沒(méi)有安裝 cloud-init,需要自行編寫腳本,實(shí)現(xiàn)在虛擬機(jī)啟動(dòng)期間掛載配置磁盤、讀取數(shù)據(jù)、解析數(shù)據(jù)并且根據(jù)數(shù)據(jù)內(nèi)容執(zhí)行相應(yīng)動(dòng)作。

OpenStack 提供了命令行參數(shù)--config-drive 用于配置是否在創(chuàng)建虛擬機(jī)時(shí)使用 config drive 機(jī)制。比如:

清單 1

  1. #nova boot --config-drive=true --image image-name --key-name mykey --flavor 1 --user-data  
  2. ./my-user-data.txt myinstance --file /etc/network/interfaces=/home/myuser/instance-interfaces 

或者也可以如清單 2 所示,在/etc/nova/nova.conf 中配置,使得 OpenStack 計(jì)算服務(wù)在創(chuàng)建虛擬機(jī)時(shí)默認(rèn)使用 config drive 機(jī)制。

清單 2

  1. force_config_drive=true 

用戶可以在虛擬機(jī)中查看寫入的 metadata 信息,如果客戶操作系統(tǒng)支持通過(guò)標(biāo)簽訪問(wèn)磁盤的話,可以使用如下命令查看:

清單 3

  1. #mkdir -p /mnt/config 
  2. #mount /dev/disk/by-label/config-2 /mnt/config 

Metadata RESTful 服務(wù)

OpenStack 提供了 RESTful 接口,虛擬機(jī)可以通過(guò) REST API 來(lái)獲取 metadata 信息。提供該服務(wù)的組件為:nova-api-metadata。當(dāng)然,要完成從虛擬機(jī)至網(wǎng)絡(luò)節(jié)點(diǎn)的請(qǐng)求發(fā)送和相應(yīng),只有 nova-api-metadata 服務(wù)是不夠的,此外共同完成這項(xiàng)任務(wù)的服務(wù)還有:Neutron-metadata-agent 和 Neutron-ns-metadata-proxy。下面我們將剖析它們是如何協(xié)同工作為虛擬機(jī)提供 metadata 服務(wù)的。

Nova-api-metadata

nova-api-metadata 啟動(dòng)了 RESTful 服務(wù),負(fù)責(zé)處理虛擬機(jī)發(fā)送來(lái)的 REST API 請(qǐng)求。從請(qǐng)求的 HTTP 頭部中取出相應(yīng)的信息,獲得虛擬機(jī)的 ID,繼而從數(shù)據(jù)庫(kù)中讀取虛擬機(jī)的 metadata 信息,***將結(jié)果返回。

Neutron-metadata-agent

Neutron-metadata-agent 運(yùn)行在網(wǎng)絡(luò)節(jié)點(diǎn),負(fù)責(zé)將接收到的獲取 metadata 的請(qǐng)求轉(zhuǎn)發(fā)給 nova-api-metadata。Neutron-metadata-agent 會(huì)獲取虛擬機(jī)和租戶的 ID,添加到請(qǐng)求的 HTTP 頭部中。nova-api-metadata 會(huì)根據(jù)這些信息獲取 metadata。

Neutron-ns-metadata-proxy

Neutron-ns-metadata-proxy 也運(yùn)行在網(wǎng)絡(luò)節(jié)點(diǎn)。為了解決網(wǎng)絡(luò)節(jié)點(diǎn)的網(wǎng)段和租戶的虛擬網(wǎng)段重復(fù)的問(wèn)題,OpenStack 引入了網(wǎng)絡(luò)命名空間。Neutron 中的路由和 DHCP 服務(wù)器都在各自獨(dú)立的命名空間中。由于虛擬機(jī)獲取 metadata 的請(qǐng)求都是以路由和 DHCP 服務(wù)器作為網(wǎng)絡(luò)出口,所以需要通過(guò) neutron-ns-metadata-proxy 聯(lián)通不同的網(wǎng)絡(luò)命名空間,將請(qǐng)求在網(wǎng)絡(luò)命名空間之間轉(zhuǎn)發(fā)。Neutron-ns-metadata-proxy 利用在 unix domain socket 之上的 HTTP 技術(shù),實(shí)現(xiàn)了不同網(wǎng)絡(luò)命名空間之間的 HTTP 請(qǐng)求轉(zhuǎn)發(fā)。并在請(qǐng)求頭中添加’X-Neutron-Router-ID’和’X-Neutron-Network-ID’信息,以便 Neutron-metadata-agent 來(lái)辨別發(fā)送請(qǐng)求的虛擬機(jī),獲取虛擬機(jī)的 ID。

OpenStack 的 metadata 服務(wù)機(jī)制

圖 3.Metadata 請(qǐng)求發(fā)送流程

如圖 3 所示,虛擬機(jī)獲取 metadata 的大致流程為:首先請(qǐng)求被發(fā)送至 neutron-ns-metadata-proxy,此時(shí)會(huì)在請(qǐng)求中添加 router-id 和 network-id,然后請(qǐng)求通過(guò) unix domian socket 被轉(zhuǎn)發(fā)給 neutron-metadata-agent,根據(jù)請(qǐng)求中的 router-id、network-id 和 IP,獲取 port 信息,從而拿到 instance-id 和 tenant-id 加入請(qǐng)求中,***請(qǐng)求被轉(zhuǎn)發(fā)給 nova-api-metadata,其利用 instance-id 和 tenant-id 獲取虛擬機(jī)的 metadata,返回相應(yīng)。

上面我們分析了各個(gè)服務(wù)之間轉(zhuǎn)發(fā)請(qǐng)求的流程,那么現(xiàn)在只存在一個(gè)問(wèn)題,整個(gè)獲取 metadata 的路線就通暢了:虛擬機(jī)如何將請(qǐng)求發(fā)送至 neutron-ns-metadata-proxy?

我們首先來(lái)分析虛擬機(jī)發(fā)送的請(qǐng)求。由于 metadata 最早是由亞馬遜提出的,當(dāng)時(shí)規(guī)定 metadata 服務(wù)的地址為 169.254.169.254:80,OpenStack 沿用了這一規(guī)定。所以虛擬機(jī)會(huì)向 169.254.169.254:80 發(fā)送 medtadata 請(qǐng)求。那么這一請(qǐng)求是如何從虛擬機(jī)中發(fā)送出來(lái)的呢?目前 Neutron 有兩種方式來(lái)解決這個(gè)問(wèn)題:通過(guò) router 發(fā)送請(qǐng)求和通過(guò) DHCP 發(fā)送請(qǐng)求。

#p#

通過(guò) router 發(fā)送請(qǐng)求

如果虛擬機(jī)所在 subnet 連接在了 router 上,那么發(fā)向 169.254.169.254 的報(bào)文會(huì)被發(fā)至 router。如圖 4 所示,Neutron 通過(guò)在 router 所在網(wǎng)絡(luò)命名空間添加 iptables 規(guī)則,將該報(bào)文轉(zhuǎn)發(fā)至 9697 端口,而 neutron-ns-metadata-proxy 監(jiān)聽(tīng)著該端口,所以報(bào)文被 neutron-ns-metadata-proxy 獲取,進(jìn)入上述后續(xù)處理和轉(zhuǎn)發(fā)流程。

OpenStack 的 metadata 服務(wù)機(jī)制

圖 4.router 所在網(wǎng)絡(luò)命名空間的 iptables 規(guī)則

OpenStack 的 metadata 服務(wù)機(jī)制

圖 5.監(jiān)聽(tīng)在 9697 端口上的 Neutron-ns-metadata-proxy 服務(wù)

 


通過(guò) DHCP 發(fā)送請(qǐng)求

如果虛擬機(jī)所在 subnet 沒(méi)有連接在任何 router 上,那么請(qǐng)求則無(wú)法通過(guò) router 轉(zhuǎn)發(fā)。此時(shí) Neutron 通過(guò) DHCP 服務(wù)器來(lái)轉(zhuǎn)發(fā) metadata 請(qǐng)求。DHCP 服務(wù)通過(guò) DHCP 協(xié)議的選項(xiàng) 121 來(lái)為虛擬機(jī)設(shè)置靜態(tài)路由。如圖 6 所示,圖中 10.0.0.3 為 DHCP 服務(wù)器的 IP 地址。通過(guò)查看虛擬機(jī)的靜態(tài)路由表,我們可以發(fā)現(xiàn)發(fā)送至 169.254.169.254 的報(bào)文被發(fā)送到了 10.0.0.3,即 DHCP 服務(wù)器。

OpenStack 的 metadata 服務(wù)機(jī)制

圖 6.虛擬機(jī)中的靜態(tài)路由表

另外再查看 DHCP 服務(wù)器的 IP 配置信息,發(fā)現(xiàn) DHCP 服務(wù)器配置了兩個(gè) IP,其中一個(gè)就是 169.254.169.254。與 router 類似的,Neutron 在 DHCP 網(wǎng)絡(luò)命名空間中啟動(dòng)了監(jiān)聽(tīng) 80 端口的 neutron-ns-metadata-proxy 服務(wù),從而進(jìn)入處理和轉(zhuǎn)發(fā)請(qǐng)求的流程。

OpenStack 的 metadata 服務(wù)機(jī)制

圖 7.DHCP 服務(wù)器的 IP 配置

總結(jié)

Metadata 服務(wù)為用戶自定義配置虛擬機(jī)提供了有效的解決方案。本文剖析了 OpenStack 提供 metadata 服務(wù)的兩種機(jī)制:config drive 和 RESTful 服務(wù)。Config drive 機(jī)制主要用于配置虛擬機(jī)的網(wǎng)絡(luò)信息,包括 IP、子網(wǎng)掩碼、網(wǎng)關(guān)等。當(dāng)虛擬機(jī)無(wú)法通過(guò) DHCP 正確獲取網(wǎng)絡(luò)信息時(shí),config drive 是獲取 metadata 信息的必要方式。如果虛擬機(jī)能夠自動(dòng)正確配置網(wǎng)絡(luò),那么可以通過(guò) RESTful 服務(wù)的方式獲取 metadata 信息。

原文鏈接:http://www.ibm.com/developerworks/cn/cloud/library/1509_liukg_openstackmeta/index.html
 

責(zé)任編輯:Ophira 來(lái)源: ibm developerWorks 中國(guó)
相關(guān)推薦

2018-07-10 15:10:50

OpenStack虛擬機(jī)metadata

2016-09-20 22:41:21

Linuxmmapreadahead

2016-09-01 12:37:13

OpenStack虛擬機(jī)Metadata

2010-08-05 10:19:28

路由器配置

2010-04-27 12:56:35

lvs負(fù)載均衡

2018-04-12 08:37:27

2013-12-08 18:13:08

OpenStack橫向擴(kuò)展

2013-12-08 19:51:20

OpenStack網(wǎng)絡(luò)配置

2009-09-17 14:05:18

WSUS服務(wù)器

2016-02-29 16:54:10

OpenStack混合云應(yīng)用軟件定義基礎(chǔ)設(shè)施

2023-03-17 08:50:00

服務(wù)器時(shí)鐘服務(wù)數(shù)據(jù)庫(kù)

2015-06-12 10:27:28

DevOpsDockerOpenStack

2015-01-20 09:35:52

2013-09-16 15:46:50

OpenStack云計(jì)算

2020-07-16 08:39:18

服務(wù)狀態(tài)排錯(cuò)

2012-08-07 15:02:05

OpenStack網(wǎng)絡(luò)模式

2014-11-27 13:29:29

OpenStackSwift開(kāi)源

2010-02-26 14:05:57

WCF通信方式

2025-05-27 01:00:00

2013-07-31 09:38:16

IPv6地址單播地址多播地址
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)