[No.H001]
作者:肖念康,東莞怡合達(dá)智能制造供應(yīng)鏈資深 Java 開發(fā)工程師,主要負(fù)責(zé)公司內(nèi)部 DevOps、代碼托管平臺、任務(wù)需求管理平臺的研發(fā)及其他項(xiàng)目的管理,云原生的研究與開發(fā)工作。
公司簡介
怡合達(dá)致力于自動化零部件研發(fā)、生產(chǎn)和銷售,提供 FA 工廠自動化零部件一站式供應(yīng),怡合達(dá)深耕自動化設(shè)備行業(yè),基于應(yīng)用場景對自動化設(shè)備零部件進(jìn)行標(biāo)準(zhǔn)化設(shè)計(jì)和分類選型,通過標(biāo)準(zhǔn)設(shè)定、產(chǎn)品開發(fā)、供應(yīng)鏈管理、平臺化運(yùn)營,以信息和數(shù)字化為驅(qū)動,為自動化設(shè)備行業(yè)提供高品質(zhì)、低成本、短交期的自動化零部件產(chǎn)品。
技術(shù)現(xiàn)狀
在使用 Kubernetes 之前,公司一直是采用超融合傳統(tǒng)虛擬機(jī)的方式來部署上線項(xiàng)目,這就導(dǎo)致公司資源浪費(fèi)非常嚴(yán)重,每年單單在服務(wù)器的開銷就大大增加。
項(xiàng)目在上線的過程中出錯的幾率非常大,并且難以排查,沒有一套規(guī)范的流程,需要開發(fā)人員手動部署,導(dǎo)致人員消耗非常嚴(yán)重。
團(tuán)隊(duì)規(guī)模
目前公司擁有 3000+ 的員工,其中研發(fā)團(tuán)隊(duì)(運(yùn)維,開發(fā),測試,產(chǎn)品等)超過 300 人,在蘇州,湖北都有研發(fā)團(tuán)隊(duì)。
背景介紹
目前行業(yè)正在向自動化、云原生靠近,傳統(tǒng)的互聯(lián)網(wǎng)模式已經(jīng)無法滿足大公司的業(yè)務(wù)需求了,為了讓開發(fā)人員將更多的精力放在業(yè)務(wù)上,自動化部署、項(xiàng)目的全方位監(jiān)控就變得越來越重要。
目前公司云原生是剛剛起步,很多東西需要去探索發(fā)現(xiàn),所以技術(shù)上有很多欠缺,需要非常細(xì)致的理解各個(gè)組件的運(yùn)行原理和模式。
擁抱云原生就意味著公司的 IT 層面將上升一個(gè)等級,原有的項(xiàng)目治理將完全摒棄,將會以一套全新的方式來全方位地治理項(xiàng)目,使用 Kubernetes 和容器化技術(shù)將減少服務(wù)的運(yùn)維成本和項(xiàng)目的容錯成本,為客戶帶來的使用體驗(yàn)也將提升一個(gè)層次。
選型說明
1、工具選型的過程
在使用青云科技(qingcloud.com,股票代碼:688316)的 KubeSphere 之前,我們也使用了很多其他的項(xiàng)目,如 KubeOperator,DaoCloud,Choerodon 等。但是在使用過程中發(fā)現(xiàn),其他工具的功能并不是很完善,遇到問題很難排查,社區(qū)也不是很活躍,這就導(dǎo)致我們的使用成本和維護(hù)成本大大增加。
2、選擇 KubeSphere 的原因
我通過博客和論壇發(fā)現(xiàn)了 KubeSphere,Issue 的提出與解決非常的完善和及時(shí)。KubeSphere 官網(wǎng)有很多案例與講解,社區(qū)活躍度非常高。這不正是我想要的嗎?
經(jīng)過實(shí)踐使用 KubeSphere 搭建的集群更加穩(wěn)定,資源管控更加便捷,與同類云原生產(chǎn)品相比,KubeSphere 幾乎實(shí)現(xiàn)了我們在生產(chǎn)環(huán)境會用到的所有功能。
于是我們就開始在測試環(huán)境搭建并使用,隨后慢慢地向生產(chǎn)環(huán)境遷移。目前我們公司有三分一的項(xiàng)目已經(jīng)遷移到 KubeSphere 平臺上,并且回收了之前的舊服務(wù)器,大大提高了資源使用率。
實(shí)踐過程
1、基礎(chǔ)設(shè)施與部署架構(gòu)
Kubernetes 與 KubeSphere 的搭建也非常簡單,根據(jù)官方文檔先下載 KubeKey, 使用 KubeKey 搭建就可以了。
目前我們使用私有環(huán)境來搭建 Kubernetes 與 KubeSphere,因?yàn)槭窃谖覀儍?nèi)部使用,所以不考慮在云上進(jìn)行搭建。
基礎(chǔ)服務(wù)器采用的是 Linux Centos 7,內(nèi)核版本是 5.6。
在搭建 Kubernetes 集群時(shí),我選擇使用 Keepalived 和 HAproxy 創(chuàng)建高可用 Kubernetes 集群[1],其中包括兩個(gè)負(fù)載均衡入口。
然后是 3 個(gè) Master 節(jié)點(diǎn),3 個(gè) Worker 節(jié)點(diǎn),一個(gè) Etcd 集群,因?yàn)槭嵌嗉�,我會為公司每個(gè)項(xiàng)目創(chuàng)建一個(gè)集群,所有我們單個(gè)集群分配的資源不是很多,當(dāng)資源不夠使用時(shí)需要進(jìn)行申請。
2、平臺的存儲與網(wǎng)絡(luò)
平臺的持久化存儲我們使用的是第三方杉巖,這就需要對方來提供存儲卷和創(chuàng)建存儲系統(tǒng)空間,所以在這里就不做過多介紹。大家也可以使用開源的存儲插件來做,KubeSphere 文檔[2]中提到了很多開源存儲插件,使用起來也非常的方便。
在集群內(nèi)部我們采用的是 Calico CNI 插件負(fù)責(zé)集群的內(nèi)部通訊,當(dāng)我們的服務(wù)部署至 Kubernetes 集群時(shí)會產(chǎn)生一個(gè)內(nèi)部訪問地址,這個(gè)地址在我們集群內(nèi)是可以 ping 通和訪問的,但外部無法訪問。
所以在外部網(wǎng)絡(luò)通訊方面我做了兩套方案:
考慮到我們之前的項(xiàng)目使用 APISIX 作為網(wǎng)關(guān)路由,所以我們就在集群內(nèi)搭建了 APISIX:
搭建方式也非常簡單,創(chuàng)建一個(gè) APISIX 模板,再創(chuàng)建一個(gè)應(yīng)用就可以了:
創(chuàng)建完成之后集群內(nèi)的項(xiàng)目就可以使用 APISIX 了,將 APISIX 開啟對外訪問,作為集群的唯一入口,接下來在服務(wù)中創(chuàng)建路由,就會在 APISIX 中自動生成一條路由規(guī)則與上游服務(wù):
第二種方案則是使用負(fù)載均衡器 OpenELB,OpenELB 官方提供了三種模式,我們選用的是 Layer2 模式,因?yàn)?BGP 和 VIP 需要機(jī)器的支持,就暫時(shí)沒有搭建,后續(xù)會考慮改用另外兩種模式對外訪問。
官方文檔:https://openelb.io/docs/getting-started/usage/use-openelb-in-vip-mode/
安裝和使用也很方便,可以直接在 KubeSphere 應(yīng)用商店中選擇安裝,也可以在集群中通過 yaml 進(jìn)行安裝:
但是需要注意的是,通過應(yīng)用商店進(jìn)行安裝一定要注意集群的內(nèi)存空間是否充足,否則會導(dǎo)致集群監(jiān)控組件異常。
安裝完成之后,我們只需要開啟 strictARP: true,并設(shè)置 EIP 池就可以了,然后我們在部署服務(wù)時(shí)加上注解:
annotations: lb.kubesphere.io/v1alpha1: openelb protocol.openelb.kubesphere.io/v1alpha1: layer2 eip.openelb.kubesphere.io/v1alpha2: eip-layer2-pool
將 type 改為:LoadBalance,就會在我們的 IP 池中獲取一個(gè)對外訪問的 IP 分配給服務(wù)進(jìn)行對外訪問了。
3、日志與監(jiān)控
我們搭建了一套 EFK 的日志系統(tǒng),通過 Filebeat 收集服務(wù)端的數(shù)據(jù),再通過 Kafka 發(fā)送到 es 中,然后通過 Kibana 查詢?nèi)罩緮?shù)據(jù),另外我們增加了一套 SkyWalking,它會給我們生成一個(gè)鏈路 ID,這樣我們就可以根據(jù)這個(gè)鏈路 ID 直接查找當(dāng)前請求下的所有日志。
在監(jiān)控方面除了 KubeSphere 自帶的監(jiān)控之外,我們還用了一套外部的監(jiān)控系統(tǒng):
主機(jī)層面:Prometheus + General
服務(wù)層面:SkyWalking
包括服狀態(tài)的監(jiān)控以及所有的告警
4、CI/CD
我們開啟了 KubeSphere 的 DevOps 模塊,里面集成了 Jenkins,流水線的構(gòu)建,實(shí)現(xiàn)了項(xiàng)目從拉取代碼,質(zhì)量檢查到項(xiàng)目部署一鍵化的流程。
在 DevOps 模塊中用的是自定義 GitLab 倉庫,如果是自己實(shí)踐的話可以去 KubeSphere 應(yīng)用商店中下載使用,在這里我就介紹一下自定義實(shí)現(xiàn)。
首先需要打開 KubeSphere 自帶的 Jenkins,進(jìn)入頁面創(chuàng)建一個(gè) GitLab 的憑證,然后在系統(tǒng)配置自定義 GitLab 的地址。
這里的憑據(jù)就是我們剛剛創(chuàng)建的 GitLab 憑據(jù),地址就直接填自己倉庫的地址,然后就可以在 KubeSphere 中看到剛剛填寫的地址了。
我是根據(jù)官方文檔[3]創(chuàng)建的流水線,其中有些地方需要自己指定。
在 Jenkins 中是提供一個(gè) Maven,在這里我需要改成自定義的 Maven,不然項(xiàng)目構(gòu)建的時(shí)候會失敗,我們只需要在 configMap 中修改 setting.xml 文件就可以了。
鏡像倉庫用的是自定義 Harbor 倉庫,要在 Harbor 中先創(chuàng)建存放鏡像的地址,然后創(chuàng)建權(quán)限,在 KubeSphere 中添加憑證就可以使用了。
在使用流水線之前一定要把 GitLab、Kubernetes、鏡像倉庫的憑證建好,后面直接使用就可以了。
一些前置的條件配置好之后就可以直接去創(chuàng)建流水線了。
運(yùn)行后可以看到運(yùn)行記錄。
流水線跑完之后就可以在項(xiàng)目中看到之前部署的項(xiàng)目了。
包括服務(wù)和容器組,在里面就可以對項(xiàng)目進(jìn)行管理了,包括負(fù)載均衡,網(wǎng)關(guān),路由,擴(kuò)容等一些操作。
使用效果
在使用 KubeSphere 之后,我們所有的項(xiàng)目都集中在一起了,管理起來方便很多,服務(wù)器的資源也很大程度的減少,在資金方面節(jié)省了很多。
項(xiàng)目上線現(xiàn)在只需要創(chuàng)建執(zhí)行流水線就可以了,再根據(jù)定時(shí)任務(wù)定時(shí)執(zhí)行,并且項(xiàng)目可以自動增加副本,項(xiàng)目啟動失敗會自動回滾到之前的版本。
在業(yè)務(wù)方面,接口的請求時(shí)間降低了,用戶的使用體驗(yàn)也增加了不少,出現(xiàn) bug 能夠快速的定位并解決問題。
未來規(guī)劃
未來我們將把公司內(nèi)部系統(tǒng)與 KubeSphere 完全打通,成立云原生小組來負(fù)責(zé)云原生的研發(fā)工作。
公司的服務(wù)器資源將完全回收,將會以集群分配的方式管理項(xiàng)目,之后會自研一些插件和組件使用并進(jìn)行開源。
對于 KubeSphere,我們也有一些建議:
希望文檔能夠在詳細(xì)一點(diǎn),有一些插件的文檔說明只是大概的介紹了一下。
監(jiān)控面板不是很細(xì)致,需要使用自定義的監(jiān)控面板進(jìn)行使用。
目前發(fā)現(xiàn)告警通知方面只能在通知聚到中配置釘釘一個(gè)地址,希望的是在每一個(gè)項(xiàng)目中都能夠配置通知地址,這樣每一個(gè)釘釘告警通知群就能夠做到互不干擾。
希望 KubeSphere 未來會發(fā)展的越來越好!
榜單收錄、高管收錄、融資收錄、活動收錄可發(fā)送郵件至news#citmt.cn(把#換成@)。
海報(bào)生成中...