Kubernetes 穩定性保障手冊:洞察+預案


簡介: 穩定性保障是個復雜的話題,需要有效、可迭代、可持續保障集群的穩定性,系統性的方法或許可以解決該問題。

頭圖.png

作者 | 悟鵬
來源 | 阿里巴巴雲原生公眾號

《Kubernetes 穩定性保障手冊》系列文章:

綜述​


穩定性保障是個復雜的話題,需要有效、可迭代、可持續保障集群的穩定性,系統性的方法或許可以解決該問題。

為了形成系統性的方法,可以梳理出穩定性保障復雜性的源頭,制定數據模型來對其進行描述,然后在數據模型的基礎上對集群的穩定性保障進行數字化和可視化,以數據模型為內核來持續迭代對穩定性保障的理解、實踐以及經驗的固化。

穩定性復雜性源頭


穩定性保障的復雜性源頭,一般會有如下維度:

  • 系統組件數量和交互關系:隨着時間持續變化
  • 系統組件和交互的動態行為特征:不易推導和觀察
  • 系統資源類型和數量:隨着時間持續變化
  • 系統資源的動態行為特征:不易推導和觀察
  • 集群的穩定性保障動作:不易規范和安全執行

總結下來,即:

  • 如何有效、全面洞察集群
  • 如何通過預案安全執行穩定性保障動作

數據模型


可以通過 4 張圖和 3 張表對洞察和預案進行數據模型的抽象:

4 張圖

  • 架構關系圖:描述集群組件及其交互關系
  • 架構運行圖:描述集群組件及交互的動態特征
  • 資源構成圖:描述集群資源的構成
  • 資源運行圖:描述集群資源的動態使用特征

3 張表

  • 事件列表:描述集群產生的需要關注的事件
  • 操作列表:描述集群中可以執行的管理操作
  • 預案列表:描述集群中事件和操作的關聯關系

如下:

1.png

洞察


集群的功能由集群架構提供,功能組件基於集群資源運行,故對於集群穩定性的洞察,核心在於把握集群架構和集群資源的特征。

1. 架構關系圖


集群架構通常可以通過圖來表征,其中節點表征組件,邊表征交互關系,通過圖結構可以直觀把握集群的架構,形如下圖:

2.png

可通過形如下的數據結構描述:

{
    "nodes": [ { "_id": "0ce0e913f6e5516846c654dbd81db6ecab1f684e", "name": "kube-apiserver", "description": "XXX VPC 內", "type": "managed component", "dependencies": {} }, { "_id": "f0740d8bb67520857061a9b71d4a9e4fc50bfe3d", "name": "etcd", "description": "XXX VPC 內", "type": "managed component | storage", "dependencies": {} }, { "_id": "05952a825e91cb50a81cbaf23c6941d5c3bb2c89", "name": "eni-operator", "description": "XXX VPC 內,管理 ENI", "type": "component", "dependencies": { "serviceaccount": "enioperator", "clusterrole": "enioperator", "clusterrolebinding": "enioperator", "configmaps": ["eniconfig"], "secrets": ["enioperator"] } }, { "_id": "42699513a7561e89a5f99881d7b05653a1625c51", "name": "Network Service", "description": "提供 VPC/VSwitch 等雲網絡資源的管理服務", "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 等網絡資源" } ] }

2. 架構運行圖


集群運行過程中,組件及交互關系可以通過外部觀測數據推測內部狀態,如 log/metrics/trace。與集群架構圖結合,可以在靜態架構的基礎上疊加動態的洞察數據,更直觀把握集群的健康狀態,如下圖:

3.png

其中的數字表征洞察數據,可以是「異常數量」「請求流量」等。除了通過數字進行洞察,還可以使用「顏色表征健康狀態」「線條粗細表征流量大小」等。

可通過形如下的數據結構描述:

{
    "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. 資源構成圖

資源管理是個復雜的話題,通過分析集群中資源的構成關系,也可以嘗試通過圖結構來表征集群的資源構成,節點表征資源,邊表征資源的從屬或綁定關系。

可通過形如下的數據結構描述:

{
    "kinds": ["vpc", "vswitch", "securitygroup", "ecs", "clb", "rds", "nat", "eip"], "tags": { "cluster/product": "xxx", "cluster/id": "2736f42d4e882ad6825d6364545a3f1cb5136859", "cluster/name": "xxx", "cluster/env": "staging" }, "nodes": [ { "kind": "vpc", "nodes": [ { "_id": "c505f21871bac7385c1387988cf226310af0831e", "id": "vpc-xxx", "description": "", "ipv4": "xxx", "tags": { "resource/creator": "product", "resource/role": "" }, "url": "https://vpc.console.aliyun.com/vpc/xxx" } ] }, { "kind": "ecs", "nodes": [ { "_id": "47c4fe5cc2585a49f07798a0b8b69cda7f8d4a23", "id": "xxx", "az": "xxx", "interfaces": { "primary": { "ip": "xxx", "eni": "xxx", "mac": "xxx" } }, "instance-type-family": "xxx", "instance-type": "xxx", "tags": { "resource/creator": "product", "resource/role": "worker", "node/container-runtime": "xxx", "node/user-networking": "xxx", "node/system-networking": "xxx" }, "status": "", "condition": "", "url": "https://ecs.console.aliyun.com/#/server/xxx" } ] } ], "edges": [ { "_id": "a754c748b2723a25c017421dd0969d00df3c000b", "source": "vsw-xxx", "target": "vpc-xxx", "description": "" }, { "_id": "c34b164eba2897cfb2b574a576672d8aa441d709", "source": "eip-xxx", "target": "ngw-xxx", "description": "" } ] }

4. 資源運行圖


資源使用過程中,也可以對資源及資源間的關系通過外部觀測數據推測內部狀態,如 log/metrics/event。與資源構成圖結合,可以在靜態資源的基礎上疊加動態的洞察數據,直觀把握集群資源的使用狀態。

可通過形如下的數據結構描述:

{
    "nodes": [ { "_id": "35103ac62d4ef0a314e2a5128f44c684205bea2f", "id": "vpc", "insight": [ { "source": { "vendor": "cloud:aliyun:vpc", "type": "OpenAPI" }, "signal": { "vpc/exist": "DescribeVpcs", "vswitch/count": "DescribeVSwitches" } }, { "source": { "vendor": "cloud:aliyun:ecs", "type": "OpenAPI" }, "signal": { "ecs/count": "DescribeInstances", "securitygroup/count": "DescribeSecurityGroups" } } ] }, { "_id": "6450e07dc67027f76f29fbfcb841e57200855196", "id": "ecs", "insight": [ { "source": { "vendor": "cloud:aliyun:ecs", "type": "OpenAPI" }, "signal": { "ecs/exist": "DescribeInstances", "ecs/count": "DescribeInstances", "ecs/usage": "DescribeInstanceMonitorData" } }, { "source": { "vendor": "cloud:aliyun:ecs", "type": "auto" }, "signal": { "ecs/state_change": "" } } ] } ], "edges": [ { "_id": "caa1e395c713f47766ca7bcfc20419c0be0f0803", "source": "i-xxx", "target": "sg-xxx", "insight": [ { "source": { "vendor": "cloud:aliyun:ecs", "type": "OpenAPI" }, "signal": { "exist": "DescribeInstances" } } ] }, { "_id": "537dc478d95714792b3694674d6164f72b361bb0", "source": "eip-xxx", "target": "ngw-xxx", "insight": [ { "source": { "vendor": "cloud:aliyun:vpc", "type": "OpenAPI" }, "signal": { "exist": "DescribeEipAddresses" } } ] } ] }

預案


集群出現異常是不可避免的,需要在出現異常時安全、有效處理。

異常可以通過事件來表征,安全、有效的操作是經過評審、演練過的操作,將異常與操作結合,由異常觸發操作,形成經過評審、演練的預案,可以安全有效處理集群異常。

1. 事件列表


集群運行過程中會產生需要關注的事件,事件自身的格式可基於社區 CloudEvents標准來使用:_https://github.com/cloudevents/spec/blob/v1.0.1/spec.md_

可通過形如下的數據結構描述:

{
    "events": [ { "_id": "a1ab5b61857be35a5c5b203dd84b49248161c823", "description": "restart workload manually", "event": { "id": "restart-workload", "source": "xxx", "specversion": "1.0", "type": "com.aliyun.trigger.manual", "datacontenttype": "application/json", "data": "{\"NAMESPACE\": \"\", \"NAME\": \"\", \"TYPE\": \"\"}" } } ] }

2. 操作列表


為了降低誤操作的可能性,同時避免異常發生時執行未經審核、驗證的操作,需要定義集群中可以進行的操作列表。

可通過形如下的數據結構描述:

{
    "actions": [ { "_id": "47abc5cd9d64018ebf96dc5b2d6a4fbd35a3cb6d", "name": "Action Restart Workload", "exec": "restart-workload", "env": [ "NAMESPACE", "NAME", "TYPE" ] } ] }

3. 預案列表


在事件列表和操作列表基礎上,可以將事件和操作關聯起來,以事件驅動的方式處理異常,即預案。

可通過形如下的數據結構描述:

{
    "plans": [ { "_id": "29a091c48d8992991ed69e8694b017a11abe3eec", "name": "Plan Restart Workload", "description": "重啟 workload", "event": "a1ab5b61857be35a5c5b203dd84b49248161c823", "actions": ["47abc5cd9d64018ebf96dc5b2d6a4fbd35a3cb6d"] } ] }

全局可視化穩定性保障


基於上述4 張圖和3 張表的數據模型,形成對集群穩定性保障的洞察+預案的內核,可以衍生出一種全局可視化的穩定性保障服務。

這樣的服務具有如下關鍵點:

  • 全局視角
  • 數字化
  • 可視化

這種服務基於兩種原理實現:

  • 人們對圖像的處理效率遠高於文字
  • 全局視角可以提供「端到端理解系統」「精准定位問題」「安全處理問題」的能力

以日常生活中的交通圖為例:

4.png

通過交通圖,可以快速了解到一個區域的道路分布和關鍵節點,約定俗成的紅黃綠顏色可以直觀表達道路的擁堵狀況。在更豐富的交通圖上,還會觀察到諸如修路、封路等重要事件。

這樣,基於可視化的方式,就可以迅速理解一個區域的交通和地理情況。

底層的數據模型是基礎,應用可視化的手段,使得數據的價值更易被發揮。

一種實現


5.png

1)部署形態

  • Region 化部署
  • 面向 Region 內單集群或多集群提供服務

2)使用體感


根據穩定性保障的最佳實踐,將穩定性保障分為如下幾個欄目:

  • 運行鏈路圖:

    • 該欄目是日常穩定性保障高頻使用的區域,通過可視化的能力,直觀感知異常的發生、異常范圍和影響程度、白屏化+可視化方式處理異常
  • 部署架構圖

    • 該欄目用於理解集群的部署架構,感知和處理部署維度的問題
    • 容量管理 (包括節點管理、容量規划等) 在此欄目進行
  • 業務流程圖

    • 該欄目沉淀業務的功能流程圖,一方面協助業務控制功能復雜度,一方面協助業務理解業務功能現狀,共同助力業務迭代
    • 業務相關的數據分析可放在該欄目
  • 數據分析:該欄目服務兩方面的數據需求

    • 業務需求

      • 查看類:集群規模等 SLI 信息、集群穩定性等 SLO 信息
      • 查詢類:根據特征查詢統計信息 (如根據 label 查詢資源申請等)
    • 穩定性保障需求

      • 查看類:集群水位等 SLI 信息,集群穩定性保障效果等 SLO 信息
      • 查詢類:根據特征查詢統計信息 (如根據 label 查詢關聯的所有資源信息、資源泄露信息等)
  • 可觀測性管理

    • 該欄目用管理可觀測性相關事宜,包括:

      • 觀測數據生成
      • 觀測數據采集
      • 觀測數據處理
      • 觀測數據消費
  • 可控性管理

    • 該欄目用於管理與控制相關的操作,包括:

      • 發布管理
      • 災備管理
      • 預案管理
      • 資源管理
      • 混沌工程
      • 安全管理
      • 定期體檢

系統正常運行期間:

  • 通過「數據分析」欄目,確認集群在「可觀測性」「可控性」方面的覆蓋面和精確性
  • 在「可觀測性管理」欄目,進行可觀測維度的管理,包括 數據源/監控/告警補齊、治理等
  • 在「可控性管理」欄目:

    • 根據觀測數據發現的問題,進行預案配置、issue 管理等
    • 根據混沌工程或演練發現的問題,進行預案配置等
  • 在「運行鏈路圖」「部署架構圖」中,通過可視化方式,將已經配置的監控、告警、預案與組件或鏈路結合

系統異常及恢復期間,在「運行鏈路圖」中:

  • 通過集群運行鏈路圖或告警,感知異常的發生
  • 自動或手動觸發問題跟蹤
  • 通過集群運行鏈路圖中組件及交互的顏色,感知異常的組件、異常的鏈路和嚴重程度
  • 點擊集群運行鏈路圖中組件的異常數字,獲取關聯的異常詳情,或跳轉到日志、tracing 系統等進行手動查詢
  • 根據異常詳情或平台提示,確定待執行的預案和關聯的組件
  • 在集群運行鏈路圖中執行預案 (阻斷問題或恢復服務)
  • 通過集群運行鏈路圖中組件及交互的顏色,確認預案執行效果
  • 自動或手動結束問題跟蹤

問題跟蹤過程中記錄的主要內容有:

  • issue
  • 異常發生的時刻
  • 異常處理期間執行的動作
  • 運行鏈路圖 snapshot
  • 異常恢復的時刻

數據模型及競爭力分析


數據模型是穩定性保障最佳實踐進行迭代、分享和應用的媒介,通用的洞察和預案可以形成標准化的服務,個性化的洞察和預案可通過固定的結構來描述,然后使用通用的控制器來落地。

以數據模型形成洞察+預案的穩定性保障服務,技術核心為:

  • 洞察模型

    • 關鍵問題:

      • 如何洞察集群穩定性?
      • 如何洞察業務迭代效率?
  • 數據模型

    • 關鍵問題:

      • 如何定義有效、可擴展的數據描述?

在技術核心的基礎上,可以圍繞如下的競爭力進行迭代:

  • 洞察

    • 全局化
    • 數字化
    • 可視化
  • 效率

    • 最短操作路徑
    • 最小使用成本
  • 先進性

    • 流程化最佳實踐

小結


通過 Spec 規范 7 種數據模型,我們可以基於結構化的描述來表征洞察+預案。以此為核心,不斷迭代對穩定性保障的實踐和理解,加速業務迭代。再擴展一步,也有可能基於該模型在發展方向反哺業務。

原文鏈接

本文為阿里雲原創內容,未經允許不得轉載。


免責聲明!

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



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