Kubernetes 稳定性保障手册:洞察+预案
作者 | 悟鵬
來源 | 阿里巴巴云原生公眾號
《Kubernetes 穩(wěn)定性保障手冊》系列文章:
?
- Kubernetes 穩(wěn)定性保障手冊 – 極簡版
- Kubernetes 穩(wěn)定性保障手冊 – 日志專題
- Kubernetes 穩(wěn)定性保障手冊?–?可觀測性專題
- Kubernetes 穩(wěn)定性保障手冊 – 洞察+預案(本文)
綜述?
?
穩(wěn)定性保障是個復雜的話題,需要有效、可迭代、可持續(xù)保障集群的穩(wěn)定性,系統(tǒng)性的方法或許可以解決該問題。
?
為了形成系統(tǒng)性的方法,可以梳理出穩(wěn)定性保障復雜性的源頭,制定數(shù)據(jù)模型來對其進行描述,然后在數(shù)據(jù)模型的基礎上對集群的穩(wěn)定性保障進行數(shù)字化和可視化,以數(shù)據(jù)模型為內(nèi)核來持續(xù)迭代對穩(wěn)定性保障的理解、實踐以及經(jīng)驗的固化。
?
穩(wěn)定性復雜性源頭
?
穩(wěn)定性保障的復雜性源頭,一般會有如下維度:
?
- 系統(tǒng)組件數(shù)量和交互關(guān)系:隨著時間持續(xù)變化
- 系統(tǒng)組件和交互的動態(tài)行為特征:不易推導和觀察
- 系統(tǒng)資源類型和數(shù)量:隨著時間持續(xù)變化
- 系統(tǒng)資源的動態(tài)行為特征:不易推導和觀察
- 集群的穩(wěn)定性保障動作:不易規(guī)范和安全執(zhí)行
總結(jié)下來,即:
?
- 如何有效、全面洞察集群
- 如何通過預案安全執(zhí)行穩(wěn)定性保障動作
數(shù)據(jù)模型
?
可以通過 4 張圖和 3 張表對洞察和預案進行數(shù)據(jù)模型的抽象:
?
4 張圖
?
- 架構(gòu)關(guān)系圖:描述集群組件及其交互關(guān)系
- 架構(gòu)運行圖:描述集群組件及交互的動態(tài)特征
- 資源構(gòu)成圖:描述集群資源的構(gòu)成
- 資源運行圖:描述集群資源的動態(tài)使用特征
3 張表
?
- 事件列表:描述集群產(chǎn)生的需要關(guān)注的事件
- 操作列表:描述集群中可以執(zhí)行的管理操作
- 預案列表:描述集群中事件和操作的關(guān)聯(lián)關(guān)系
如下:
?
洞察
?
集群的功能由集群架構(gòu)提供,功能組件基于集群資源運行,故對于集群穩(wěn)定性的洞察,核心在于把握集群架構(gòu)和集群資源的特征。
?
1. 架構(gòu)關(guān)系圖
?
集群架構(gòu)通常可以通過圖來表征,其中節(jié)點表征組件,邊表征交互關(guān)系,通過圖結(jié)構(gòu)可以直觀把握集群的架構(gòu),形如下圖:
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
{"nodes": [{"_id": "0ce0e913f6e5516846c654dbd81db6ecab1f684e","name": "kube-apiserver","description": "XXX VPC 內(nèi)","type": "managed component","dependencies": {}},{"_id": "f0740d8bb67520857061a9b71d4a9e4fc50bfe3d","name": "etcd","description": "XXX VPC 內(nèi)","type": "managed component | storage","dependencies": {}},{"_id": "05952a825e91cb50a81cbaf23c6941d5c3bb2c89","name": "eni-operator","description": "XXX VPC 內(nèi),管理 ENI","type": "component","dependencies": {"serviceaccount": "enioperator","clusterrole": "enioperator","clusterrolebinding": "enioperator","configmaps": ["eniconfig"],"secrets": ["enioperator"]}},{"_id": "42699513a7561e89a5f99881d7b05653a1625c51","name": "Network Service","description": "提供 VPC/VSwitch 等云網(wǎng)絡資源的管理服務","type": "cloud service"}],"edges": [{"_id": "38bce9ca8a0cec6d8586d96298bd63b0523fc946","source": "eni-operator", "target": "kube-apiserver","description": "管理 ENI 請求"},{"_id": "93f3c21247165f0be3a969fc80f72bc1a402e9f5","source": "eni-operator", "target": "Network Service","description": "訪問阿里云 ECS OpenAPI,管理 VPC/VSwitch 等網(wǎng)絡資源"}] }?
2. 架構(gòu)運行圖
?
集群運行過程中,組件及交互關(guān)系可以通過外部觀測數(shù)據(jù)推測內(nèi)部狀態(tài),如 log/metrics/trace。與集群架構(gòu)圖結(jié)合,可以在靜態(tài)架構(gòu)的基礎上疊加動態(tài)的洞察數(shù)據(jù),更直觀把握集群的健康狀態(tài),如下圖:
?
其中的數(shù)字表征洞察數(shù)據(jù),可以是「異常數(shù)量」「請求流量」等。除了通過數(shù)字進行洞察,還可以使用「顏色表征健康狀態(tài)」「線條粗細表征流量大小」等。
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
{"nodes": [{"_id": "ea4538dc0625d06b0dc93579998e04288656050f","name": "mutatehook","deploy": {"type": "K8s:Deployment","namespace": "kube-system","replicas": 3},"insight": [{"source": {"vendor": "cloud:aliyun:sls","log_project": "xxx","log_store": "mutatehook","log_url": "https://sls.console.aliyun.com/lognext/project/xxx"},"signal": {"exception": {"fuzzy": "fail OR Fail OR error OR Error"}}}]}],"edges": [{"_id": "38bce9ca8a0cec6d8586d96298bd63b0523fc946","source": "eni-operator", "target": "kube-apiserver","insight":[{"source": {"vendor": "cloud:aliyun:sls","log_project": "xxx","log_store": "xxx","log_url": "https://sls.console.aliyun.com/lognext/project/xxx"},"signal": {"exception": {"unauthorized": "Unauthorized","throttling": "'Throttling' OR 'throttling'"}}}]}] }?
3. 資源構(gòu)成圖
資源管理是個復雜的話題,通過分析集群中資源的構(gòu)成關(guān)系,也可以嘗試通過圖結(jié)構(gòu)來表征集群的資源構(gòu)成,節(jié)點表征資源,邊表征資源的從屬或綁定關(guān)系。
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
?
4. 資源運行圖
?
資源使用過程中,也可以對資源及資源間的關(guān)系通過外部觀測數(shù)據(jù)推測內(nèi)部狀態(tài),如 log/metrics/event。與資源構(gòu)成圖結(jié)合,可以在靜態(tài)資源的基礎上疊加動態(tài)的洞察數(shù)據(jù),直觀把握集群資源的使用狀態(tài)。
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
預案
?
集群出現(xiàn)異常是不可避免的,需要在出現(xiàn)異常時安全、有效處理。
?
異常可以通過事件來表征,安全、有效的操作是經(jīng)過評審、演練過的操作,將異常與操作結(jié)合,由異常觸發(fā)操作,形成經(jīng)過評審、演練的預案,可以安全有效處理集群異常。
?
1. 事件列表
?
集群運行過程中會產(chǎn)生需要關(guān)注的事件,事件自身的格式可基于社區(qū) CloudEvents標準來使用:https://github.com/cloudevents/spec/blob/v1.0.1/spec.md。
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
?
2. 操作列表
?
為了降低誤操作的可能性,同時避免異常發(fā)生時執(zhí)行未經(jīng)審核、驗證的操作,需要定義集群中可以進行的操作列表。
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
3. 預案列表
?
在事件列表和操作列表基礎上,可以將事件和操作關(guān)聯(lián)起來,以事件驅(qū)動的方式處理異常,即預案。
?
可通過形如下的數(shù)據(jù)結(jié)構(gòu)描述:
全局可視化穩(wěn)定性保障
?
基于上述4 張圖和3 張表的數(shù)據(jù)模型,形成對集群穩(wěn)定性保障的洞察+預案的內(nèi)核,可以衍生出一種全局可視化的穩(wěn)定性保障服務。
?
這樣的服務具有如下關(guān)鍵點:
?
- 全局視角
- 數(shù)字化
- 可視化
這種服務基于兩種原理實現(xiàn):
?
- 人們對圖像的處理效率遠高于文字
- 全局視角可以提供「端到端理解系統(tǒng)」「精準定位問題」「安全處理問題」的能力
以日常生活中的交通圖為例:
?
通過交通圖,可以快速了解到一個區(qū)域的道路分布和關(guān)鍵節(jié)點,約定俗成的紅黃綠顏色可以直觀表達道路的擁堵狀況。在更豐富的交通圖上,還會觀察到諸如修路、封路等重要事件。
?
這樣,基于可視化的方式,就可以迅速理解一個區(qū)域的交通和地理情況。
?
底層的數(shù)據(jù)模型是基礎,應用可視化的手段,使得數(shù)據(jù)的價值更易被發(fā)揮。
?
一種實現(xiàn)
?
1)部署形態(tài)
?
- Region 化部署
- 面向 Region 內(nèi)單集群或多集群提供服務
2)使用體感
?
根據(jù)穩(wěn)定性保障的最佳實踐,將穩(wěn)定性保障分為如下幾個欄目:
- 運行鏈路圖:
- 該欄目是日常穩(wěn)定性保障高頻使用的區(qū)域,通過可視化的能力,直觀感知異常的發(fā)生、異常范圍和影響程度、白屏化+可視化方式處理異常
- 部署架構(gòu)圖
- 該欄目用于理解集群的部署架構(gòu),感知和處理部署維度的問題
- 容量管理 (包括節(jié)點管理、容量規(guī)劃等) 在此欄目進行
- 業(yè)務流程圖
- 該欄目沉淀業(yè)務的功能流程圖,一方面協(xié)助業(yè)務控制功能復雜度,一方面協(xié)助業(yè)務理解業(yè)務功能現(xiàn)狀,共同助力業(yè)務迭代
- 業(yè)務相關(guān)的數(shù)據(jù)分析可放在該欄目
- 數(shù)據(jù)分析:該欄目服務兩方面的數(shù)據(jù)需求
- 業(yè)務需求
- 查看類:集群規(guī)模等 SLI 信息、集群穩(wěn)定性等 SLO 信息
- 查詢類:根據(jù)特征查詢統(tǒng)計信息 (如根據(jù) label 查詢資源申請等)
- 穩(wěn)定性保障需求
- 查看類:集群水位等 SLI 信息,集群穩(wěn)定性保障效果等 SLO 信息
- 查詢類:根據(jù)特征查詢統(tǒng)計信息 (如根據(jù) label 查詢關(guān)聯(lián)的所有資源信息、資源泄露信息等)
- 業(yè)務需求
- 可觀測性管理
- 該欄目用管理可觀測性相關(guān)事宜,包括:
- 觀測數(shù)據(jù)生成
- 觀測數(shù)據(jù)采集
- 觀測數(shù)據(jù)處理
- 觀測數(shù)據(jù)消費
- 該欄目用管理可觀測性相關(guān)事宜,包括:
- 可控性管理
- 該欄目用于管理與控制相關(guān)的操作,包括:
- 發(fā)布管理
- 災備管理
- 預案管理
- 資源管理
- 混沌工程
- 安全管理
- 定期體檢
- 該欄目用于管理與控制相關(guān)的操作,包括:
系統(tǒng)正常運行期間:
?
- 通過「數(shù)據(jù)分析」欄目,確認集群在「可觀測性」「可控性」方面的覆蓋面和精確性
- 在「可觀測性管理」欄目,進行可觀測維度的管理,包括 數(shù)據(jù)源/監(jiān)控/告警補齊、治理等
- 在「可控性管理」欄目:
- 根據(jù)觀測數(shù)據(jù)發(fā)現(xiàn)的問題,進行預案配置、issue 管理等
- 根據(jù)混沌工程或演練發(fā)現(xiàn)的問題,進行預案配置等
- 在「運行鏈路圖」「部署架構(gòu)圖」中,通過可視化方式,將已經(jīng)配置的監(jiān)控、告警、預案與組件或鏈路結(jié)合
系統(tǒng)異常及恢復期間,在「運行鏈路圖」中:
?
- 通過集群運行鏈路圖或告警,感知異常的發(fā)生
- 自動或手動觸發(fā)問題跟蹤
- 通過集群運行鏈路圖中組件及交互的顏色,感知異常的組件、異常的鏈路和嚴重程度
- 點擊集群運行鏈路圖中組件的異常數(shù)字,獲取關(guān)聯(lián)的異常詳情,或跳轉(zhuǎn)到日志、tracing 系統(tǒng)等進行手動查詢
- 根據(jù)異常詳情或平臺提示,確定待執(zhí)行的預案和關(guān)聯(lián)的組件
- 在集群運行鏈路圖中執(zhí)行預案 (阻斷問題或恢復服務)
- 通過集群運行鏈路圖中組件及交互的顏色,確認預案執(zhí)行效果
- 自動或手動結(jié)束問題跟蹤
問題跟蹤過程中記錄的主要內(nèi)容有:
?
- issue
- 異常發(fā)生的時刻
- 異常處理期間執(zhí)行的動作
- 運行鏈路圖 snapshot
- 異常恢復的時刻
數(shù)據(jù)模型及競爭力分析
?
數(shù)據(jù)模型是穩(wěn)定性保障最佳實踐進行迭代、分享和應用的媒介,通用的洞察和預案可以形成標準化的服務,個性化的洞察和預案可通過固定的結(jié)構(gòu)來描述,然后使用通用的控制器來落地。
?
以數(shù)據(jù)模型形成洞察+預案的穩(wěn)定性保障服務,技術(shù)核心為:
?
- 洞察模型
- 關(guān)鍵問題:
- 如何洞察集群穩(wěn)定性?
- 如何洞察業(yè)務迭代效率?
- 關(guān)鍵問題:
- 數(shù)據(jù)模型
- 關(guān)鍵問題:
- 如何定義有效、可擴展的數(shù)據(jù)描述?
- 關(guān)鍵問題:
在技術(shù)核心的基礎上,可以圍繞如下的競爭力進行迭代:
?
- 洞察
- 全局化
- 數(shù)字化
- 可視化
- 效率
- 最短操作路徑
- 最小使用成本
- 先進性
- 流程化最佳實踐
小結(jié)
?
通過 Spec 規(guī)范 7 種數(shù)據(jù)模型,我們可以基于結(jié)構(gòu)化的描述來表征洞察+預案。以此為核心,不斷迭代對穩(wěn)定性保障的實踐和理解,加速業(yè)務迭代。再擴展一步,也有可能基于該模型在發(fā)展方向反哺業(yè)務。
?
如果大家感興趣,歡迎在留言區(qū)進行交流。
總結(jié)
以上是生活随笔為你收集整理的Kubernetes 稳定性保障手册:洞察+预案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞猪基于 Serverless 的云+端
- 下一篇: 集群镜像:实现高效的分布式应用交付