以前的一篇文章Kubernetes 容器雲實踐方案對開普勒平臺作了一些基本介紹。git
通過一段時間的調整,咱們終於把這個平臺開源了: https://github.com/kplcloud/kplcloudgithub
開普勒雲平臺是一款面向研發、運維等人羣的平臺,只須要具有簡單知識就能夠快速將應用部署到Kubernetes上,如下是平臺的基礎架構:golang
開普勒平臺既能夠經過容器的方式跑在Kubernetes上,也能夠獨立部署。web
在kubernetes master節點上執行便可完成部署,固然,在此以前須要增長app.cfg配置文件。docker
$ git clone github.com/kplcloud/kplcloud && cd kplcloud/
$ kubectl apply -f install/kubernetes/kpaas/
下圖是開普勒雲平臺所對接的平臺及流程。後端
開普勒雲平臺經過調用Jenkins、Gitlab(Github)、Kubernetes等API的方式對應用進行操做。微信
將Consul的KV功能做爲配置中心來使用,在開普勒雲平臺上能夠直接調用Consul API進行操做,能夠在配置文件決定是否啓用Consul KV功能。網絡
Jenkins目前只擔任代碼編譯及將Docker鏡像上傳倉庫的功能。開普勒經過調用JenkinsAPI來建立Job或Build Job,並監聽Job狀態。
開普勒平臺還可調用Github或Gitlab API獲取項目的分支及須要上線的tags。並將相關信息傳給jenkins,Jenkins拉取代碼並執行相關構建過程。
-
應用克隆: 測試人員可能須要作到一個版本多套環境的場景。 在平臺能夠假設一個空間就是一種場景,在一個空間下部署完全部應用以後,須要在其餘空間下也生成同樣的應用,爲了方便操做,能夠直接使用「工具集-克隆」功能完成一鍵克隆。 -
調整容器時間: 金融產品應該都會遇到調整時間的問題。 一般測試一個功能須要對服務的時間進行修改,因爲Docker使用的是宿主機的內核時間,容器沒法對內核時間進行調整,那就須要藉助其餘工具來完成這項工做。 推薦使用一款開源的工具 https://github.com/wolfcw/libfaketime ,咱們將該工具編譯到宿主機上,經過掛載的方式掛入容器裏,就能對單個容器進行調整而不影響其餘容器了。
-
建立應用 -
發佈新版本 -
日誌採集 -
監控告警 -
持久化存儲
3.1 建立應用
FROM golang:latest as build-env
ENV GO111MODULE=on
ENV BUILDPATH=github.com/kplcloud/hello
RUN mkdir -p /go/src/${BUILDPATH}
COPY ./ /go/src/${BUILDPATH}
RUN cd /go/src/${BUILDPATH} && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install -v
FROM alpine:latest
COPY --from=build-env /go/bin/hello /go/bin/hello
WORKDIR /go/bin/
CMD ["/go/bin/hello"]
將以上Dockerfile放入項目目錄,填寫相關信息:
一個應用就建立完成了,管理員審覈提交的信息是否合格,不合格便駁回;合格了就直接經過並進行部署。
部署應用會根據用戶所提交的信息獲取咱們事先定義好的基礎模版,再根據基礎模版生成Kubernetes所能識別的資源,而後調用Kubernetes API建立這些資源。建立完成後再調用Jenkins API建立Job,最後執行構建。
Jenkins完成構建,並將Docker Image 上傳完倉庫以後,開普勒纔會更新Kubernetes相關應用的版本。
在這個過程當中若想加入更多操做,能夠修改JenkinsCommand
模版。
3.2 發佈新應用
構建應用的流程是經過建立應用提交一些信息進行處理。
從git 倉庫獲取tags列表。
調用jenkins API 將應用的相關參數及版本信息傳給它並進行構建。
Jenkins Job執行Shell命令,執行docker build並上傳至Docker Image倉庫。
平臺監聽到job已經成功執行,調用kubernetes API更新應用的Image地址。
監聽升級狀況。
發送通知。
以上是構建應用的後端流程,而前端就比較簡單了,只須要在應用詳情頁點擊"Build"按鈕,在彈出的對話框中選擇想應用的tags版本並提交就好了,以下圖:
點擊詳情頁的build日誌選項卡,會顯示最近的構建記錄,點擊左側相應的版本,能夠查看該版本的構建狀況,也能夠對正在構建的應用進行中斷,以下圖:
3.3 日誌採集
咱們的日誌收集採用的是低耦合、擴展性強、方便維護和升級的方案。
每一個節點Filebeat收集宿主機日誌。
每一個Pod注入Filebeat容器收集業務日誌。
Filebeat會跟應用容器部署在一塊兒,應用也不須要知道它的存在,只須要指定日誌輸入的目錄就能夠了。Filebeat所使用的配置是從ConfigMap讀取,只須要維護好收集日誌的規則。
若是配置了上面的採集器,那麼它會向服務所在的Pod注入一個Filebeat採集器對應用服務的業務日誌進行採集。把採集到的日誌注入到kafka集羣,而後logstash進行消息處理及格式化。
處理完後入到ES集羣,最終咱們就能夠經過kibana查詢到業務日誌了。
Filebeat容器及filebeat的ConfigMap也能夠經過模版的方式進行參數調整。
3.4 監控告警
應用監控告警也是很是重要的一個環節,咱們採用Prometheus+Grafana的方案進行監控,Prometheus+AlertManager進行告警的處理。
AlertManager所拋出的告警信息會發送至開普勒雲平臺進行處理,若你在平臺訂閱了告警類型的消息則會發送至所訂閱類型的相關工具。
咱們能夠在「我的設置-消息訂閱設置」裏選擇須要訂閱的類型及接收的工具:
如下是微信接收到的操做通知:
更多的教程請查閱咱們提供的文檔。https://docs.nsini.com
3.5 持久化存儲
Kubernetes集羣管理員經過提供不一樣的存儲類,能夠知足用戶不一樣的服務質量級別、備份策略和任意策略要求的存儲需求。動態存儲卷供應使用StorageClass來實現,容許存儲卷按需被建立。 若是沒有動態存儲供應,Kubernetes集羣的管理員將不得不經過手工的方式來建立新的存儲卷。 經過動態存儲卷,Kubernetes可以按照用戶的需求,自動建立其須要的存儲。
-
Github: https://github.com/kplcloud/kplcloud -
Document: https://docs.nsini.com -
Demo: https://kplcloud.nsini.com
⭐️⭐️⭐️歡迎加入「開普勒開源羣」。進羣方式:請加小助手微信(微信號:creditease_tech)回覆「開普勒」。
◆ ◆ ◆ ◆ ◆
如需轉載請與小助手(微信號:creditease_tech)聯繫。發現文章有錯誤、對內容有疑問,均可以經過關注宜信技術學院微信公衆號(CE_TECH),在後臺留言給咱們。咱們每週會挑選出一位熱心小夥伴,送上一份精美的小禮品。快來掃碼關注咱們吧!
注:文章封面原圖素材來源於網絡,如有侵權請留言刪除。
⏬點擊「閱讀原文」查看更多技術乾貨
本文分享自微信公衆號 - 宜信技術學院(CE_TECH)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。