基於k8s的集群穩定架構

2021-10-09 15:01:48 字數 2693 閱讀 5979

我司的集群時刻處於崩潰的邊緣,通過近三個月的掌握,發現我司的集群不穩定的原因有以下幾點:

1、發版流程不穩定

2、缺少監控平台【最重要的原因】

3、缺少日誌系統

4、極度缺少有關操作文件

5、請求路線不明朗

總的來看,問題的主要原因是缺少可預知的監控平台,總是等問題出現了才知道。次要的原因是伺服器作用不明朗和發版流程的不穩定。

發版流程不穩定

重構發版流程。業務全面k8s化,構建以kubernetes為核心的ci/cd流程。

發版流程

有關發版流程如下:

需要強調的一點是,在這裡的資源資源清單不包含configmap或者secret,牽扯到安全性的問題,不應該出

現在**倉庫中,我司是使用rancher充當k8s多集群管理平台,上述安全問題在rancher的dashboard中由運維來做的。

有關服務部署邏輯圖如下:

根據發版流程的**,再根據邏輯圖可以明確發版流程。在這裡看到我司使用的是kong代替nginx,做認證、鑑權、**。而slb的ip繫結在kong上。0,1,2屬於test job;3屬於build job;4,5,6,7屬於change pod 階段。並非所有的服務都需要做儲存,需要根據實際情況來定,所以需要在kubernetes.sh裡寫判斷。在這裡我試圖使用一套ci應用與所有的環境,所以需要在kubernetes.sh中用到的判斷較多,且.gitlab-ci.yml顯得過多。建議是使用乙個ci模版,應用於所有的環境,畢竟怎麼省事怎麼來。

構建可信賴且符合我司集群環境的聯邦監控平台,實現對幾個集群環境的同時監控和預故障告警,提前介入。

有關監控預警邏輯圖如下:

注意這裡使用的是聯邦監控平台,而部署普通的監控平台。

多集群聯邦監控預警平台邏輯圖如下:

因為我司有幾個k8s集群,如果在每個集群上都部署一套監控預警平台的話,管理起來太過不便,所以這裡我採取的策略是使用將各監控預警平台實行乙個聯邦的策略,使用統一的視覺化介面管理。這裡我將實現三個級別餓監控:作業系統級、應用程式級、業務級。對於流量的監控可以直接針對kong進行監控,模版7424。

隨著業務全面k8s化程序的推進,對於日誌系統的需求將更加渴望,k8s的特性是服務的故障日誌難以獲取。建立可觀測的能過濾的日誌系統可以降低對故障的分析難度。

有關日誌系統邏輯圖如下:

**:在業務全面上k8s化後,方便了管理維護,但對於日誌的管理難度就適當上公升了。我們知道pod的重啟是有多因素且不可控的,而每次pod重啟都會重新記錄日誌,即新pod之前的日誌是不可見的。當然了有多種方法可以實現日誌長存:遠端儲存日誌、本機掛載日誌等。出於對視覺化、可分析等的考慮,選擇使用elasticsearch構建日誌收集系統。

建立以語雀–> 運維相關資料為中心的文件中心,將有關操作、問題、指令碼等詳細記錄在案,以備隨時檢視。

**因安全性原因,不便於過多同事查閱。運維的工作比較特殊,安全化、文件化是必須要保障的。我認為不論是運維還是運維開發,書寫文件都是必須要掌握的,為己也好,為他也罷。文件可以簡寫,但必須要含苞核心的步驟。我還是認為運維的每一步操作都應該記錄下來。

根據集群重構的新思路,重新梳理集群級流量請求路線,構建具備:認證、鑑權、**、連線、保護、控制、觀察等一體的流量管理,有效控制故障**範圍。

請求路線邏輯圖如下:

**:經過kong閘道器鑑權後進入特定命名空間(通過命名空間區分專案),因為服務已經拆分為微服務,服務間通訊經過istio認證、授權,需要和資料庫互動的去找資料庫,需要寫或者讀儲存的去找pv,需要轉換服務的去找轉換服務… 然後返回響應。

綜上所述,構建以:以kubernetes為核心的ci/cd發版流程、以prometheus為核心的聯邦監控預警平台、以elasticsearch為核心的日誌收集系統、以語雀為核心的文件管理中心、以kong及istio為核心的南北東西流量一體化服務,可以在高平發,高可靠性上做到很好保障。

附:總體架構邏輯圖

注:請根據箭頭和顏色來分析。

**:上圖看著似乎過於混亂,靜下心來,根據上面的拆分模組一層層分析還是可以看清晰的。這裡我用不同顏色的連線代表不同模組的系統,根據箭頭走還是蠻清晰的。

根據我司目前的業務流量,上述功能模組,理論上可以實現集群的維穩。私認為此套方案可以確保業務在k8s集群上穩定的執行一段時間,再有問題就屬於**層面的問題了。這裡沒有使用到中介軟體,倒是使用到了快取redis不過沒畫出來。我規劃在上圖搞定後再在日誌系統**和轉換服務**增加個中介軟體kafka或者rq 看情況吧。

k8s 集群概念

kubernetes是google開源的容器集群管理系統,提 用部署 維護 擴充套件機制等功能,利用kubernetes能方便管理跨集群執行容器化的應用,簡稱 k8s k與s之間有8個字母 二 基本概念 pod 若干相關容器的組合,pod包含的容器執行在同一host上,這些容器使用相同的網路命令空間...

K8S 集群安裝

1 作業系統 centos 7.4 2 主機資訊 k8smaster主機 kb master 001 192.168 0.11 kb master 002 192.168 0.12 kb master 003 192.168 0.13 k8snode主機 kb node 001 192.168 0....

K8S集群安裝

node設定 部署k8s的dashboard 本文記錄在centoos7上安裝k8s集群。環境配置 master 10.192.33.249 node1 10.192.33.248 兩台機器均已安裝docker18.06,沒有配置docker的registry,且都已經配置為自啟動 timedate...