javaweb k8s_阿里云部署K8Sweb项目
一、背景
如果你
1.使用Java進(jìn)行開發(fā)
2.使用容器鏡像的制品形式進(jìn)行交付
3.制品最終會運(yùn)行在阿里云ACK或者其他K8S集群上
那么本文檔可以幫助您實現(xiàn)研發(fā)流程的協(xié)同自動化。
二、用戶訴求
1.一般來說,使用K8S部署場景如下:
2.對源代碼進(jìn)行一定的質(zhì)量檢測,比如單元測試,代碼掃描
3.將源代碼構(gòu)建成為可交付的制品,也就是容器鏡像
4.對制品進(jìn)行測試環(huán)境驗證
5.使用完成驗證的制品進(jìn)行線上部署
6.使用基礎(chǔ)設(shè)施即代碼的方式,在代碼庫中管理與應(yīng)用相關(guān)的所有yaml文件。使用這種方式,將k8s的編排能力完全交給開發(fā),比較靈活,也更加利于DevOps的實施。
上述活動需要有不同角色的參與:開發(fā)、測試、運(yùn)維。如何保證不同參與者可以使用統(tǒng)一的交付流程來進(jìn)行協(xié)作,是云效Flow交付流水線要解決的主要問題。
三、云效解決方案
通過云效持續(xù)交付流水線和阿里云K8S很好的結(jié)合在一起,為應(yīng)用的持續(xù)交付提供了很好的基礎(chǔ)保障,如下圖:
開發(fā)者提交代碼變更到代碼庫,云效在監(jiān)聽著代碼庫的變動,一旦代碼發(fā)生變化,將自動觸發(fā)云效持續(xù)部署流水線一次構(gòu)建任務(wù)的運(yùn)行,包括代碼檢查、構(gòu)建、測試部署、測試驗證和生產(chǎn)部署等過程。其中,在構(gòu)建完之后,生成Docker鏡像,并自動上傳至應(yīng)用鏡像倉庫,在部署階段(測試環(huán)境的部署和生產(chǎn)環(huán)境的部署)時,獲取當(dāng)前流水線實例構(gòu)建出來的鏡像版本,通過K8S進(jìn)行容器編排部署。而這一切,都是通過自動化的手段進(jìn)行完成。
四、云效操作實踐
接下來以一個 Java Spring Boot 的代碼庫為例,講解如何進(jìn)行構(gòu)建并以kubectl apply的方式部署到阿里云 ACK。
1.創(chuàng)建流水線
進(jìn)入云效(https://devops.aliyun.com)點擊頁面左上角的dock,選擇流水線進(jìn)入Flow
2.點擊右上角【新建流水線】,進(jìn)入流水線創(chuàng)建向?qū)ы撁妗?/p>
3.選擇相應(yīng)模板,并點擊創(chuàng)建
配置代碼庫
創(chuàng)建流水線之后會自動彈出添加代碼源的窗口,這里選擇Flow提供的示例代碼源,并進(jìn)行添加
示例代碼庫地址為:https://code.aliyun.com/flow-example/spring-boot,請先查看相關(guān)的manifest文件,其中包含了一個deployment,一個service,以及一個ingress將這個服務(wù)暴露到公網(wǎng)上:
配置鏡像構(gòu)建任務(wù)
4.你需要先在cr.console.aliyun.com上創(chuàng)建一個鏡像倉庫,然后在流水線中進(jìn)入“鏡像構(gòu)建并推送至阿里云鏡像倉庫”的任務(wù)進(jìn)行編輯。點擊”新建服務(wù)授權(quán)”,進(jìn)行阿里云授權(quán)。同意授權(quán)之后,Flow會將創(chuàng)建好的服務(wù)授權(quán)自動回填寫到表單中。
5.接下來完成區(qū)域、倉庫的選取。標(biāo)簽填入“${DATETIME}”,表示以流水線觸發(fā)時的時間戳作為鏡像的標(biāo)簽。Dockerfile路徑填入”Dockerfile2”
6.配置好之后再“鏡像構(gòu)建并推送至阿里云鏡像倉庫”任務(wù)的下方可以看到該任務(wù)輸出的變量,這些變量可以在后續(xù)的任務(wù)中引用。關(guān)注其中的第二個和第三個變量即可,其中第二個是該鏡像地址的公網(wǎng)地址,第三個是該鏡像地址的VPC地址。這里推薦將鏡像倉庫和ACK集群放在同一個集群,然后在后續(xù)的部署任務(wù)中選擇VPC地址,以加速部署過程。
配置部署任務(wù)
點擊“Kubernetes發(fā)布”任務(wù),進(jìn)入配置。點擊”新建連接”,進(jìn)行集群授權(quán),完成阿里云授權(quán)及集群選取。點擊確認(rèn)之后,集群信息會自動填到任務(wù)配置中。
配置變量,填入IMAGE,并選擇鏡像的VPC地址作為變量值。這樣在運(yùn)行時,Flow會把YAML路徑下的所有文件中的${IMAGE}都替換成鏡像的地址,然后再進(jìn)行kubectl發(fā)布。
示例代碼庫中的文件https://code.aliyun.com/flow-example/spring-boot/blob/master/app-configs/manifest-app/app.yaml的內(nèi)容如下,所以其中的${IMAGE}就會被替換成實際的鏡像地址。
apiVersion: extensions/v1beta1kind: Deploymentmetadata: labels: run: spring-boot-sample name: spring-boot-samplespec: replicas: 2 selector: matchLabels: run: spring-boot-sample template: metadata: labels: run: spring-boot-sample spec: containers: - image: ${IMAGE} name: appPlain Text
添加人工卡點
為了保證經(jīng)過審批的制品才能進(jìn)入部署環(huán)境,需要添加一個人工卡點,這里假設(shè)這個環(huán)境是測試環(huán)境,需要有測試管理員來審批才能進(jìn)入。
首選需要在企業(yè)中創(chuàng)建一個角色”測試管理員“,并將企業(yè)用戶”張三”的角色設(shè)置為該角色。
然后回到流水線繼續(xù)進(jìn)行配置,在主機(jī)部署前面添加一個任務(wù),搜索”人工卡點“,并按照角色進(jìn)行配置:
以上演示了如何添加一個進(jìn)入測試環(huán)境的卡點,添加生產(chǎn)環(huán)境的卡點也是類似的,這里不再贅述,可以類似的進(jìn)行配置。
運(yùn)行流水線
配置完畢,點擊”保存并運(yùn)行”觸發(fā)流水線:
掃描、單測及構(gòu)建上傳的任務(wù)自動完成,并停在了卡點上。普通人員無權(quán)限通過,切換到張三的賬號之后,可以通過或者拒絕。
點擊”驗證通過“,流水線會進(jìn)入Kubectl部署的任務(wù)。
由于在manifest中包含了ingress配置,因此可以通過ack的ingress提供的域名訪問服務(wù):
$ curl http://www.c5a194a8ee10044xxxxxxx367692.cn-beijing.alicontainer.comGreetings from Spring Boot!Shell
回滾
如果發(fā)布完成之后發(fā)現(xiàn)線上服務(wù)有問題,則需要快速回滾。云效Flow提供了通過歷史版本直接進(jìn)行回滾的能力。
在流水線運(yùn)行頁面點擊”部署歷史“,然后選擇相應(yīng)的部署任務(wù),便可以看到該部署任務(wù)所有的成功部署記錄
點擊版本3的”回滾“,即可回滾到該版本
通知
為了更好的進(jìn)行協(xié)作,Flow提供了通知能力在流水線不同的生命周期節(jié)點上進(jìn)行通知。一般來講開發(fā)團(tuán)隊會關(guān)心部署的成功和失敗,那么可以將該事件推送到團(tuán)隊的釘釘群中,配置方式如下,點擊”添加插件”,選擇釘釘機(jī)器人通知,填入webhook地址,運(yùn)行時機(jī)選擇”失敗“,”成功”
再次運(yùn)行之后,就會收到相應(yīng)的通知:
五、結(jié)語
通過以上的操作流程,就可以建立起來一個協(xié)同多角色的流水線。
總結(jié)
以上是生活随笔為你收集整理的javaweb k8s_阿里云部署K8Sweb项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue音乐笔记_Vue音乐项目笔记(二)
- 下一篇: datagrid表头与数据列宽度不对齐_