Kubernetes 稳定性保障手册(极简版)

作者 | 悟鹏

来源 | 阿里巴巴云原生

头图 | 下载于视觉中国

Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保障的挑战越来越大。

对于基于 Kubernetes 的云产品,稳定性保障已成为基本诉求,稳定性缺陷会给产品带来巨大的损失,如用户流失、用户信心下降、产品迭代速度变慢等。

虽然基于 Kubernetes 的稳定性保障很重要,但业界缺少基于实践的标准化稳定性保障方案,导致同样的问题在同一产品或不同的产品中重复出现,最佳实践不能应用在更多相同技术栈的产品中,不同产品形成的稳定性保障最佳实践也不能互补。

为此,基于过去的开发实践以及基于 Kubernetes 的稳定性保障经验,尝试形成《Kuberentes 稳定性保障手册》,将稳定性保障最佳实践进行沉淀,使得人人对 Kubenretes 稳定性保障的理论形成全面的理解,相应的工具和服务成为基础设施,复用在类似技术栈的产品中,加速稳定性保障最佳实践的传播、迭代和应用。

本篇文章作为《Kubernetes 稳定性保障手册》第一篇文章,以抽象稳定性保障中的核心内容,作为稳定性保障最简使用手册。

极简手册目标

  • 1min 理解稳定性保障目标

  • 3min 把握稳定性保障全局视图

  • 一站查找稳定性保障推荐工具或服务

稳定性保障目标

  • 满足服务或产品对稳定性的诉求

  • 加速服务或产品的迭代

稳定性保障检查项

维度

检查项

可观测

  1. 是否提供了 Prometheus metrics API?

  2. 是否将日志进行了持久化?

  3. 是否配置了监控?

    1. 是否有对跌零因子的监控?

    2. 是否有服务降级的监控?

    3. 是否有限流的监控?

    4. 是否配置了对关键依赖方的可用性监控?

    5. 监控是否分级?

  1. 是否配置了告警?

    1. 是否有对跌零因子的告警?

    2. 是否有服务降级的告警?

    3. 是否有限流的告警?

    4. 是否配置了对关键依赖方的可用性告警?

    5. 告警是否分级?

  1. 是否配置了巡检?

  2. 是否使用了 structured log 便于进行 log 的查询、分析?

  3. 服务自身及服务间交互,是否有唯一识别身份

可灰度

  1. 是否使用了具有灰度能力的 workload?

  2. 是否具有业务维度的灰度能力?

  3. feature 是否具有灰度能力?

  4. feature 是否具有可控灰度 (按百分比或指定群体) 能力?

可回滚

  1. 是否使用了均有回滚能力的 workload?

  2. 组件是否进行了版本控制?

  3. 配置是否进行了版本控制?

可保护

  1. 是否有限流措施?

  2. 是否有降级措施?

  3. 是否配置了探针?

    1. 是否配置了 livenessProbe?

    2. 可被访问时,是否配置了 readinessProbe?

    3. 初始化耗时时,是否配置了 startupProbe?

  1. 是否有快速失败的能力?

    1. 是否有超时结束能力?

  1. 依赖方不可用时:

    1. 是否会持续对依赖方带来日常或更高压力?

    2. 是否会对上游带来反向压力?(如连接数、处理延时)

  1. 己方不可用时:

    1. 对上游的影响是否可控?

    2. 恢复时是否可以控制请求压力?

  1. 是否可以无损重建?

  2. 是否多副本部署?

  3. 是否需要配置 PodDisruptionBudget?

  4. 是否配置了非亲和性?

  5. 是否跨 AZ 部署?

  6. 是否有处理预案

  7. 是否均有访问管理?

  8. 服务是否稳定性运行,是否会影响数据资产?

  9. 服务是否稳定性运行,是否会泄露敏感信息?

  10. 是否区分组件处于关键链路还是旁路?

  11. 是否有「爆炸半径」的整理?

  12. 是否有「跌零因子」的整理?

  13. 是否具有功能开关,便于一键开启、关闭指定功能?

可控成本

  1. 是否配置了 limit resources?

  2. request resources 是否表征了平均使用资源量?

  3. 变更是增加还是降低用户成本?

  4. 变更是增加还是降低平台成本?

易于运维

  1. 是否可以做到变更配置时无需重建实例?

  2. 是否有白屏化运维途径?

  3. 是否有「端到端管控链路」流程图?

  4. 是否有「端到端数据链路」流程图?

  5. 是否有链路重要程度分析?

  6. 是否有爆炸半径、跌零因子分析?

  7. 是否枚举总结了交付的能力?

  8. 是否枚举总结了依赖的能力?

  9. 是否枚举了组件、依赖方团队和接口人?

稳定性保障级别

级别

标准

L0

  • 可观测、可灰度、可回滚 均不满足

L1

  • 可观测、可灰度、可回滚 满足 50% 以上要求

L2

  • 可观测、可灰度、可回滚 满足 90% 以上要求

L3

  • 可观测、可灰度、可回滚 满足 90% 以上要求

  • 可保护、可控成本 满足 50% 以上要求

L4

  • 可观测、可灰度、可回滚、可保护、可控成本 满足 90% 以上要求

  • 易于运维满足 50% 以上要求

L5

  • 可观测、可灰度、可回滚、可保护、可控成本、易于运维 满足 90% 以上要求

实践

1. 方法论

1)全局视图

实践流程:

  1. 整理运行链路图,标记链路是否是关键链路

  2. 基于运行链路图,进行可观测性配置

  3. 基于链路重要程度,进行可控性治理

为了降低实践的成本,需要把握云产品中的元素及交互关系,从基础的元素和交互方面解构复杂系统:

  • 元素 (2 类)

    • 云产品组件

    • 云产品

  • 交互 (2 类,共 3 种场景)

    • 云产品内部

      • 组件自身

      • 组件与组件之间

    • 云产品之间

      • 云产品与云产品之间

如下图:

随着元素数量和交互关系的增多,系统会逐步变得复杂,稳定性保障面临的挑战也会越来越大,要避免引入非必要的复杂性。

因此,需要先梳理清楚当前的运行链路图,进行链路重要性分析,并整理组件大图,判断组件的爆炸半径。在此基础上,还需要进行参与人员的 review,避免在人员的投入方面存在单点风险。

运行链路图示例:

链路重要性示例:

云产品间交互示例:

基于上述对系统复杂度、运行链路的分析,面对稳定性保障的问题域,可以有效提出、落地解决方案。

2)问题处理

实践流程:

  1. 长期维护角色列表、功能流程图、运行链路图

  2. 在多个分级的「告警群」中感知问题的发生和恢复

  3. 在唯一的「问题处理群」中处理问题和复盘问题

对于复杂的系统,通常会有如下的角色关系:

梳理清楚每层的角色,并使得参与同学可以方便查找目标同学,会缩短问题处理时间。

2. 问题域

1)概述

2)推荐

维度

项目

推荐

目标管理

业务 SLA

业务相关,可参考:

  • 阿里云 ECS SLA: link

  • 阿里云 SLB SLA: link

技术 SLI / SLO

K8s 社区:

  • Kubernetes scalability and performance SLIs/SLOs: link

可观测性

日志

开发阶段:

  • 使用 structured logging (KEP)

  • golang 开发者可以使用:https://github.com/kubernetes/klog

  • 使用方法可参见:Structured Logging migration instructions

运行阶段:

  • 采集、查询、分析、告警配置,可使用阿里云 SLS 产品:产品官网

Metrics

开发阶段:

  • 使用 Prometheus 标准,对外提供 http metrics API

  • metrics API 编写可参考:Instrumenting A Go Application For Prometheus

  • metric 名称最佳实践:

    • 第一部分要起到 namespace 的作用

    • 最后一部分起到表征单位的作用

运行阶段:

  • 采集、可视化、告警配置,可使用阿里云 ARMS Prometheus 产品:产品官网

巡检

后续推出

告警

基于日志、metrics、巡检系统配置告警,配置每条告警时,可通过如下问题列表达到举一反三效果:

  • 告警是否是集群级别?

  • 告警是否是组件级别?

  • 异常信息源是什么?

  • 精确异常特征是什么?

  • 模糊异常特征是什么?

  • 异常爆炸半径多大?

  • 告警级别是什么?

  • 该告警已覆盖的范围 (集群/组件) 多大?

可控性

发布管理

后续推出

恢复管理

实践:

  1. 枚举异常场景

  2. 线下模拟异常

  3. 通过预案固化处理方案

挑战:

  • 灾备链路

    • 神龙安全容器

    • VK+ECI

  • 集群逃生

    • 单集群多套管控链路

    • 单 region 多套集群 (联邦或主备模式)

    • 跨 region 多套集群 (联邦或主备模式)

混沌工程

实践:

  • 可控故障演练

    • 应用在导致跌零因子和有巨大爆炸半径的场景

  • 随机故障演练

定期体检

实践:

  • 系统在不断演进,需要定期从业务视角进行审视

专项治理

复杂度治理

梳理:

  • 业务流程图

  • 运行链路图

  • 链路重要性图

  • 组件列表

  • 依赖关系图

如非必要,勿增实体。

爆炸半径治理

实践:

  1. 基于运行链路图和链路重要性图,整理链路和组件的爆炸半径

  2. 进行链路和组建的可观测性和可控性治理

关注:

  • 异常是否会随着时间变长,导致影响规模扩大

跌零因子治理

实践:

  1. 爆炸半径的极端情况

  2. 最高优先级进行可观测性和可控性治理

  3. 线下演练

后续

对于《Kubernetes 稳定性保障手册》,接下来会进行如下的章节细化,分别从方法论和工具/服务的角度进行总结,形成初版后与大家分享,敬请期待~

更多阅读推荐

  • 无法恢复,欧洲云服务巨头数据中心起火

  • CPU 空闲时在干嘛?

  • 低代码,让人人都可以是开发者

  • 三探云原生全景图,这次聊聊运行时层

  • 一眼看尽5G江湖,Gartner发布5G网络基础设施魔力象限报告

  • 冯诺依曼架构的 IO 鸿沟,谁能来填补?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云~Docker安装Nginx

文章目录一、入门试炼1. 创建挂载目录2. 赋予目录权限3. 临时容器4. 拷贝文件5. 删除临时容器6. 自定义配置启动7. 安全策略组二、 企业内部使用2.1. nacos 集群2.2. 多个域名公用80端口是实现反向代理和负载均衡一、入门试炼 1. 创建挂载目录 mkdir /app/nginx/conf/ /app/n…

开放、普惠、高性能-SLS时序存储助力打造企业级全方位监控方案

无所不在的时序数据 时间带走一切,长年累月会把你的名字、外貌、性格、命运都改变。 ---柏拉图 随着时间的推移,万事万物都在不停的变化,而我们也会用各种数字去衡量这些变化信息,比如年龄、重量、速度、温度、金钱...在数字化时代…

一招上手!这样设计扛住亿级流量活动系统

作者 | 刘艳杰责编 | 伍杏玲出品 | CSDN云计算(CSDNcloud)在企业里,做活动是一种十分常见的需求,有面向C端用户开展的活动,也有面向公司内部员工的活动。随着互联网技术的不断发展和疫情等方面的原因,线上开展的活动也…

域名解析到服务器

这本章主要讲购买的域名和服务器怎样进行域名解析。简单来说就是别人访问你的网站只需要在浏览器上输入你购买的域名,就可以访问你搭建的网站。 文章目录1. 解析2. 设置记录类型3. 绑定公网ip1. 解析 2. 设置记录类型 选择A类型 3. 绑定公网ip 效果图 备案 http…

基因行业容器存储解决方案

1、基因行业背景 1.1. 中国基因市场分析 基因组学是未来精准医疗的“基石”。70%的基因企业选择使用云计算来处理基因组相关业务。过去一年内,阿里云为基因医学影像数据提供了安全可靠的存储,500%数据增长,增长迅猛。强大无限制的计算能力&…

位置转经纬度~此key未开启WebserviceAPI服务功能

文章目录1. 现象2. 腾讯位置服务3. 登录开发者平台4. 开启WebserviceAPI5. 测试地址转经纬度api1. 现象 此key未开启WebserviceAPI服务功能,您可登陆https://lbs.qq.com/进行控制台key管理页面,找到此key并设置启用webserviceAPI 2. 腾讯位置服务 ht…

程序员今年在相亲市场上这么受欢迎?

前段时间有一个很火的网络段子:杭州的工程师在某婚恋交友网注册了一个账号,经过一个多月的“无人无津”后,他在公司职位栏加上了“JAVA开发工程师”短短几天就收到238封交友私信,最后还因为私信太多回复不了,他选择暂时…

云原生时代,谁是容器的最终归宿?

前言 “云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化…

腾讯云~安装MongoDB

文章目录一、 安装建议二、 安装步骤2.1. 下载2.2. 解压缩2.3. 重命名2.4. 配置环境变量2.5. 使其生效2.6. 配置MongoDB2.7. 启动MongoDB2.8. 网络安全组一、 安装建议 MongoDB 可以在mac/win/linux上安装,我个人建议在linux上安装会更好,这样测试起来更…

全部满分!阿里云函数计算通过可信云21项测试

今日,“2020 可信云线上峰会”正式召开。会上,中国信通院公布了混合云安全、云组网、函数即服务、消息队列、云计算安全运营中心等首次评估结果。阿里云函数计算通过了基础能力要求、平台可观测能力、服务性能、服务安全和服务计量准确性等 21 项测试&am…

Springboot集成Elasticsearch

在springboot中集成Elasticsearch&#xff0c;以我开发的博客系统项目为例,这是一篇文章内容。 准备 本次Elasticsearch使用的是单机版&#xff0c;版本为6.7.8&#xff0c;并且装好中文分词器。 Springboot集成Elasticsearch 首先在pom文件中引入Elasticsearch依赖。 <!-…

CentOS 替代品

我推荐替代产品&#xff1a;AlmaLinux 免费&#xff0c;和centos相似度都比较高&#xff0c;社区活跃度高 官网&#xff1a;https://almalinux.org/

卡顿人生,如何拯救?

原文链接&#xff1a;https://yqh.aliyun.com/detail/17536?utm_contentg_1000161682 本文为阿里云原创内容&#xff0c;未经允许不得转载。

三个月前被 K8S 弃用,Docker 火了!获 2300 万美元融资

整理 | 寇雪芹头图 | 下载于视觉中国出品 | CSDN云计算&#xff08;ID:CSDNcloud)美国加州时间 3月16号&#xff0c;Docker 宣布获得 2300 万美元的 B 轮融资。经过此轮融资&#xff0c;Docker的总资金达到5800万美元&#xff0c;主导本轮投资的是硅谷风投公司 Tribe Capital&a…

阿里腾讯今日头条纷纷翻牌子,ClickHouse到底有什么本事?

ClickHouse是近年来备受关注的开源列式数据库&#xff0c;主要用于数据分析&#xff08;OLAP&#xff09;领域。目前国内社区火热&#xff0c;各个大厂纷纷跟进大规模使用&#xff1a; 今日头条 内部用ClickHouse来做用户行为分析&#xff0c;内部一共几千个ClickHouse节点&am…

开启VScode的nvue、vue文件类型支持 - 代码高亮

装Vetur创建&#xff0c;配置&#xff0c;ok 注意&#xff1a;后面的值都是vue 效果图

Dubbo-go 发布 1.5 版,朝云原生迈出关键一步

引语 计算机技术浪潮每 10 年都有一次技术颠覆&#xff0c;相关知识体系最迟每 5 年都会革新一次&#xff0c;大概每两年贬值一半&#xff0c;在应用服务通信框架领域亦然。凡是有长期生命的通信框架&#xff0c;大概有 5 年的成长期和 5 年的稳定成熟期。每个时代都有其匹配的…

互联网究竟是怎么诞生的?

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;1957年10月4日&#xff0c;苏联发射了人类第一颗人造卫星——斯普特尼克一号。斯普特尼克一号&#xff08;Спутник-1&#xff09;这颗卫星的升空&#xff0c;轰动了整个世界&#xff0c;也…

引入阿里云GA,商米加速IoT产品和解决方案全球化布局

在全球化战略布局下&#xff0c;今年以来&#xff0c;商米联合全球合作伙伴推出了多款智能IoT 产品和数字化解决方案&#xff0c;为商户提供更专业地服务。同时&#xff0c;今年6月份&#xff0c;商米还引入阿里全球加速GA&#xff0c;加速实现信息化办公系统全球部署&#xff…

企业方案 vscode

文章目录1. 下载插件2. 配置1. 下载插件 2. 配置 {"mithrilEmmet.vnodeFactoryFunctionName": "m", // Specifies the name of vnode factory function. E.g. for mithril, use m; for hyperscript, use h."mithrilEmmet.outputDefaultTagName"…