首页 > 其他分享 >记录k8s驱逐告警过程

记录k8s驱逐告警过程

时间:2024-09-18 10:52:34浏览次数:15  
标签:扩容 驱逐 云盘 分区 文件系统 dev 告警 k8s

1.故障背景

记录k8s驱逐告警过程_裸设备

  上述图片是我司阿里云K8S环境的事件告警。

  • FreeDiskSpaceFailed 磁盘空间不足。(实际剩下还有百分之20可用)

 

2.故障原因

前提环境:由于历史遗留问题,整个线上k8s环境的node所有机器磁盘仅有60G,这在生产上是明显不符合环境使用规范的,线上磁盘空间规划极小;且由于该机器操作更新较多,镜像下载频繁,所以磁盘很快就到告警阈值。

 

3.故障处理

1.磁盘告警处理

由于第一天仅有一个告警FreeDiskSpaceFailed 显示磁盘不足,面临周五下班,根据多年来的运维经验,周五左右不做扩容缩容等操作(非紧急情况下),决定去修改阿里云ack 节点池的kubelet操作,把告警阈值临时调整至90。

记录k8s驱逐告警过程_裸设备_02

记录k8s驱逐告警过程_Pod_03

以上操作后,故障消失。

 

4.故障升级

  周六凌晨夜间4点左右,收到除白天磁盘空间不足外,还多出2个告警,见下图:

记录k8s驱逐告警过程_文件系统_04

  告警显示某些容器的探针失败了,并且表明Kubernetes集群中有一个或多个节点存在不可容忍的污点(Taint)。污点是节点的一个属性,用来阻止一些Pod被调度到这个节点上。当Pod没有对应的容忍度(tolerations)来处理污点时,它就不会被调度到这些节点上。

  上述一共3个事件告警,(实际只有一个),另外2个告警是因为第一个磁盘不足事件而衍生出来的告警,根据排错思路一步一步进行拆解。

 

5.故障原因

  重新开工单联系阿里云售后,售后小哥告知周五调整的阈值是错误的,仔细翻看官网文档后,确实周五调整的是镜像垃圾回收的阈值。

记录k8s驱逐告警过程_裸设备_05

  实际要调整以下参数

记录k8s驱逐告警过程_文件系统_06

  但是这里并不重要,因为要修复该问题,磁盘扩容即可。

  主要是为何出现容器探针失败的问题和pod污点的告警?

  这是由于在k8s中有一个特性叫做“节点压力驱逐”,见下图

记录k8s驱逐告警过程_文件系统_07

  所以才会多出上面2个新的告警,问题是很多,但是解决起来确实较为简单,将磁盘扩容即可。

 

6.故障处理

  将磁盘空间不足的k8s node节点进行磁盘扩容即可。

6.1 云盘扩容流程

记录k8s驱逐告警过程_裸设备_08

 

6.2 第一步,在ECS控制台扩容云盘容量

  1.登录ECS管理控制台

  2.在左侧导航栏,选择存储与快照 > 块存储(云盘)

  3.在页面左侧顶部,选择目标资源所在的资源组和地域。

记录k8s驱逐告警过程_Pod_09

  4.在云盘页面找到待扩容的目标云盘,进行扩容。

  • 如果云盘挂载的实例状态为运行中,在云盘操作列单击扩容
  • 如果云盘状态为待挂载或云盘挂载的实例状态为已停止,在云盘操作列选择 > 扩容

    也可以选择多块云盘,在列表下方单击扩容,批量扩容多块云盘。

  5.在确定目标盘与须知向导页面,单击已知晓并备份,继续扩容

  6.在配置扩容方式与容量向导页面,设置扩容参数。

记录k8s驱逐告警过程_文件系统_10

在确认扩容结果向导页面,待扩容结果列显示为成功时,在页面左下角单击下一步,扩容分区和文件系统。

记录k8s驱逐告警过程_裸设备_11

8.在确认扩容结果向导页面,待扩容结果列显示为成功时,在页面左下角单击下一步,扩容分区和文件系统。(付完钱,磁盘空间才会增加)

记录k8s驱逐告警过程_裸设备_12

 

6.3 第二步,在操作系统中扩容分区和文件系统

  1.扩容分区

  本操作以公共镜像Alibaba Cloud Linux 3.2104 LTS 64位操作系统、在ECS实例内部将云盘分区/dev/vdb1由40 GiB扩容至60 GiB(已在控制台扩大容量为60 GiB)为例,请您根据实际环境进行操作。

  运行以下命令,扩容指定分区。例如扩容分区名称为/dev/vdb1的分区,则执行如下命令。

  注意:

  • 命令参数中的/dev/vdb和1之间需要空格分隔,1是分区编号。
  • 如果扩容的是系统盘,命令中的/dev/vdb需要替换为/dev/vda。

  小于2T MBR分区命令:

type growpart || sudo yum install -y cloud-utils-growpart
sudo yum update cloud-utils-growpart
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1

记录k8s驱逐告警过程_Pod_13

  如下图所示,输出CHANGED字样时,表示分区扩容成功。

记录k8s驱逐告警过程_文件系统_14

 

  2.扩容文件系统

  运行以下命令,获取需要扩容的文件系统的类型和挂载目录。

df -Th

  Type值为文件系统类型,Mounted on值为分区的挂载目录。如下图表示/dev/vdb1分区的文件系统类型为ext4,挂载目录为/mnt。

记录k8s驱逐告警过程_裸设备_15

  如果Filesystem取值后缀不带数字(例如/dev/vdc),则为裸设备。

  扩容文件系统。

  扩容云盘分区/dev/vdb1的ext*文件系统为例,则运行如下命令:

sudo resize2fs /dev/vdb1

  扩容裸设备/dev/vdb的ext*文件系统为例,则运行如下命令:

sudo resize2fs /dev/vdb

  运行以下命令,确认是否扩容成功。

  如下图所示,分区/dev/vdb1文件系统容量(59 GiB)和云盘容量(60 GiB)基本一致(因为文件系统本身会占用部分存储空间),表示扩容完成。

 

7.总结

  本次故障总结及其简单,k8s node磁盘空间不足,扩容磁盘即可解决。

  但衍生出来的问题需要特别关注,知其所以然,如k8s节点的压力驱逐。

  以及前期集群规划时服务器资源是否是在合理范围。

 

8.参考

https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/node-pressure-eviction/?spm=5176.2020520104.0.0.f49f709ayVUCVR

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/customize-the-kubelet-configurations-of-a-node-pool?spm=5176.2020520104.console-base_help.dexternal.77ed709aDb9c73

https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm=a2c4g.11186623.0.i14#50541782adxmp

作者:小家电维修


标签:扩容,驱逐,云盘,分区,文件系统,dev,告警,k8s
From: https://blog.51cto.com/lizexiong/12044193

相关文章

  • (装)K8s 总体架构及目录结构
    原文:https://www.guoshaohe.com/cloud-computing/kubernetes-source-read/12491.kubernetes总体架构目前想对kubernetes1.21的源码进行一次阅读分析,本篇文章是对k8s的整体架构进行一个大致分析,先要搞清楚每个组件的功能和任务,在根据不同的组件进行深度的源码分析。......
  • k8s集群负载均衡
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。Kubernetes(K8S)是一个用于自动部署、扩展和管理容器化应用程序的开源平台。在K8S集群中,负载均衡是非常重要的一环,可以实现将流量分发到不同的节点,保证集群的稳定和高可用性。在本文中,我将向您介绍如何在K8S集群中实现负载均衡,并通......
  • k8s集群备份与迁移
    什么是Velero?Velero是一个用Go语言开发的开源工具,用于Kubernetes集群的备份、恢复、灾难恢复和迁移。Velero备份工作流程当用户发起velerobackupcreate时,会执行如下四个动作:velero客户端调用KubernetesAPI创建自定义资源并存储到etcd;BackupController通过Kuber......
  • k8s的RC和RS的区别
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在深入了解Kubernetes(K8S)中的ReplicationController(RC)和ReplicaSet(RS)之前,首先我们需要了解它们的概念和作用。RC是Kubernetes早期版本的概念,用于确保在任何时间都能保持指定数量的Pod副本。RS是RC的新版本,提供了更强大的选择器支......
  • 在k8s中,客户端访问服务的链路流程,ingress--->service--->deployment--->pod--->container
                                                                图片来源:自己画的ingress是一个API资源。客户端访问ingress的不同urlingress给客户端返回不同的服务。就和nginx反向代理服务器一样。根据......
  • k8s官网下载模板yaml方法
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。Kubernetes官网下载模板yaml方法指南概述Kubernetes(简称K8s)是一个开源的容器编排平台,可以实现容器化应用的部署、扩展和管理。Kubernetes官网提供了丰富的资源和文档,其中包括各种示例的模板yaml文件,用于快速部署应用和配置资源。......
  • k8s Service 服务
    目录一、为什么需要Service二、Kubernetes中的服务发现与负载均衡--Service三、用例解读1、Service语法2、创建和查看Service四、HeadlessService五、集群内访问Service六、向集群外暴露Service七、操作示例1、获取集群状态信息2、创建Service、Deployment3、创建客户端......
  • k8s部署单机redis pod
     kind:ConfigMapapiVersion:v1metadata:name:redisnamespace:defaultlabels:app:redisdata:redis.conf:|-port6379bind0.0.0.0dir/dataappendonlyyesprotected-modenorequirepassredispidfile/data/red......
  • k8s中master无法访问NodePort,普通节点可以
    我的是ens33下有两个ip:  移除不想要的ip(不是我们设置的静态ip): 临时(重启后失效):sudoipaddrdel192.168.87.132/24devens33 #删除所有pod让他们再创建 kubectldeletepods--all--all-namespaces 永久(不要dhcp):sudovi/etc/sysconfig/network-scripts/ifcf......
  • k8s常用指令续:
    3.命名空间[root@k8s-masterpods]#kubectlcreatenamespaceabc    //创建命名空间namespace/abccreated[root@k8s-masterpods]#kubectlgetnamespaces        //查看命名空间NAME         STATUS AGEabc   ......