详情页标题前

腾讯云容器服务节点磁盘爆满排障处理同尘科技

详情页1

文档介绍 TKE 集群中多场景下可能发生的磁盘爆满问题,并给出对应的排查思路及解决方案,请按照下文中的步骤进行排查并解决。

可能原因

kubelet 支持 gc 和驱逐机制,可通过 --image-gc-high-threshold--image-gc-low-threshold--eviction-hard--eviction-soft--eviction-minimum-reclaim 等参数进行控制以实现磁盘空间的释放。当配置不正确,或者节点上有其它非 K8S 管理的进程在不断写数据到磁盘,将会占用大量空间时将导致磁盘爆满。磁盘爆满将影响 K8S 运行,主要涉及 kubelet 和容器运行时两个关键组件。请按照以下步骤进行分析:1. 执行 df 命令,查看 kubelet 和容器运行时所使用的目录是否存在于该磁盘。2. 对应实际结果,选择以下方式进行问题精确定位:容器运行时使用的目录所在磁盘爆满Kubelet 使用的目录所在磁盘爆满

问题定位及解决思路

容器运行时使用的目录所在磁盘爆满

如果容器运行时使用的目录所在磁盘空间爆满,将可能会造成容器运行时无响应。例如,当前容器运行时为 docker,则执行 docker 相关的命令将会一直 hang 住,kubelet 日志也将看到 PLEG unhealthy,而 CRI 调用 timeout 也将导致容器无法创建或销毁,外在现象通常表现为 Pod 一直 ContainerCreating 或一直 Terminating。

docker 默认使用的目录

/var/run/docker:用于存储容器运行状态,通过 dockerd 的 --exec-root 参数指定。/var/lib/docker:用于持久化容器相关的数据。例如,容器镜像、容器可写层数据、容器标准日志输出及通过 docker 创建的 volume 等。

Pod 启动过程事件

Pod 在启动过程中,可能会出现以下类似事件:

Warning  FailedCreatePodSandBox 53m kubelet, 172.22.0.44  Failed create pod sandbox: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Warning  FailedCreatePodSandBox  2m (x4307 over 16h)  kubelet, 10.179.80.31  (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "apigateway-6dc48bf8b6-l8xrw": Error response from daemon: mkdir  /var/lib/docker/aufs/mnt/1f09d6c1c9f24e8daaea5bf33a4230de7dbc758e3b22785e8ee21e3e3d921214-init: no space left on device
Warning  Failed   5m1s (x3397 over 17h)  kubelet, ip-10-0-151-35.us-west-2.compute.internal  (combined from similar events): Error: container create failed: container_linux.go:336: starting container process caused "process_linux.go:399: container init caused \"rootfs_linux.go:58: mounting \\\"/sys\\\" to rootfs \\\"/var/lib/dockerd/storage/overlay/051e985771cc69f3f699895a1dada9ef6483e912b46a99e004af7bb4852183eb/merged\\\" at \\\"/var/lib/dockerd/storage/overlay/051e985771cc69f3f699895a1dada9ef6483e912b46a99e004af7bb4852183eb/merged/sys\\\" caused \\\"no space left on device\\\"\""

Pod 删除过程事件

Pod 在删除过程中,可能会出现以下类似事件:

Normal  Killing  39s (x735 over 15h)  kubelet, 10.179.80.31  Killing container with id docker://apigateway:Need to kill Pod

Kubelet 使用的目录所在磁盘爆满

kubelet 默认使用的目录

/var/lib/kubelet:通过 kubelet 的 --root-dir 参数指定,用于存储插件信息、Pod 相关的状态以及挂载的 volume(例如,emptyDirConfigMapSecret)。

Pod 事件

Kubelet 使用的目录所在磁盘空间爆满(通常是系统盘),新建 Pod 时无法成功进行 mkdir,导致 Sandbox 也无法创建成功,Pod 通常会出现以下类似事件:

  Warning  UnexpectedAdmissionError  44m kubelet, 172.22.0.44  Update plugin resources failed due to failed to write checkpoint file "kubelet_internal_checkpoint": write /var/lib/kubelet/device-plugins/.728425055: no space left on device, which is unexpected.

处理步骤

当容器运行时为 docker 时发生磁盘爆满问题,dockerd 也会因此无法正常响应,在停止时会卡住,从而导致无法直接重启 dockerd 来释放空间。需要先手动清理部分文件腾出空间以确保 dockerd 能够停止并重启。恢复步骤如下:1. 手动删除 docker 的部分 log 文件或可写层文件。通常删除 log 文件,示例如下:

$ cd /var/lib/docker/containers$ du -sh * # 找到比较大的目录$ cd dda02c9a7491fa797ab730c1568ba06cba74cecd4e4a82e9d90d00fa11de743c$ cat /dev/null > dda02c9a7491fa797ab730c1568ba06cba74cecd4e4a82e9d90d00fa11de743c-json.log.9 # 删除log文件

注意删除文件时,建议使用 cat /dev/null > 方式进行删除,不建议使用 rm。使用 rm 方式删除的文件,不能够被 docker 进程释放掉,该文件所占用的空间也就不会被释放。log 的后缀数字越大表示时间越久远,建议优先删除旧日志。2. 执行以下命令,将该 Node 标记为不可调度,并将其已有的 Pod 驱逐到其它节点。

kubectl drain 

该步骤可以确保 dockerd 重启时将原节点上 Pod 对应的容器删掉,同时确保容器相关的日志(标准输出)与容器内产生的数据文件(未挂载 volume 及可写层)也会被清理。3. 执行以下命令,重启 dockerd。

systemctl restart dockerd# or systemctl restart docker

4. 等待 dockerd 重启恢复,Pod 调度到其它节点后,排查磁盘爆满原因并进行数据清理和规避操作。5. 执行以下命令,取消节点不可调度标记。

kubectl uncordon 

如何规避磁盘爆满?

需确保 kubelet 的 gc 和驱逐相关参数进行配置正确。若配置无问题,即便磁盘达到爆满地步,此时事发节点上的 Pod 也已自动驱逐到其它节点上,不会出现 Pod 一直 ContainerCreating 或 Terminating 的问题。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148800.html

(0)
上一篇 2023年12月9日 下午1:01
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云轻量应用服务器使用标准方式(WebRDP)登录 Windows 实例云小二

    操作场景 本文介绍如何使用标准登录方式(WebRDP)登录 Windows 实例。说明该方式不区分本地机器操作系统,支持通过控制台直接登录 Windows 实例。 前提条件 已获取远程登录 Windows 实例需要使用实例的管理员账号和对应的密码。如已设置登录密码,则请使用该密码登录。如忘记密码,则请 重置实例密码。如在创建实例时选择系统随机生成密码,则请往…

    2023年12月9日
  • 腾讯云容器服务注册 GlobalRouter 模式集群到云联网同尘科技

    云联网说明 云联网(Cloud Connect Network,CCN)为您提供云上私有网络间(Virtual Private Cloud,VPC)、VPC 与本地数据中心间互联的服务。您可以将 VPC 和专线网关实例加入云联网,以实现单点接入、全网资源互通,轻松构建简单、智能、安全、灵活的混合云及全球互联网络。 操作场景 您可以将已有容器集群注册到云联网…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务原生节点提升集群装箱率同尘科技

    操作场景 原生节点专用调度器 可以有效解决集群中装箱率高但利用率低的问题。通过使用原生节点专用调度器的节点放大能力,可以提高节点的装箱率,从而提升整体资源利用率,而无需对业务进行任何修改或重启操作。然而,放大系数的配置应该如何确定?相应的水位线又应该如何搭配使用,以确保节点放大后的稳定性?这些问题直接关系到功能的稳定性和有效性。此外,放大能力带来的收益和风…

    2023年12月9日
  • 腾讯云Serverless应用中心部署互动直播房间服务-同尘科技

    应用介绍 互动直播房间服务是一套业务房间后台服务,可以实现房间列表、房间成员列表、房间用户状态同步等功能。通过 Serverless 方式进行快速部署,配合实时音视频 TRTC、直播、IM 等音视频能力,可以快速搭建社交泛娱乐行业各种场景。 使用场景 腾讯云在 秀场直播/电商直播 提供端云一体的低代码解决方案,通过云函数模板 LiveRoom 创建业务后台、…

    2023年12月9日
  • 阿里云大数据开发治理平台 DataWorks注册API-云淘科技

    您可以注册已有的API至数据服务,进行统一管理、发布和对接。本文为您介绍如何注册API并对其进行配置。 注册API 如果您没有API,则需要使用生成API功能。详情请参见通过向导模式生成API 在服务开发页面,鼠标悬停至图标,单击注册API。您也可以打开相应的业务流程,右键单击API,选择新建 > 注册API。 在注册API对话框中,配置各项参数。 参…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。