深度复盘-重启 etcd 引发的异常

这篇具有很好参考价值的文章主要介绍了深度复盘-重启 etcd 引发的异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者信息:

唐聪、王超凡,腾讯云原生产品中心技术专家,负责腾讯云大规模 TKE 集群和 etcd 控制面稳定性、性能和成本优化工作。

王子勇,腾讯云专家级工程师, 腾讯云计算产品技术服务专家团队负责人。

概况

作为当前中国广泛使用的云视频会议产品,腾讯会议已服务超过 3 亿用户,能高并发支撑千万级用户同时开会。腾讯会议数百万核心服务都部署在腾讯云 TKE 上,通过全球多地域多集群部署实现高可用容灾。在去年用户使用最高峰期间,为了支撑更大规模的并发在线会议的人数,腾讯会议与 TKE 等各团队进行了一轮新的扩容。

然而,在这过程中,一个简单的 etcd 进程重启操作却触发了一个的诡异的 K8s 故障(不影响用户开会,影响新一轮后台扩容效率),本文介绍了我们是如何从问题现象、到问题分析、大胆猜测排除、再次复现、严谨验证、根治隐患的,从 Kubernetes 到 etcd 底层原理,从 TCP RFC 草案再到内核 TCP/IP 协议栈实现,一步步定位并解决问题的详细流程(最终定位到是特殊场景触发了内核 Bug)。

希望通过本文,让大家对 etcd、Kubernetes 和内核的复杂问题定位有一个较为深入的了解,掌握相关方法论,同时也能让大家更好的了解和使用好 TKE,通过分享我们的故障处理过程,提升我们的透明度。

背景知识

首先给大家简要介绍下腾讯会议的简要架构图和其使用的核心产品 TKE Serverless 架构图。

腾讯会议极简架构图如下:

k8s的etcd内存占用过高,K8S,Prometheus,Istio,Serverless,containerd,Etcd,Pod,TKE,云原生,腾讯云原生,边缘,集群,最佳实践,kubernetes,云计算,docker,容器,经验分享

腾讯会议重度使用的 TKE Serverless 架构如下:

k8s的etcd内存占用过高,K8S,Prometheus,Istio,Serverless,containerd,Etcd,Pod,TKE,云原生,腾讯云原生,边缘,集群,最佳实践,kubernetes,云计算,docker,容器,经验分享

腾讯会议几乎全部业务都跑在 TKE Serverless 产品上,Master 组件部署在我们metacluster 中(K8s in K8s),超大集群可能有10多个 APIServer,etcd 由服务化的 etcd 平台提供,APIServer 访问 etcd 链路为 svc -> cluster-ip -> etcd endpoint。业务各个 Pod 独占一个轻量级的虚拟机,安全性、隔离性高,业务无需关心任何 Kubernetes Master、Node 问题,只需要专注业务领域的开发即可。

问题现象

在一次资源扩容的过程中,腾讯会议的研发同学晚上突然在群里反馈他们上海一个最大集群出现了业务扩容失败,收到反馈后研发同学,第一时间查看后,还看到了如下异常:

● 部分 Pod 无法创建、销毁

● 某类资源 Get、list 都是超时

● 个别组件出现了 Leader Election 错误

● 大部分组件正常,少部分控制器组件有如下 list pvc 资源超时日志

k8s.io/client-go/informers/factory.go:134: Failed to watch 
*v1.PersistentVolumeClaim: failed to list 
*v1.PersistentVolumeClaim: the server was unable to return a 
response in the time allotted, but may still be processing the 
request (get persistentvolumeclaims)

然而 APIServer 负载并不高,当时一线研发同学快速给出了一个控制面出现未知异常的结论。随后 TKE 团队快速进入攻艰模式,开始深入分析故障原因。

问题分析

研发团队首先查看了此集群相关变更记录,发现此集群在几个小时之前,进行了重启 etcd 操作。变更原因是此集群规模很大,在之前的多次扩容后,db size 使用率已经接近 80%,为了避免 etcd db 在业务新一轮扩容过程中被写满,因此系统进行了一个经过审批流程后的,一个常规的调大 etcd db quota 操作,并且变更后系统自检 etcd 核心指标正常。

我们首先分析了 etcd 的接口延时、带宽、watch 监控等指标,如下图所示, etcd P99 延时毛刺也就 500ms,节点带宽最大的是平均 100MB/s 左右,初步看并未发现任何异常。

k8s的etcd内存占用过高,K8S,Prometheus,Istio,Serverless,containerd,Etcd,Pod,TKE,云原生,腾讯云原生,边缘,集群,最佳实践,kubernetes,云计算,docker,容器,经验分享

随后又回到 APIServer,一个在请求在 APIServer 内部经历的各个核心阶段(如下图所示):

k8s的etcd内存占用过高,K8S,Prometheus,Istio,Serverless,containerd,Etcd,Pod,TKE,云原生,腾讯云原生,边缘,集群,最佳实践,kubernetes,云计算,docker,容器,经验分享

● 鉴权 (校验用户 token、证书是否正确)

● 审计

● 授权 (检查是否用户是否有权限访问对应资源)

● 限速模块 (1.20 后是优先级及公平管理)

● mutating webhook

● validating webhook

● storage/cache

● storage/etcd

请求在发往 APIServer 前,client 可能导致请求慢的原因: ● client-go 限速,client-go 默认 qps 文章来源地址https://www.toymoban.com/news/detail-788202.html

到了这里,关于深度复盘-重启 etcd 引发的异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s之etcd

            etcd 是云原生架构中重要的基础组件。有如下特点: 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单 键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中 监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应 安

    2024年04月24日
    浏览(32)
  • k8s etcd 简介

    Etcd是CoreOS基于Raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。 如,Etcd也可以作为微服务的注册中心,比如SpringCloud也基于ETCD实现了注册中心功能,可以替代earka,具体参考:Spring Cloud Etcd 在分布式系统中,如何

    2024年02月10日
    浏览(56)
  • k8s中部署etcd集群

            Etcd是一个高可用的 、 开源的、分布式的Key/value存储系统 , 提供共享配置、服务的注册和发现、数据TTL失效、数据改变监视、多值、目录监听、分布式原子锁操作等功能 。 通常,k8s使用etcd进行数据存储,本文将部署etcd集群用做应用的存储。 一、前提         部

    2024年02月08日
    浏览(48)
  • 【K8S系列】深入解析etcd

    时间永远是旁观者,所有的过程和结果,都需要我们自己去承担。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下etcd。 希

    2023年04月17日
    浏览(44)
  • 【云原生K8s】二进制部署单master K8s+etcd集群

                                                    mater节点 master01 192.168.190.10 kube-apiserver kube-controller-manager kube-scheduler etcd                                                 node节点 node01 192.168.190.20 kubelet kube-proxy docker (容器引擎) node02 192.168.190.30 kubelet kube-proxy do

    2024年02月14日
    浏览(57)
  • K8S:二进制安装K8S(单台master)安装etcd和master

    ` 注意:该操作在所有node节点上进行,为k8s集群提供适合的初始化部署环境 主从时间要更新一致 master节点时间 node1节点时间 node2节点时间 ①etcd简介 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作

    2024年02月11日
    浏览(44)
  • k8s的etcd启动报错

    电脑休眠状态意外断电导致虚拟机直接进入关机状态。 kubectl命令报错 kubelet服务报错 6443端口无任何程序监听,判断可能是etcd出现了故障 master节点上的容器 镜像都存在 ps -a看到退出的容器 etcd容器报错 是由于恢复快照数据失败。查看其他两个节点是否也有同样报错。 幸运的

    2024年02月01日
    浏览(36)
  • K8S核心组件etcd详解(上)

    https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据,并使用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布式系统中,用于存储配置信息、

    2024年02月12日
    浏览(41)
  • K8S核心组件etcd详解(下)

    1 k8s如何使用etcd 在k8s中所有对象的manifest都需要保存到某个地方,这样他们的manifest在api server重启和失败的时候才不会丢失。 只有api server能访问etcd,其它组件只能间接访问etcd的好处是 增强乐观锁系统及验证系统的健壮性 方便后续存储的替换,只需修改api server组件的相关接

    2024年02月12日
    浏览(37)
  • 在k8s中,etcd有什么作用?

    在Kubernetes(K8s)中,etcd 是一个关键的组件,它扮演着集群状态存储的角色,具有以下作用: 分布式键值存储:etcd 是一个分布式键值存储系统,用于存储整个 Kubernetes 集群的配置信息、状态信息以及元数据。这包括了集群的配置、节点信息、Pod 和服务的状态、配置文件、网

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包