自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

降低IT成本:OpenStack自動回收與鏡像最佳實踐

云計算 OpenStack
OpenStack 是云計算領(lǐng)域中最廣為人知的開源項目,作為最流行的開源云項目它在全球被廣泛應(yīng)用,管理著大量的 IT 資源。然而,由于缺乏良好的回收機(jī)制,如果一些閑置的實例和鏡像沒有被及時地回收,那么將導(dǎo)致 OpenStack 云中的低利用率并影響系統(tǒng)性能。為解決這一問題從而降低 IT 成本,自動回收實例與鏡像的解決方案很有必要。

技術(shù)背景

本文所介紹的解決方案應(yīng)用于 OpenStack 云管理平臺,使用 Python 編程語言實現(xiàn)必要的功能,利用郵件服務(wù)器和 Web 服務(wù)器完成用戶自服務(wù),作為自動回收機(jī)制的補(bǔ)充。

自動回收的價值

提高 IT 資源的利用率

通過自動回收 OpenStack 中的實例和鏡像,避免存在和積累閑置的實例和鏡像,使得 IT 資源(CPU、內(nèi)存、存儲、網(wǎng)絡(luò)等)保持有效的使用狀態(tài),最大程度地提高 IT 資源利用率,保護(hù)用戶的 IT 投資。

提高 Cloud 上的系統(tǒng)性能

對于一個特定的 Cloud 平臺,它的最大負(fù)載性能是有限的,而閑置的實例和鏡像仍會占用部分這有限的性能,這在一定程度上會影響同一平臺上其它系統(tǒng)的性能。以存儲 I/O 性能為例,越是少量的系統(tǒng)的進(jìn)行并發(fā)讀寫,對其中單個系統(tǒng)而言所擁有的性能越是良好。

節(jié)省 IT 成本

啟用自動回收可以避免用戶在 IT 投資上的無謂的浪費,無須盲目地增加投資而一樣可以達(dá)到負(fù)載的需求。

如何實現(xiàn)自動回收

自動回收的條件和前提

  • 使用 OpenStack 云管理平臺
  • 可以利用一個現(xiàn)有的郵件服務(wù)器
  • OpenStack 用戶需要有電子郵件地址信息
  • OpenStack 數(shù)據(jù)庫中記錄有對實例和鏡像的最后修改時間,對此值的修改不應(yīng)影響其它任何功能。

自動回收機(jī)制的設(shè)計

自動回收通過 web service 實現(xiàn)檢測實例和鏡像的狀態(tài),完成與相關(guān)用戶的交互,最終達(dá)到回收的作用,工作原理如圖1所示。

圖 1. 自動回收工作原理圖

OpenStack自動回收實例與鏡像最佳實踐

本解決方案中通過 Jenkins 每天觸發(fā)并完成一次回收工作,實際應(yīng)用中可根據(jù)需要采用不同的觸發(fā)方式和頻率。

在 OpenStack 的數(shù)據(jù)庫中記錄資源信息及所有者信息,因此可以準(zhǔn)確地與資源對應(yīng)的所有者通過電子郵件進(jìn)行交互。

通 過比較資源的最后修改日期和當(dāng)前日期,可以識別出將過期或已過期(周期可配置,詳見清單1)的資源:對于已過期的資源,將執(zhí)行自動清除并通知所有者;對于 將過期的資源,將提醒所有者進(jìn)行延期或主動清除操作。操作方式僅需點擊一次郵件中的鏈接。若直至最后一次通知,所有者仍未進(jìn)行任何操作響應(yīng),意味著該資源 將正式過期并被自動清除。

自動回收的具體實現(xiàn)

首先,對于自動回收服務(wù)是可以根據(jù)不同的環(huán)境和需求進(jìn)行配置的,如清單1所示。當(dāng)自動回收服務(wù)(見下文中 Python 實現(xiàn)的 web service)啟動時,將讀取該配置使得回收工作能正常進(jìn)行。

清單 1. 定義自動回收配置

  1. [SERVICE] 
  2. port=set me 
  3. [WHITELIST] 
  4. users=set me or keep empty 
  5. instances=set me or keep empty 
  6. images=set me or keep empty 
  7. [LIFETIME] 
  8. keep_days=set me 
  9. remind_days=set me 
  10. [DATABASE] 
  11. host=set me 
  12. nova_user=set me 
  13. nova_pwd=set me 
  14. keystone_user=set me 
  15. keystone_pwd=set me 
  16. [CLOUD] 
  17. OS_USERNAME=set me 
  18. OS_PASSWORD=set me 
  19. OS_TENANT_NAME=set me 
  20. OS_AUTH_URL=set me 
  21. [EMAIL] 
  22. smtp_server=set me 
  23. smtp_user=set me 
  24. smtp_pwd=set me 

[SERVICE]: 自動回收 web service 的相關(guān)配置

  • Port: web service 的服務(wù)端口

[WHITELIST]: 白名單配置,用于避免某些資源被自動回收

  • Users: 指定用戶清單,他們的資源將被視為永不過期
  • Instances: 指定實例清單,視為永不過期
  • Images: 指定鏡像清單,視為永不過期

[LIFETIME]: 資源的生命周期配置

  • Keep_days: 資源可保持的時長,以天為單位
  • Remind_days: 通知時間范圍,以天為單位,指在資源生命周期最后一段時間內(nèi)開始對所有者進(jìn)行通知提醒

[DATABASE]: OpenStack 數(shù)據(jù)庫的連接配置

  • Host: 數(shù)據(jù)庫服務(wù)器地址
  • Nova_user: nova 數(shù)據(jù)庫的用戶名
  • Nova_pwd: nova 數(shù)據(jù)庫的用戶密碼
  • Keystone_user: keystone 數(shù)據(jù)庫的用戶名
  • Keystone_pwd: keystone 數(shù)據(jù)庫的用戶密碼

[CLOUD]: OpenStack 云的管理帳號信息

  • Os_auth_url: OpenStack 的授權(quán)驗證服務(wù)地址
  • Os_tenant_name: OpenStack 中需要進(jìn)行管理的 tenant 名稱
  • Os_username: OpenStack 中用于管理以上 tenant 的用戶名
  • Os_password: OpenStack 中上述用戶的密碼

其次,通過運(yùn)行簡單的 Python 程序(見清單 2),即可啟動一個 web server,也可以將該 web service 運(yùn)行為 linux 系統(tǒng)服務(wù)(見清單 3)。

清單 2. 啟動輕量 web 服務(wù)器

  1. if __name__ == '__main__'
  2. serveraddr = ('0.0.0.0'int(SERVICE_PORT)) 
  3. srvr = HTTPServer(serveraddr, RequestHandler) 
  4. srvr.serve_forever() 

清單 3. 創(chuàng)建 linux 系統(tǒng)服務(wù)

  1. function start() 
  2. echo "Starting OS_Recycle ..." 
  3. daemon  "python ${PY_FILE} ${CONFIG_FILE} >> ${LOG_FILE} 2>&1 &" 
  4. sleep 2 
  5. status 

在以上 web service 中,為所需要的功能實現(xiàn) REST API,本解決方案中為優(yōu)化用戶體驗,對資源的延期及回收操作同樣采用 GET 響應(yīng)。見清單 4。

清單 4. 定義 REST API 實現(xiàn)功能

  1.  def do_GET(self): 
  2. self._writeheaders() 
  3. self.apiGET() 
  4.  
  5. def apiGET(self): 
  6. path=self.path.split('/'
  7.  
  8. if len(path) == 2 and path[1] == 'instances'
  9. self.wfile.write(json.dumps(self.getInstances())) 
  10. ... 
  11.  
  12. def getInstances(self): 
  13. #connect to nova database and keystone database to get data 
  14. ... 
  15. instJson=json.loads('[]'
  16. for inst in instances: 
  17. for user in users: 
  18. if user[0] == inst[1]: 
  19. instJson.append(json.loads('{"created_at":"%s""user_id":"%s",  
  20. "hostname":"%s""ip_address":"%s""uuid":"%s"
  21. "user_name":"%s"}' %  
  22. (inst[0], inst[1], inst[2], inst[4], inst[3], user[1]) 
  23. )) 
  24. break 
  25. return instJson 

程序中對于資源及過期信息的查詢操作,勻直接通過連接數(shù)據(jù)庫查詢實現(xiàn),DB2 SQL 命令示例:

  1. novaSql = "SELECT char(a.created_at),a.user_id,a.hostname,a.uuid,cast(b.NETWORK_INFO as varchar(1000))  
  2. from instances a left join INSTANCE_INFO_CACHES b on a.uuid=b.INSTANCE_UUID \ 
  3. where a.project_id = '%s' and  a.deleted_at is null" % CLOUD_OS_TENANT_ID 

對于資源的延期操作,即更新資源的最后修改時間為當(dāng)前時間,意味著重置生命周期,DB2 SQL 命令示例:

  1. novaSql = "update instances set created_at=current timestamp where uuid='%s'" % uuid 

而對于資源的清除操作,則需要通過調(diào)用 OpenStack 相關(guān)的 REST API 實現(xiàn),見清單 5。

清單 5. 調(diào)用 OpenStack REST API 實現(xiàn)刪除操作

  1.  def deleteInstance(self,uuid): 
  2. req_url = '%s/tokens' % CLOUD_OS_AUTH_URL 
  3. resp, resp_body = httplib2.Http().request(req_url, 'POST'
  4. headers={'Accept':'application/json''Content-Type':'application/json'},  
  5. body='{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' % 
  6. (CLOUD_OS_TENANT_NAME, CLOUD_OS_USERNAME, CLOUD_OS_PASSWORD) 
  7. if resp['status'] != '200'
  8. return False 
  9. resp_json = json.loads(resp_body) 
  10. token_id = resp_json['access']['token']['id'
  11. for service in  resp_json['access']['serviceCatalog']: 
  12. if service['name'] == 'nova'
  13. nova_admin_url = service['endpoints'][0]['adminURL'
  14. break 
  15. if not nova_admin_url: 
  16. return False 
  17.  
  18. resp, resp_body = httplib2.Http().request('%s/servers/%s' % (nova_admin_url, uuid), 'DELETE'
  19. headers={'Accept':'application/json''X-Auth-Project-Id':'%s' % CLOUD_OS_TENANT_NAME, 
  20. 'X-Auth-Token':'%s' % token_id } 
  21. if resp['status'] != '204'
  22. return False 
  23. return True 

在資源將要過期或已被自動回收時,需要對所有者進(jìn)行郵件通知,在郵件中提供必要的 link 供所有者進(jìn)行操作。示例見清單 6。注意本程序中使用的是 SMTP,并且要求應(yīng)用程序能夠正常連接到指定的郵件服務(wù)器,而該郵件服務(wù)器亦能正常發(fā)送郵件到達(dá)資源所有者。

清單 6. 郵件通知資源所有者

  1. import smtplib 
  2. from email.MIMEMultipart import MIMEMultipart 
  3. from email.MIMEText import MIMEText 
  4. ... 
  5. SMTP_SERVER='set me' 
  6. SMTP_USER='set me' 
  7. SMTP_PWD='set me' 
  8. msg = MIMEMultipart() 
  9. msg["From"] = SMTP_USER 
  10. msg["To"] = 'set me' 
  11. msg["Subject"] = "set me" 
  12. msg.attach(MIMEText("set me")) 
  13. mailServer = smtplib.SMTP(SMTP_SERVER, timeout=20) 
  14. mailServer.ehlo() 
  15. mailServer.starttls() 
  16. mailServer.login(SMTP_USER, SMTP_PWD) 
  17. mailServer.sendmail(SMTP_USER, msg["To"], msg.as_string()) 
  18. mailServer.quit() 

至此,OpenStack 平臺上自動回收實例及鏡像的功能即可實現(xiàn)。

應(yīng)用的增強(qiáng)與擴(kuò)展

上述應(yīng)用的實現(xiàn)可滿足大部分場景的需求,同時也存在可增強(qiáng)的幾方面:

  • 使用額外的數(shù)據(jù)庫,用以跟 OpenStack 數(shù)據(jù)庫同步資源信息,并記錄生命周期,避免直接修改 OpenStack 的數(shù)據(jù)。
  • 實現(xiàn)專用的郵件服務(wù)器,用于本應(yīng)用與資源所有者的郵件交互,避免網(wǎng)絡(luò)受限與安全風(fēng)險。
  • 包裝成為 OpenStack 的可選功能,使得用戶可以方便地啟用該功能,而無需過多的手工配置。
  • 基于上述實現(xiàn)及可增強(qiáng)的部分,自動回收可擴(kuò)展到更多的應(yīng)用場景:
  • 可用于回收 OpenStack 中的其它類型的資源和數(shù)據(jù),例如用戶,flavor,網(wǎng)絡(luò)等,而不僅限于實例與鏡像
  • 以相同的思路在平它系統(tǒng)平臺中實現(xiàn)自動回收資源:即給資源配置生命周期,并跟蹤資源的狀態(tài),在與所有者有自動交互的基礎(chǔ)上實現(xiàn)自動回收。

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

 

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

2024-03-05 09:39:03

Zadig版本管理版本

2023-07-27 10:54:34

MetaERP

2013-11-27 11:34:43

自動化部署Python

2010-08-19 09:37:05

虛擬化優(yōu)勢

2023-06-28 16:10:09

Dataleap數(shù)倉建設(shè)

2012-12-24 09:49:08

SaaSSaaS安全

2018-09-28 05:18:41

2014-04-18 10:58:44

AndroidAPI實踐

2016-06-20 11:32:27

JS原型class

2017-02-06 09:20:23

JavaScript實踐

2009-10-29 15:43:08

管理微軟Hyper-V免費工具

2013-08-01 00:00:00

華為遠(yuǎn)程醫(yī)療華為

2010-07-16 11:30:06

SQL Server

2012-10-18 19:25:21

佳能

2023-07-21 01:12:30

Reactfalse?變量

2011-08-18 11:05:21

jQuery

2009-05-08 15:38:47

無線網(wǎng)絡(luò)管理成本

2010-07-29 17:01:14

2009-02-16 15:50:57

服務(wù)器 降低成本

2010-03-10 12:13:06

IT運(yùn)維管理網(wǎng)絡(luò)拓?fù)?/a>摩卡軟件
點贊
收藏

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