关于云原生:Kubernetes-稳定性保障手册洞察预案

118次阅读

共计 7869 个字符,预计需要花费 20 分钟才能阅读完成。

作者 | 悟鹏
起源 | 阿里巴巴云原生公众号

《Kubernetes 稳定性保障手册》系列文章:

  • Kubernetes 稳定性保障手册 — 极简版
  • Kubernetes 稳定性保障手册 — 日志专题
  • Kubernetes 稳定性保障手册 — 可观测性专题
  • Kubernetes 稳定性保障手册 — 洞察 + 预案(本文)

综述​


稳定性保障是个简单的话题,须要 无效、可迭代、可继续 保障集群的稳定性,系统性的办法或者能够解决该问题。

为了造成系统性的办法,能够梳理出稳定性保障复杂性的源头,制订数据模型来对其进行形容,而后在数据模型的根底上对集群的稳定性保障进行 数字化 可视化,以数据模型为内核来继续迭代对稳定性保障的了解、实际以及教训的固化。

稳定性复杂性源头


稳定性保障的复杂性源头,个别会有如下维度:

  • 零碎组件数量和交互关系:随着工夫继续变动
  • 零碎组件和交互的动静行为特色:不易推导和察看
  • 系统资源类型和数量:随着工夫继续变动
  • 系统资源的动静行为特色:不易推导和察看
  • 集群的稳定性保障动作:不易标准和平安执行

总结下来,即:

  • 如何无效、全面 洞察 集群
  • 如何通过 预案 平安执行稳定性保障动作

数据模型


能够通过 4 张图和 3 张表对洞察和预案进行数据模型的形象:

4 张图

  • 架构关系图:形容集群组件及其交互关系
  • 架构运行图:形容集群组件及交互的动静特色
  • 资源形成图:形容集群资源的形成
  • 资源运行图:形容集群资源的动静应用特色

3 张表

  • 事件列表:形容集群产生的须要关注的事件
  • 操作列表:形容集群中能够执行的治理操作
  • 预案列表:形容集群中事件和操作的关联关系

如下:

洞察


集群的性能由集群架构提供,性能组件基于集群资源运行,故对于集群稳定性的洞察,外围在于把握 集群架构 集群资源 的特色。

1. 架构关系图


集群架构通常能够通过 来表征,其中节点表征组件,边表征交互关系,通过图构造能够直观把握集群的架构,形如下图:

可通过形如下的数据结构形容:

{
    "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。与集群架构图联合,能够在动态架构的根底上叠加动静的洞察数据,更直观把握集群的衰弱状态,如下图:

其中的数字表征洞察数据,能够是「异样数量」「申请流量」等。除了通过数字进行洞察,还能够应用「色彩表征衰弱状态」「线条粗细表征流量大小」等。

可通过形如下的数据结构形容:

{
    "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/cloudevent…

可通过形如下的数据结构形容:

{
    "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 张表 的数据模型,造成对集群稳定性保障的 洞察 + 预案 的内核,能够衍生出一种全局可视化的稳定性保障服务。

这样的服务具备如下关键点:

  • 全局视角
  • 数字化
  • 可视化

这种服务基于两种原理实现:

  • 人们对图像的解决效率远高于文字
  • 全局视角能够提供「端到端了解零碎」「精准定位问题」「平安解决问题」的能力

以日常生活中的交通图为例:

通过交通图,能够疾速理解到一个区域的路线散布和要害节点,约定俗成的红黄绿色彩能够直观表白路线的拥挤情况。在更丰盛的交通图上,还会察看到诸如修路、封路等重要事件。

这样,基于可视化的形式,就能够迅速了解一个区域的交通和天文状况。

底层的数据模型是根底,利用可视化的伎俩,使得数据的价值更易被施展。

一种实现


1)部署状态

  • Region 化部署
  • 面向 Region 内单集群或多集群提供服务

2)应用体感


依据稳定性保障的最佳实际,将稳定性保障分为如下几个栏目

  • 运行链路图:

    • 该栏目是日常稳定性保障高频应用的区域,通过可视化的能力,直观感知异样的产生、异样范畴和影响水平、白屏化 + 可视化形式解决异样
  • 部署架构图

    • 该栏目用于了解集群的部署架构,感知和解决部署维度的问题
    • 容量治理 (包含节点治理、容量布局等) 在此栏目进行
  • 业务流程图

    • 该栏目积淀业务的性能流程图,一方面帮助业务管制性能复杂度,一方面帮助业务了解业务性能现状,独特助力业务迭代
    • 业务相干的数据分析可放在该栏目
  • 数据分析:该栏目服务两方面的数据需要

    • 业务需要

      • 查看类:集群规模等 SLI 信息、集群稳定性等 SLO 信息
      • 查问类:依据特色查问统计信息 (如依据 label 查问资源申请等)
    • 稳定性保障需要

      • 查看类:集群水位等 SLI 信息,集群稳定性保障成果等 SLO 信息
      • 查问类:依据特色查问统计信息 (如依据 label 查问关联的所有资源信息、资源泄露信息等)
  • 可观测性治理

    • 该栏目用治理可观测性相干事宜,包含:

      • 观测数据生成
      • 观测数据采集
      • 观测数据处理
      • 观测数据生产
  • 可控性治理

    • 该栏目用于治理与管制相干的操作,包含:

      • 公布治理
      • 灾备治理
      • 预案治理
      • 资源管理
      • 混沌工程
      • 平安治理
      • 定期体检

零碎失常运行期间

  • 通过「数据分析」栏目,确认集群在「可观测性」「可控性」方面的覆盖面和精确性
  • 在「可观测性治理」栏目,进行可观测维度的治理,包含 数据源 / 监控 / 告警补齐、治理等
  • 在「可控性治理」栏目:

    • 依据观测数据发现的问题,进行预案配置、issue 治理等
    • 依据混沌工程或演练发现的问题,进行预案配置等
  • 在「运行链路图」「部署架构图」中,通过可视化形式,将曾经配置的监控、告警、预案与组件或链路联合

零碎异样及复原期间,在「运行链路图」中

  • 通过集群运行链路图或告警,感知异样的产生
  • 主动或手动触发问题跟踪
  • 通过集群运行链路图中组件及交互的色彩,感知异样的组件、异样的链路和重大水平
  • 点击集群运行链路图中组件的异样数字,获取关联的异样详情,或跳转到日志、tracing 零碎等进行手动查问
  • 依据异样详情或平台提醒,确定待执行的预案和关联的组件
  • 在集群运行链路图中执行预案 (阻断问题或复原服务)
  • 通过集群运行链路图中组件及交互的色彩,确认预案执行成果
  • 主动或手动完结问题跟踪

问题跟踪过程中记录的次要内容有:

  • issue
  • 异样产生的时刻
  • 异样解决期间执行的动作
  • 运行链路图 snapshot
  • 异样复原的时刻

数据模型及竞争力剖析


数据模型是稳定性保障最佳实际进行迭代、分享和利用的媒介,通用的洞察和预案能够造成标准化的服务,个性化的洞察和预案可通过固定的构造来形容,而后应用通用的控制器来落地。

以数据模型造成 洞察 + 预案 的稳定性保障服务,技术外围为:

  • 洞察模型

    • 关键问题:

      • 如何洞察集群稳定性?
      • 如何洞察业务迭代效率?
  • 数据模型

    • 关键问题:

      • 如何定义无效、可扩大的数据形容?

在技术外围的根底上,能够围绕如下的竞争力进行迭代:

  • 洞察

    • 全局化
    • 数字化
    • 可视化
  • 效率

    • 最短操作门路
    • 最小应用老本
  • 先进性

    • 流程化最佳实际

小结


通过 Spec 标准 7 种数据模型,咱们能够基于结构化的形容来表征洞察 + 预案。以此为外围,一直迭代对稳定性保障的实际和了解,减速业务迭代。再扩大一步,也有可能基于该模型在倒退方向反哺业务。

如果大家感兴趣,欢送在留言区进行交换。

正文完
 0