成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

技術背景

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

自動回收的價值

提高 IT 資源的利用率

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

提高 Cloud 上的系統性能

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

節省 IT 成本

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

如何實現自動回收

自動回收的條件和前提

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

自動回收機制的設計

自動回收通過 web service 實現檢測實例和鏡像的狀態,完成與相關用戶的交互,最終達到回收的作用,工作原理如圖1所示。

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

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

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

在 OpenStack 的數據庫中記錄資源信息及所有者信息,因此可以準確地與資源對應的所有者通過電子郵件進行交互。

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

自動回收的具體實現

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

清單 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 的相關配置

  • Port: web service 的服務端口

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

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

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

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

[DATABASE]: OpenStack 數據庫的連接配置

  • Host: 數據庫服務器地址
  • Nova_user: nova 數據庫的用戶名
  • Nova_pwd: nova 數據庫的用戶密碼
  • Keystone_user: keystone 數據庫的用戶名
  • Keystone_pwd: keystone 數據庫的用戶密碼

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

  • Os_auth_url: OpenStack 的授權驗證服務地址
  • Os_tenant_name: OpenStack 中需要進行管理的 tenant 名稱
  • Os_username: OpenStack 中用于管理以上 tenant 的用戶名
  • Os_password: OpenStack 中上述用戶的密碼

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

清單 2. 啟動輕量 web 服務器

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

清單 3. 創建 linux 系統服務

  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 中,為所需要的功能實現 REST API,本解決方案中為優化用戶體驗,對資源的延期及回收操作同樣采用 GET 響應。見清單 4。

清單 4. 定義 REST API 實現功能

  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 

程序中對于資源及過期信息的查詢操作,勻直接通過連接數據庫查詢實現,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 

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

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

而對于資源的清除操作,則需要通過調用 OpenStack 相關的 REST API 實現,見清單 5。

清單 5. 調用 OpenStack REST API 實現刪除操作

  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 

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

清單 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 平臺上自動回收實例及鏡像的功能即可實現。

應用的增強與擴展

上述應用的實現可滿足大部分場景的需求,同時也存在可增強的幾方面:

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

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

 

責任編輯:Ophira 來源: ibm developerWorks 中國
相關推薦

2024-03-05 09:39:03

Zadig版本管理版本

2023-07-27 10:54:34

MetaERP

2010-08-19 09:37:05

虛擬化優勢

2013-11-27 11:34:43

自動化部署Python

2013-08-01 00:00:00

華為遠程醫療華為

2023-06-28 16:10:09

Dataleap數倉建設

2018-09-28 05:18:41

2012-12-24 09:49:08

SaaSSaaS安全

2012-10-18 19:25:21

佳能

2016-06-20 11:32:27

JS原型class

2017-02-06 09:20:23

JavaScript實踐

2014-04-18 10:58:44

AndroidAPI實踐

2009-10-29 15:43:08

管理微軟Hyper-V免費工具

2010-07-16 11:30:06

SQL Server

2010-03-10 12:13:06

IT運維管理網絡拓撲摩卡軟件

2009-02-16 15:50:57

服務器 降低成本

2024-03-06 16:36:42

2010-07-29 17:01:14

2011-08-18 11:05:21

jQuery

2023-07-21 01:12:30

Reactfalse?變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品中文字幕一区二区三区 | 免费黄色大片 | 亚洲欧美一区二区三区国产精品 | 国产精品18hdxxxⅹ在线 | 国产a区| 久久久高清 | 精品一区二区三区日本 | 国产免费一区 | 精品久久久久久 | 国产精品中文字幕在线观看 | 激情在线视频 | 亚洲欧美另类在线 | 一级看片 | 青青久在线视频 | 国产精品日韩欧美一区二区三区 | caoporn国产精品免费公开 | 色综合桃花网 | 日韩成人专区 | 久久一区 | 国产在线精品一区二区三区 | 伊人伊人网 | 自拍视频一区二区三区 | 中文字幕国 | 国产精品久久久久久久岛一牛影视 | 久久久免费观看视频 | 操操网站 | 在线一区二区三区 | caoporn国产精品免费公开 | 久久久久国产一区二区三区 | 亚洲欧美日韩国产 | 在线观看亚洲精品视频 | 精品美女久久久久久免费 | 91精品国产乱码久久久久久 | 日本国产精品视频 | xx视频在线观看 | 日本久久久一区二区三区 | www亚洲精品| 欧美不卡一区二区三区 | 婷婷精品| 国产免费av在线 | 91精品久久久 |