亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁(yè) > 新聞 > 專(zhuān)家觀點(diǎn) >
 首頁(yè) > 新聞 > 專(zhuān)家觀點(diǎn) >

OpenStack 與 Kubernetes 融合架構(gòu)下的優(yōu)化實(shí)踐

2017-06-13 09:05:26   作者:林冠宇(Rico Lin)   來(lái)源: 開(kāi)源云中文社區(qū)   評(píng)論:0  點(diǎn)擊:


  如果你想使用Kubernetes來(lái)構(gòu)建你的應(yīng)用程序環(huán)境,通過(guò)OpenStack來(lái)部署Kubernetes其架構(gòu)是一種推薦的方式,本文將與大家分享Kubernetes在OpenStack上的編排方式與其優(yōu)化方法。
  以下介紹5種針對(duì)Kubernetes的調(diào)優(yōu)方式,希望對(duì)大家有所幫助。
  接下來(lái)讓我們從架構(gòu)分析開(kāi)始,了解為什么需要這樣的架構(gòu)存在,解決什么樣的問(wèn)題。接著了解優(yōu)化的目的,我們深入探討幾個(gè)優(yōu)化方式與選項(xiàng)。結(jié)合部分實(shí)際案例或測(cè)試來(lái)優(yōu)化后的改善。最后探討后續(xù)發(fā)展與計(jì)劃。
  • 架構(gòu)分析
  容器的存在是為了解決無(wú)狀態(tài)(stateless)的服務(wù)占用系統(tǒng)資源的問(wèn)題。針對(duì)網(wǎng)絡(luò)應(yīng)用程序來(lái)說(shuō),即能減少虛擬化所帶來(lái)的消耗,成為效能優(yōu)化的一大亮點(diǎn)。在容器之上應(yīng)用程序仍需與多個(gè)容器共存,甚至互相通信。
  因此Kubernetes、Mesos、Swarm等容器編排服務(wù)就成為新世代架構(gòu)的寵兒。 Kubernetes概念架構(gòu)如下圖所示:
\
  在Kubernetes架構(gòu)下,提供docker容器網(wǎng)絡(luò)與周期管理。通過(guò)COE(Container Orchestration Engine)管理的容器群,不但享受便利,也擁有快速編排應(yīng)用程序架構(gòu)的優(yōu)勢(shì)。
  但通過(guò)下圖(Cloud Native Landscape by Cloud Native Computing Foundation)可以認(rèn)識(shí)到:Kubernetes還需要建立在一個(gè)可以良好地承載如此多樣性服務(wù)的基處建設(shè)(即IaaS),而在圖中最底下的基礎(chǔ)架構(gòu)(Infrastructure)你會(huì)選擇那個(gè)平臺(tái)?
\
  以現(xiàn)今的云應(yīng)用,相信多數(shù)私有云會(huì)選擇以O(shè)penStack作為基礎(chǔ)框架,公有云也有不少案例使用OpenStack。而在選好的框架上承載相應(yīng)的應(yīng)用程序。
  通過(guò)上面一起思考出的組合,若各位已經(jīng)熟悉Magnum開(kāi)源項(xiàng)目或是企業(yè)Kubernetes產(chǎn)品(例如 ESContainer),其提供你在OpenStack架構(gòu)上想要的Kubernetes框架的方式。
  另外此架構(gòu)也還有幾個(gè)優(yōu)點(diǎn)供大家參考:通過(guò)此架構(gòu)可以達(dá)成Kubernetes全自動(dòng)化管理,通過(guò)此架構(gòu)可以提供完整多租戶(hù)框架。
  在這樣的整體架構(gòu)規(guī)劃下,可以深入討論以下幾大重點(diǎn):網(wǎng)絡(luò)、運(yùn)算、儲(chǔ)存與編排。想必大家通過(guò)之前網(wǎng)絡(luò)調(diào)優(yōu)的干貨(http://www.easystack.cn/en/technical_share/748/ )與NUMA相關(guān)處理器技術(shù)干貨(http://www.easystack.cn/en/ technical_share/700/ )已經(jīng)對(duì)自己的環(huán)境的基礎(chǔ)架構(gòu)有相當(dāng)?shù)牧私,甚至已?jīng)著手進(jìn)行優(yōu)化。
  接下來(lái)正是文章想要突顯的重點(diǎn),如何從編排下手讓OpenStack上的Kubernetes加速?如何調(diào)優(yōu)?當(dāng)你已經(jīng)千方百計(jì)優(yōu)化了你的應(yīng)用程序時(shí),還有那些方式可以讓效能更上一層樓?
  優(yōu)化項(xiàng)目-調(diào)優(yōu)編排
  編排項(xiàng)目對(duì)于在OpenStack構(gòu)建任何應(yīng)用程序都具有重要角色,在下圖(Magnum的架構(gòu)圖)中可以看見(jiàn)Heat (編排服務(wù))對(duì)于整體流程的重要性。通過(guò)Heat腳本可以布署集群與安裝任何應(yīng)用程序于集群上。因此選擇調(diào)優(yōu)Heat絕對(duì)是值得參考的選項(xiàng)。
  調(diào)優(yōu)1:開(kāi)啟convergence模式
  若你的OpenStack環(huán)境已經(jīng)到了Mitaka或是以上版本。則建議你將convergence模式打開(kāi)(若版本為Newton以上版本,預(yù)設(shè)已經(jīng)是開(kāi)啟)。打開(kāi)方式為在`/etc/heat/heat.conf`檔案下加入`convergence_engine = True`的選項(xiàng)。
  開(kāi)啟后對(duì)于操作不會(huì)有任何改變,使用者仍可以用原先的操作模式與腳本建立編排資源。原先已經(jīng)建立的編排資源則會(huì)維持在非Convergence模式下繼續(xù)運(yùn)行。而新建立的編排資源則會(huì)以Convergence模式維運(yùn)。
  下圖為比較建立100個(gè)簡(jiǎn)單的資源,200個(gè)簡(jiǎn)單的資源,與100個(gè)復(fù)雜資源時(shí)在Convergence模式或是非Convergence模式下的效能?梢杂^察到,越復(fù)雜的資源越需要更多的時(shí)間來(lái)完成,越容易在Convergence模式下獲得大幅的改善。
  尤其是針對(duì)像是Kubernetes等需要建立多臺(tái)Nova Instance (虛擬機(jī)或裸機(jī))的狀況下,通過(guò)模式轉(zhuǎn)換而獲得的效率改善理應(yīng)更顯著(Kubernetes一般架構(gòu)屬于復(fù)雜度較高的資源,因此可以參考圖中復(fù)雜度高的狀況比較表)。
  什么是Convergence模式?
  談到這里,應(yīng)該有不少開(kāi)發(fā)者對(duì)Convergence相當(dāng)陌生。 Convergence比起舊架構(gòu)在服務(wù)之間的差異只有新增了一個(gè)worker服務(wù)。但是實(shí)際上程序流程完全不同。如果我們?nèi)缦轮噶罱⒁粋(gè)Kubernetes 群集。
  如果是舊有的架構(gòu)指令會(huì)被轉(zhuǎn)為API call,再通過(guò)RPC交由其中的一個(gè)后端Engine服務(wù)由頭到尾處理整個(gè)Kubernetes資源建構(gòu)。
  但如下圖在Convergence模式下,Kubernetes腳本抵達(dá)后端服務(wù)(Engine)時(shí),會(huì)依照資源立刻被分成單一工作,交付給其他后端服務(wù)并行執(zhí)行。
  也就是說(shuō),若后端服務(wù)數(shù)量允許,所有的Kubernetes master與minion都可以并行運(yùn)行在獨(dú)立的后端服務(wù),并且只需要你花費(fèi)部署一臺(tái)節(jié)點(diǎn)的時(shí)間,就可以將整個(gè)集群都建置完畢。
  過(guò)程中Heat服務(wù)會(huì)在數(shù)據(jù)庫(kù)中建立一張叫做Syncpoint的表,用來(lái)確認(rèn)與取得操作的權(quán)限。并且存入資源相依性的連結(jié)數(shù)據(jù)以保證有資源創(chuàng)建流程(像是確保Cinder Volume掛載操作,必須在Nova將Kubernetes節(jié)點(diǎn)與Cinder Volume創(chuàng)建出來(lái)后才能執(zhí)行)。
  調(diào)優(yōu)2:調(diào)整`num_engine_workers`
  Engine worker數(shù)量調(diào)整,指的就是我們?cè)谡{(diào)優(yōu)1時(shí)提及的后端服務(wù)數(shù)量。通過(guò)下圖架構(gòu)可以看到,當(dāng)API服務(wù)收到請(qǐng)求,并通過(guò)RPC往后方傳送時(shí),是在多個(gè)Engine worker中,由搶先接收到者,作為處理該請(qǐng)求的后端。
  而這個(gè)調(diào)優(yōu)設(shè)定可以用來(lái)決定每一個(gè)實(shí)體的Heat后端節(jié)點(diǎn)上要跑幾個(gè)后端服務(wù)程序。如若環(huán)境(在`/etc/heat/heat.conf`文件)尚未設(shè)定此參數(shù),預(yù)設(shè)是按照CPU數(shù)量來(lái)調(diào)整單一節(jié)點(diǎn)上Heat的服務(wù)程序數(shù)量。
  但是注意到,若你的電腦為HPC時(shí)建議將數(shù)量調(diào)高,因?yàn)槟銚碛休^為強(qiáng)大的網(wǎng)絡(luò)、運(yùn)算、與儲(chǔ)存資源,可以嘗試由1:1.5(cpu:num_engine_workers)開(kāi)始測(cè)試效能,在往上調(diào)整,直到你的Kubernetes集群的布署效能達(dá)到頂峰。
  相對(duì)地,若你的CPU數(shù)量過(guò)多,其他部分的資源并未規(guī)劃為高效能狀況(可能發(fā)生在用來(lái)提供運(yùn)算的節(jié)點(diǎn)上),建議嘗試1.25:1(cpu:num_engine_workers)開(kāi)始測(cè)試效能,并往下調(diào)整(num_engine_workers數(shù)量),直到你的環(huán)境取得更好的整體效能。
  注意到單一節(jié)點(diǎn)上的編排服務(wù)程序數(shù)量,并不等于多節(jié)點(diǎn)上的整合。因此調(diào)整到適當(dāng)?shù)臄?shù)量,也等同于提供其他程序(RPC、數(shù)據(jù)庫(kù)、其他服務(wù)程序)更多資源的使用空間。
  尤其是像布署Kubernetes環(huán)境,將會(huì)同時(shí)調(diào)用Cinder管理儲(chǔ)存, Neutron管理網(wǎng)絡(luò)Nova管理虛機(jī)或裸機(jī)。因此資源分配更應(yīng)該微調(diào)以獲取更好的整體效能。
  調(diào)優(yōu)3:開(kāi)啟高速緩存
  多數(shù)的OpenStack服務(wù)都具有一定數(shù)量的緩存機(jī)制,若內(nèi)存空間允許建議挑選部分服務(wù)(比如編排服務(wù))開(kāi)啟緩存機(jī)制,開(kāi)啟方式為將緩存設(shè)定寫(xiě)入heat.conf內(nèi)。
  至于寫(xiě)入選項(xiàng)可參考網(wǎng)站:https://docs.openstack.org/developer/oslo.cache/opts.html 。若無(wú)特別想設(shè)定的參數(shù),可以直接在[cache]下新增enabled=True即可。
  至于為什么在此特別提及此設(shè)定,因?yàn)楫?dāng)你要布署或是擴(kuò)展你的Kubernetes集群時(shí),在資源編排上都會(huì)是以資源群組為單位,比如說(shuō)要再擴(kuò)展出新的50臺(tái)Kubernetes minion節(jié)點(diǎn)。
  在資源編排時(shí),這50臺(tái)屬于同一Kubernetes叢集的minion節(jié)點(diǎn)將會(huì)被視為同一個(gè)資源群集,并在編排時(shí)一同處理。因此若能將高速緩存開(kāi)啟,在這案例上就可以直接節(jié)省49次等同于98%的部分操作。
  目前在編排服務(wù)內(nèi),以下幾個(gè)主要環(huán)節(jié)已經(jīng)設(shè)有快取機(jī)制,包含Stack信息數(shù)據(jù),Resource信息數(shù)據(jù),Constraint數(shù)據(jù)(通過(guò)呼叫其他項(xiàng)目CLI以認(rèn)證部分參數(shù)。例如當(dāng)K8S master參數(shù)有Floating ip時(shí),Constraint就會(huì)通過(guò)Neutron CLI找尋Floating ip數(shù)據(jù)作為參數(shù)認(rèn)證依據(jù))等。
  調(diào)優(yōu)4:允許OpenStack直接操作Kubernetes
  在實(shí)際使用Kubernetes時(shí),許多時(shí)候需要臨時(shí)或一次性變更多個(gè) Kubernetes集群,或是對(duì)單一個(gè)大型的Kubernetes集群進(jìn)行多次操作或復(fù)雜操作,其實(shí)也可以納入OpenStack管理范圍作一次性操作,進(jìn)而完成所有任務(wù)。
  在編排服務(wù)中有能安裝與管理應(yīng)用程序的能力,在提供鏡像時(shí),只需要在里面多加入kubelet hook就可以了。后續(xù)只需通過(guò)更改編排腳本即可進(jìn)行操作。
  對(duì)于不知道hook是什么的讀者,可以理解基本上它就是一個(gè)在os-collect-config協(xié)助將文件(例如yaml文件)轉(zhuǎn)入Kubernetes節(jié)點(diǎn)上之后,通過(guò)節(jié)點(diǎn)上kubelet指令執(zhí)行操作。流程如下圖所示:
  當(dāng)你計(jì)劃開(kāi)發(fā)Kubernetes自動(dòng)化管理時(shí),除了將kubelet hook加入鏡像內(nèi),也要注意到kubelet執(zhí)行后,必須要能夠發(fā)送消息給Heat或Zaqar等等(看你在編排腳本撰寫(xiě)時(shí)的設(shè)定),因此請(qǐng)務(wù)必打開(kāi)部分防火墻設(shè)定(像是80或8080等等)允許消息發(fā)送。
  Heat的自動(dòng)化軟件布署與設(shè)定,通過(guò)同一個(gè)用來(lái)設(shè)定K8S的腳本即可設(shè)定相關(guān)資源。如果你想要將軟件布署加入你的K8S腳本中,可以參考以下腳本片段。
  當(dāng)中`configure_master_deployment`就是可以將單一布署腳本應(yīng)用于多個(gè)節(jié)點(diǎn)上的`OS::Heat::SoftwareDeploymentGroup`資源。
  其工作會(huì)將`OS::Heat::SoftwareConfig`中設(shè)定的腳本與腳本形態(tài)(Ansible, script, Puppet, Kubelet, etc.)通過(guò)K8S節(jié)點(diǎn)(你的OS::Nova::Server資源)中的os -collect-config將腳本信息拉進(jìn)節(jié)點(diǎn)中(此為隨時(shí)監(jiān)聽(tīng)動(dòng)作,可以調(diào)整監(jiān)聽(tīng)區(qū)間,預(yù)設(shè)為30秒),再通過(guò)Kubelet hook呼叫Kubelet指令,執(zhí)行腳本。
  任何執(zhí)行結(jié)果或是錯(cuò)誤狀況。都會(huì)通過(guò)消息回傳給Heat服務(wù)。另外有關(guān)于詳細(xì)kubelet hook信息可以參考:https://github.com/openstack/heat-agents/tree/master/heat-config-kubelet 。
  在編排腳本上加入:
  • kubelet_config:
  • type: OS::Heat::StructuredConfig
  • properties:
  • group: kubelet
  • options:
  • images_timeout: 600
  • containers_timeout: 120
  • config:
  • version: v1beta2
  • containers:
  即可以操作kubelet ,你也可以將cofig部分換成yaml文件輸入。至于在編排腳本上完整的使用方式,可以參考https://github.com/openstack/heat-templates/blob/master/hot/software-config/example-templates/example-kubelet-template.yaml
  調(diào)優(yōu)5 :調(diào)優(yōu)鏡像
  對(duì)于Kubernetes的優(yōu)勢(shì)之一即將服務(wù)都轉(zhuǎn)進(jìn)容器內(nèi)執(zhí)行,然而目前許多大型環(huán)境遺忘了應(yīng)該建制Kubernetes的鏡像優(yōu)化。目前有幾家知名的歐洲大型研究機(jī)構(gòu),就在對(duì)他們OpenStack云上的Kubernetes,進(jìn)行這項(xiàng)優(yōu)化。
  優(yōu)化方向有2:
  1.  替代原先使用的鏡像,將更適合容器的小型鏡像作為整體建置選擇。
  2. 將上面提及編排時(shí)所需要的hooks加入映像檔。在此提供相關(guān)的Dockerfile作為參考。
  (https://github.com/openstack/tripleo-common/blob/master/heat_docker_agent/Dockerfile)
  總結(jié)
  通過(guò)將上面5項(xiàng)調(diào)優(yōu)(調(diào)優(yōu)1:開(kāi)啟convergence模式;調(diào)優(yōu)2:調(diào)整`num_engine_workers`;調(diào)優(yōu)3:開(kāi)啟高速緩存;調(diào)優(yōu)4:允許OpenStack直接操作Kubernetes;調(diào)優(yōu)5:調(diào)優(yōu)鏡像)應(yīng)用到你的K8S環(huán)境中,在執(zhí)行布署或擴(kuò)展(或縮編)時(shí),會(huì)產(chǎn)生明顯的效能改善。
  當(dāng)K8S布署下去后,實(shí)體網(wǎng)絡(luò)調(diào)整變得非常困難。若你選擇運(yùn)用OpenStack編排管理,在任何環(huán)境中改變節(jié)點(diǎn)信息,包含網(wǎng)絡(luò),群集實(shí)體配置,儲(chǔ)存等等就會(huì)變成更為簡(jiǎn)單的操作。
  你也可以通過(guò)專(zhuān)門(mén)負(fù)責(zé)資源管理的編排服務(wù),強(qiáng)化資源布署效能。因?yàn)槟憬^對(duì)不可能將你的運(yùn)營(yíng)中的容器化應(yīng)用程序布署在只有一個(gè)單一節(jié)點(diǎn)的K8S,你更不希望因?yàn)槿魏稳藛T操作時(shí)修改遺漏,導(dǎo)致整個(gè)群集停止服務(wù)。通過(guò)編排就變成是個(gè)較為符合自動(dòng)化目標(biāo)的選項(xiàng)。
  除了上面5項(xiàng)建議外,也鼓勵(lì)你將你的問(wèn)題、想法、解法、或是其他任何幫助發(fā)到社區(qū)上或是聯(lián)系我們,由社區(qū)作為源頭,我們有能力直接改變?cè)搭^以繼續(xù)強(qiáng)化Kubernetes與OpenStack的整合與優(yōu)化,我們努力將源頭技術(shù)優(yōu)化了,不久一定產(chǎn)生更多的優(yōu)化選項(xiàng)。最后受惠的,相信就是你正在運(yùn)營(yíng)的環(huán)境。
  林冠宇將受邀參加6月28日北京舉辦的2017中國(guó)開(kāi)源產(chǎn)業(yè)峰會(huì),歡迎來(lái)到開(kāi)源云計(jì)算核心技術(shù)培訓(xùn)專(zhuān)場(chǎng)與他親密互(mian)動(dòng)(ji)。
  開(kāi)源云計(jì)算核心技術(shù)培訓(xùn)專(zhuān)場(chǎng)由OpenStack基金會(huì)個(gè)人獨(dú)立董事、OpenStack Oslo 組件PTL郭長(zhǎng)波,OpenStack Heat 組件 PTL林冠宇,Ceph專(zhuān)家楊東升,EasyStack容器架構(gòu)師王后明,GCC專(zhuān)家吳中如,OpenStack COA認(rèn)證講師孫鉞6位全球技術(shù)專(zhuān)家團(tuán)權(quán)威授課,培訓(xùn)者還將獲得開(kāi)源云核心技術(shù)培訓(xùn)結(jié)業(yè)證書(shū)。
  6.28開(kāi)源云培訓(xùn)專(zhuān)場(chǎng)火熱報(bào)名中:
  作為培訓(xùn)專(zhuān)場(chǎng)合作單位,開(kāi)源云中文社區(qū)再為粉絲發(fā)福利!報(bào)名頁(yè)面輸入優(yōu)惠碼“kyy628”即可獲得培訓(xùn)專(zhuān)場(chǎng)優(yōu)惠報(bào)名,并贈(zèng)送中國(guó)開(kāi)源產(chǎn)業(yè)峰會(huì)全天通票!
\
本文作者:林冠宇(Rico Lin)
  林冠宇(Rico Lin), OpenStack Heat 組件 PTL(project team leader),開(kāi)源云中文社區(qū)特邀技術(shù)專(zhuān)家。6月28日受邀在北京開(kāi)源云計(jì)算核心技術(shù)培訓(xùn)專(zhuān)場(chǎng)做 “在 OpenStack 上建立你的應(yīng)用程序架構(gòu)”主題培訓(xùn)。

專(zhuān)題

松潘县| 黄山市| 辽源市| 水城县| 濉溪县| 象州县| 彭山县| 平阴县| 翁牛特旗| 来安县| 台前县| 桐庐县| 正定县| 梁山县| 额敏县| 滦南县| 广昌县| 河北区| 滦南县| 临邑县| 金塔县| 乐陵市| 建德市| 丹阳市| 长兴县| 丁青县| 白玉县| 灵石县| 神农架林区| 鄂托克旗| 晋宁县| 临夏市| 栾川县| 龙泉市| 英超| 大连市| 吴江市| 惠东县| 栾城县| 阿尔山市| 隆子县|