開(kāi)發(fā)者應(yīng)該了解Kubernetes對(duì)于程序的影響點(diǎn)-創(chuàng)新互聯(lián)

作者:了哥-duff 來(lái)源:云棲社區(qū)

原文鏈接: https://yq.aliyun.com/articles/631182?spm=a2c4e.11153940.bloghomeflow.78.7ada291a5uIWrz

成都創(chuàng)新互聯(lián)長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宣恩企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,宣恩網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

開(kāi)發(fā)者是否要了解Kuberntes呢?

現(xiàn)在Kubernters越來(lái)越熱了,很多公司都在開(kāi)發(fā)、測(cè)試以及生產(chǎn)上逐步使用上了Kubernetes作為容器集群管理平臺(tái)。最新調(diào)查顯示,在5000+的大型企業(yè)中,有超過(guò)40%的生產(chǎn)環(huán)境已經(jīng)使用上Kubernetes(*)。但是一般的理解,Kubernetes是更偏運(yùn)維類的系統(tǒng),開(kāi)發(fā)似乎不用太關(guān)注,是否是這樣?答案是否定的!

雖然說(shuō),多數(shù)開(kāi)發(fā)者可以不用改動(dòng)原有應(yīng)用就可以把這些應(yīng)用遷移/搬移到容器平臺(tái)里(這里用“搬移”意思是,更多的是使用者把容器直接作為虛機(jī)對(duì)待),但是如果需要更好的使用Kubernetes,則開(kāi)發(fā)者需要理解kubernetes的一些架構(gòu)以及原理,并對(duì)程序架構(gòu)以及一些實(shí)現(xiàn)細(xì)節(jié)作出調(diào)整。本文從一些細(xì)節(jié)上解釋一下程序需要做出的適配點(diǎn),以更好的把程序運(yùn)行到Kuberentes上。

處理好IP無(wú)關(guān)性/動(dòng)態(tài)性

在程序中,要做到把程序間的相互調(diào)用做到不寫死IP,而且要能適配容器的IP的漂移。要做到IP無(wú)關(guān)性,可以通過(guò)以下幾個(gè)方式:

  1. 通過(guò)微服務(wù)的服務(wù)注冊(cè)與發(fā)現(xiàn)的方式來(lái)獲取對(duì)端IP。注意這個(gè)是容器IP,一般在集群外是不可見(jiàn)的。如果還有Kubernetes集群外的應(yīng)用,要直接訪問(wèn)POD(特別是Springcloud類應(yīng)用混布),則需要考慮網(wǎng)絡(luò)模型的問(wèn)題。在阿里云里,提供了Terway的網(wǎng)絡(luò)模式,利用了彈性網(wǎng)卡技術(shù)(ENI)可以直接支持ECS與POD的互通,很好的支持程序往容器化演進(jìn)。
    (terway已經(jīng)開(kāi)源 https://github.com/AliyunContainerService/terway ,求star)

  2. 通過(guò)Kubernetes的SLB Service或者Ingress的方式訪問(wèn)POD。特別是對(duì)于傳統(tǒng)非改造的的應(yīng)用直接搬遷,需要使用這個(gè)模式。因?yàn)镾LB/Ingress的對(duì)外IP是固定。如果是集群中訪問(wèn),則使用service的域名方式訪問(wèn)更好。

處理好程序的外部配置

通常,原有的程序都是將相關(guān)配置寫到本地配置文件的。到了容器特別是Kubernetes后,這個(gè)方式務(wù)必改變,因?yàn)槌绦虻膯?dòng)過(guò)程已經(jīng)無(wú)法人為干預(yù),同時(shí)需要能適配支持程序?qū)嵗纳炜s,而不是固定將程序設(shè)計(jì)成固定的實(shí)例數(shù)。

充分利用Kubernetes的configmap/secret

對(duì)于啟動(dòng)時(shí)的配置以及環(huán)境變量配置,盡可能配置到configmap以及secret中。這里需要注意的是,configmap/secret的改動(dòng)是無(wú)法改變已經(jīng)運(yùn)行的容器的環(huán)境變量。如果是通過(guò)volume方式使用,則對(duì)應(yīng)的文件在不確定時(shí)間時(shí)在已有的程序中生效。所以對(duì)于configmap/secret的使用,后續(xù)的變更都要通過(guò)rolling upgrade的方式使其新配置生效

利用配置中心

對(duì)于運(yùn)行態(tài)的配置變更,需要利用微服務(wù)體系中的配置中心的概念來(lái)處理,需要其更好支持以下核心特性:

  • 必須支持動(dòng)態(tài)推送

  • 必須支持版本管理

  • 必須支持容錯(cuò)和恢復(fù)

  • 支持安全通信
    在阿里云上可以免費(fèi)使用配置中心:ACM,其已經(jīng)很好的提供了以上特性。并且其已經(jīng)開(kāi)源出來(lái),叫NACOS( https://nacos.io)

理解好程序的啟動(dòng)過(guò)程和啟動(dòng)時(shí)間

雖然很多時(shí)候我們聽(tīng)到容器的宣傳是“秒級(jí)”啟動(dòng),但是對(duì)于程序如何在容器/Kubernetes里啟動(dòng),是需要程序有明確的認(rèn)識(shí)的。

這里需要特別注意的是:“秒級(jí)啟動(dòng)”不能等同于“秒級(jí)可用”。因?yàn)槌绦蛟谌萜鞯膯?dòng)過(guò)程大體如下:

這里標(biāo)示的時(shí)間級(jí)別以一個(gè)普通tomcat業(yè)務(wù)程序?yàn)槔ɡ缙湫枰B接mysql等)
所以開(kāi)發(fā)者需要考慮這個(gè)過(guò)程對(duì)于程序的影響

利用好Kubernetes的健康檢查雙保險(xiǎn)

以往健康檢查的概念是做health check,但是到Kubernetes則變?yōu)榱藘芍氐臋z查,分別為:liveness和readiness,為什么呢?從上面的程序啟動(dòng)過(guò)程可以看見(jiàn),容器啟動(dòng)并不代表程序已經(jīng)可以被訪問(wèn),特別是對(duì)于java類程序,還有springboot/tomcat等的啟動(dòng)過(guò)程,這個(gè)過(guò)程也是比較費(fèi)時(shí)的。如果在這個(gè)時(shí)候去訪問(wèn)程序則是很容易timeout的。

  • Liveness: 確保應(yīng)用還存活,不然Kubernetes就會(huì)重啟這個(gè)POD

  • Liveness prob合理設(shè)置initialDelaySeconds值,避免不斷重啟POD(考慮使用99%的大延遲最為配置值比較合適)

  • Readiness: 確保應(yīng)用已經(jīng)可以接收流量了,不然不會(huì)分發(fā)流量給他,常見(jiàn)問(wèn)題如:首次訪問(wèn)超時(shí)

  • 用于檢查的三種類型探針:http, cmd, tcp,可以根據(jù)程序情況使用

基于這個(gè)設(shè)計(jì)原則,程序需要考慮提供兩個(gè)被檢查的接口。一個(gè)即刻歐用于判斷程序是否存活,例如直接返回http 200。一個(gè)接口用于判斷程序是否能正常處理請(qǐng)求,特別是對(duì)于程序依賴連接數(shù)據(jù)庫(kù)、redis等外資源才能提供服務(wù),則這個(gè)接口需要去檢查這些外部資源是否可以使用。這兩個(gè)接口是明確的含義,千萬(wàn)別用反了。

小結(jié)

對(duì)于IT系統(tǒng)架構(gòu)越來(lái)越復(fù)雜的越來(lái)越智能的今天,開(kāi)發(fā)者已經(jīng)可以把更多的精力放在了業(yè)務(wù)開(kāi)發(fā)上,但是從架構(gòu)設(shè)計(jì)上,還是需要對(duì)Kubernetes有個(gè)深刻的認(rèn)識(shí),以免違背Kubernetes的設(shè)計(jì)原則。

(*) 數(shù)據(jù)來(lái)源: https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/

網(wǎng)頁(yè)題目:開(kāi)發(fā)者應(yīng)該了解Kubernetes對(duì)于程序的影響點(diǎn)-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.bm7419.com/article26/dcdocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、電子商務(wù)、虛擬主機(jī)、網(wǎng)站排名、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司