項目遷移到k8s平台流程


 一般來說,遷移的步驟分為六步:1、制作鏡像 2、控制器管理Pod 3、Pod數據持久化 4、暴露應用 5、對外發布應用 6、日志/監控

1、制作鏡像分為三步:

  • 第一基礎鏡像,是基於哪個操作系統,比如Centos7或者其他的
  • 第二步中間件鏡像,比如服務鏡像,跑的像nginx服務,tomcat服務
  • 第三步項目鏡像,它是服務鏡像之上的,將你的項目打包進去,那么這個項目就能在你這個服務鏡像里面運行了

一般運維人員都是提前將鏡像做好,而開發人員就能直接拿這個鏡像去用,這個鏡像一定要符合現在環境部署的環境

2、控制器管理 pod

也就是k8s去部署這個鏡像了,一般我們都會去拿控制器去部署,用的最多的就是 deployment

  • Deployment:無狀態部署

  • StatefulSet:有狀態部署

  • DaemonSet:守護進程部署

  • Job & CronJob:批處理

無狀態和有狀態的有什么區別?有狀態的是有身份的,比如網絡ID、存儲、這個兩個是提前規划好的,有序啟動/停止

3、Pod 數據持久化

pod數據持久化主要是因對一個應用程序說的,比如開發一個項目,這個項目有沒有落地到本地文件,如果有落的話,就保證他持久的有了,那就必須要用到pod數據的持久化了。

容器部署過程中一般有以下三種數據:

  • 啟動時需要的初始數據,可以是配置文件

  • 啟動過程中產生的臨時數據,該臨時數據需要多個容器間共享

  • 啟動過程中產生的持久化數據

4、暴露應用

在 k8s中,部署一個deployment,它是無法對外進行訪問的,即其他應用程序要想訪問部署的deployment,它找不到該怎么去訪問。為什么去這么講,因為deployment一般都是多副本的去部署,有可能會分布在不同的節點之上,而且重建 pod ip也會變,重新發布一下也會變了,所以沒有辦法去固定去訪問哪個pod,即使固定了,其他的pod也訪問不了。要想做到多個 pod 都去提供服務的話,前面有必須要加一個負載均衡,提供一個訪問入口,只有訪問這個統一入口,才能轉發到后端多個pod上,只要訪問這個Cluster IP就能轉發到后端的pod上。

Service

  • Service 定義了 Pod 的邏輯集合和訪問這個集合的策略

  • Service 引入為了解決Pod的動態變化,提供服務發現和負載均衡

  • 使用 CoreDNS 解析 Service 名稱

5、對外發布應用

暴露出去之后呢,也就是需要讓用戶去訪問,比如搭建一個電商網站,讓用戶去訪問,ingress相對於service,它是一個互補的狀態,彌補了各自,service主要提供了集群內部的訪問,也可以暴露一個TCP/UDP的端口,而ingress主要是一個7層的轉發,也就是提供一個統一的入口,只要訪問ingress controller,它就能幫你轉發你部署所有的項目,也就是所有的項目都使用域名去訪問。

首先開發者將代碼部署到你的代碼倉庫中,主流的用的Git或者gitlab,提交完代碼通過CI/CD平台需要對代碼進行拉取、編譯、構建,產生一個War包,然后交給Ansible然后發送到雲主機上/物理機,然后通過負載均衡將項目暴露出去,然后會有數據庫,監控系統,日志系統來提供相關的服務。

首先也是開發將代碼放在代碼倉庫,然后通過jenkins去完成拉取代碼,編譯,上傳到我們的鏡像倉庫。

這里是將代碼打包成一個鏡像,而不是刻意執行的war或者jar包,這個鏡像包含了你的項目的運行環境和項目代碼,這個鏡像可以放在任何docker上去run起來,都可以去訪問,首先得保證能夠在docker上去部署起來,再部署到k8s上,打出來的鏡像去放在鏡像倉庫中,來集中的去管理這些鏡像。

因為每天會產生幾十個或者上百個鏡像,必須通過鏡像倉庫去管理,這里可能會去寫一個腳本去連接k8smaster,而k8s會根據自己的部署去調度這些pod,然后通過ingress去發布我們的應用,讓用戶去訪問,每個ingress會關聯一組pod,而service會創建這組pod的負載均衡,通過service去區分這些節點上的Pod。

然后數據庫是放在集群之外,監控系統日志系統也可以放在k8s集群放在去部署,也可以放在之外,我們是放在k8s集群內的,也不是特別敏感,主要用來運維和開發調試用的,不會影響到我們的業務,所以我們優先去k8s中去部署。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM