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