专栏首页K8S疑难杂症Pod疑难杂症(1):由于云盘吞吐过高导致pod创建超时
原创

Pod疑难杂症(1):由于云盘吞吐过高导致pod创建超时

问题背景

在创建TKE集群的worker node时,用户往往会单独再购买一块云盘,绑到节点上,用于docker目录挂载所用(将docker目录单独放到数据盘上)。此时,docker的读写层(RWLayer)就会落到云盘上。

在该使用场景下,有客户反馈,在创建pod时,会偶现Pod创建超时的报错,具体报错如下:

create container timeout error

问题结论

当单独挂载一块云盘用于docker目录挂载使用时,会出现如下情况:云盘的真实使用超过云盘所支持的最大吞吐,导致pod创建超时。

问题分析

pod失败的异常事件

从报错的事件上来看,可以看到报错是create sandbox时,rpc调用超时了。

在create sandbox时,dockershim 会发起两次dockerd调用,分别是:POST /containers/createPOST /containers/start。而事件上给出的报错,就是POST /containers/create

时的报错。

日志和堆栈分析

开启dockerd的debug模式后,在异常报错时间段内,能够看到有与POST /containers/create相关的日志,但是并没有看到与POST /containers/start相关的日志,说明docker daemon有收到create container的rpc 请求,但是并没有在timeout的时间内,完成请求。可以对应到pod的异常报错事件。

当稳定复现问题(rpc timeout)之后,手动尝试在节点上通过curl命令,向docker daemon请求create containber。

命令如下:

$ curl --unix-socket /var/run/docker.sock "http://1.38/containers/create?name=test01" -v -X POST -H "Content-Type: application/json" -d '{"Image": "nginx:latest"}'

当执行curl命令之后,确实要等很长时间(>2min)才返回。

并抓取dockerd的堆栈信息,发现如下:在问题发生时,有一个delete container动作,长时间卡在了unlinkat系统调用。

unlinkat 系统调用

container的create 和 delete请求都会沉浸到layer store组件,来创建或者删除容器的读写层。

在layer store组件中,维护了一个内部数据结构(layerStore),其中有一个字段mounts map[string]*mountedLayer用于维护所有容器的读写层信息,并且还配置了一个读写锁用于保护该信息(数据mounts的任何增删操作都需要先获取一个读写锁)。如果某个请求(比如container delete)长时间没有返回,就会阻塞其他container的创建或者删除。

layer store

云盘监控

云盘的相关监控可以重点关注以下三个指标:云盘写流量、IO await、IO %util。

解决方案

配合业务场景需求,更换更高性能的云盘。

腾讯云上的云硬盘种类和吞吐指标可以参考文档:https://cloud.tencent.com/document/product/362/2353

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark on K8S 在有赞的实践

    随着近几年业务快速发展与迭代,大数据的成本也水涨船高,如何优化成本,建设低成本高效率的底层服务成为了有赞数据基础平台2020年的主旋律。本文主要介绍了随着云原生...

    有赞coder
  • 快手春节红包背后,高并发存储架构设计

    2020年的春节,想必大家都印象深刻,除了新冠肺炎疫情,就是春晚各大APP的红包大战,让不少用户“薅”到了羊毛。

    腾小云
  • 介绍Kubernetes 1.14的本地持久卷GA和Uber的使用分享

    作者:Michelle Au(谷歌),Matt Schallert(Uber),Celina Ward(Uber)

    CNCF
  • 给你几个硬盘,你能提供什么样的高可靠性存储解决方案?

    “给你几个硬盘,你能提供什么样的高可靠性存储解决方案?” 我们这些计算领域的工程师在面试时,常被问题这个问题。

    王录华
  • 2020-07-23-kubernetes集群使用腾讯云cbs块存储

    title: "2020-07-23-kubernetes集群使用腾讯云cbs块存储"

    对你无可奈何
  • 转发有礼 | 50篇+云原生系列干货文章汇总,请查收!

    云原生技术干货文章合集,来咯~ ? 2020 年,要说咱们技术圈子里什么最火? 云原生肯定是那 NO.1 ? 截止目前,我们不难看出,K8s 容器、服务...

    腾讯云原生
  • 贝壳找房基于Milvus的向量搜索实践(二)

    互联网垂直搜索领域,特别是电商行业,对于特定业务的搜索,热数据的量级一般是可控的(百万级、千万级),一般情况下,对响应时间和整体的吞吐量(QPS)都有比较高的要...

    Zilliz RDS
  • 改善 Kubernetes 上的 JVM 预热问题

    JVM 预热是一个非常头疼而又难解决的问题。本文讨论了在运行在 Kubernetes 集群中的 Java 服务如何解决 JVM 预热问题的一些方法和经验。

    码农架构
  • 在大规模 Kubernetes 集群上实现高 SLO 的方法

    导读:随着 Kubernetes 集群规模和复杂性的增加,集群越来越难以保证高效率、低延迟的交付 pod。本文将分享蚂蚁金服在设计 SLO 架构和实现高 SLO...

    CNCF
  • Kubernetes监控实践(1):K8s的工作原理与监控实践

    Kubernetes(K8s)是一个开源平台,能够有效简化应用管理、应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用。

    宜信技术学院
  • 腾讯云容器网络 vpc 对比 vxlan 性能测试

    为了弄清楚这两种网络方案下, 容器网络的性能情况,笔者设计并执行了一个简单的对比测试, 对比了吞吐量和时延。

    真的志国
  • vivo AI 计算平台的K8s填坑指南

    在 2018 年底,vivo AI 研究院为了解决统一的高性能训练环境、大规模的分布式训练、计算资源的高效利用调度等痛点,着手建设 AI 计算平台。白驹过隙,将...

    深度学习与Python
  • 干货 | 10W+ K8s容器数量下,携程如何打造统一弹性调度体系

    本文作者为携程Cloud Container团队的鸿飞,静雪,诗燕。该团队负责K8s容器平台的研发和优化工作,专注于推动基础设施云原生架构升级,以及创新产品的研...

    携程技术
  • scheduler-设计与实现

    调度器的核心目标是: 将 workload bind 到 resource【workload --bind--> resource】,结合各类信息,将这一目标做...

    王磊-AI基础
  • 容器视角下的网络性能监控

    关于企业上云,在几年前大家谈论更多的是OpenStack、资源编排和分配,但近几年上云的应用部署方式发生了很多变化。首先从谷歌搜索的趋势可以发现Kubernet...

    SDNLAB
  • 使用 OpenEBS 实现 Local PV 动态持久化存储

    问卷链接(https://www.wjx.cn/jq/97146486.aspx)

    CNCF
  • 云网一体化数据中心网络关键技术

    中共中央政治局常务委员会在2020 年3 月4 日召开会议,明确指出,加快5G 网络、数据中心(datacenter,DC)等新型基础设施建设进度(以下简称“新...

    灯塔大数据
  • 解读 TiDB:行走在 GKE 上的 NewSQL 开源数据库

    数字化时代下,企业的发展与数据库的建设息息相关。如果搭建云下数据库,不仅要通过大量的运维投入保证数据库稳定运行,随着企业规模与数据量的发展,还要应对数据库扩容、...

    深度学习与Python
  • Fluid + GooseFS 助力云原生数据编排与加速快速落地

    谢远东,腾讯高级工程师,云原生机器学习社区 Kubeflow Member、 云原生数据编排与加速框架 Fluid(CNCF Sandbox) 核心开发者、Is...

    CNCF

扫码关注云+社区

领取腾讯云代金券