首页 > 其他分享 >kubernetes关于eks一次异常问题的复盘

kubernetes关于eks一次异常问题的复盘

时间:2023-02-02 18:02:29浏览次数:69  
标签:...... kubernetes .... 31 aws ..... eks 复盘

背景:

海外新加坡有一套awseks集群,很小的规模 托管的 三节点(172-31-16-189节点为最近才加的,忽略):

[root@ip-172-31-10-1 ~]# kubectl get nodes
NAME                                               STATUS   ROLES    AGE    VERSION
ip-172-31-16-189.ap-southeast-1.compute.internal   Ready    <none>   44h    v1.23.9-eks-ba74326
ip-172-31-17-92.ap-southeast-1.compute.internal    Ready    <none>   110d   v1.23.9-eks-ba74326
ip-172-31-3-165.ap-southeast-1.compute.internal    Ready    <none>   111d   v1.23.9-eks-ba74326
ip-172-31-32-5.ap-southeast-1.compute.internal     Ready    <none>   111d   v1.23.9-eks-ba74326

事情经过是这样的12月28日更新镜像,172-31-17-92节点出现了一次镜像ImagePullBackOff,由于我镜像仓库位于国内我当时怀疑是网络问题,将镜像修改tag 上传到了dockerhub仓库**,but **在宿主机操作docker pull 上传到dockerhub的镜像依然是pull不动,索性 restart了一下docker and kubelet 重新下载成功了......祸根就从这里埋下了。春节放假又出现了两次异常。后面找aws的小伙伴帮忙一起看了一下复盘了一下。这里记录一下!

kubernetes关于eks一次网络问题的复盘

出现的异常现象

  1. docker image镜像无法下载
  2. 节点上pod 无法连接内网域名(包括集群内svc地址and aws 数据库redis域名),ping 没有任何返回。看连接kafkaf服务的日志出现**Failed to resolve 'b-2.xxxxx.xxxxx.c3.kafka.ap-southeast-1.amazonaws.com:9096': Try again (after 5001ms in state CONNECT, 4 identical error(s) suppressed)。**mysql服务也出现连接失败的错误MySQL异常:**SQL state [HY000]; error code [2002] **如下:

image.png

  1. eks自有组建都在不停的重启,比较明显的服务有aws-node ebs-csi-node,还有我搭建的traefik代理组件
kubectl get pods -n kube-system

img_v2_a56fc6a1-d612-4adf-82ef-252340e2726g.jpg

分析以及解决过程

查看eks系统组件报错

 kubectl describe pods aws-node-zx4sb -n kube-system

image.png 重点关注词: ** Last State: Terminated** ** Reason: Error** ** Exit Code: 137**

也顺便看了一些kube-proxy,日志有一下报错: service log of the node: Failed to ensure chain exists" err="error creating chain "KUBE-EXTERNAL-SERVICES": fork/exec /usr/sbin /iptables: resource temporarily unavailable: " table=filter chain=KUBE-EXTERNAL-SERVICES traefik ebs-csi-node组件不断重启,不能正常运行,拿这两个组件尝试了一下** delete 异常节点上的traefik ebs-csi-node组件,等待pod重新running**后再无异常 image.png 这里的重点关注词: resource temporarily unavailable 注: aws-node 并未手动杀死

登陆异常节点查看日志:

journalctl |grep kubelet

肉眼扫了一眼一些异常1月21日的报错日志: failed to create new OS thread (have 6 already; errno=11)\nruntime: may need to increase max user processes (ulimit -u) image.png

搜索关键词解决问题

找到这个关键词max user processes 执行了一下ulimit -a

image.png max user processes (-u) unlimited unlimited是指不限制用户可以使用的资源, 但这个设置对系统可打开的最大文件数(max open files)和各个用户可同时运行的最大进程数(max user processes)无效 参照谷歌搜索 image.png

The maximum user processes (nproc) limit on Linux counts the number of threads within all processes that can exist for a given user. The default value of nproc is 1024 on some versions of Linux, which is generally an insufficient number of threads for all processes

那默认值是1024.......,后之后觉查一下进程数:

ps ux|wc -l

image.png 当前是400多个,扫一遍程序,参照https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-failed-create-pod-sandbox/

 ps ux | awk '{if($8=="Z") print}'

image.png

 ps ux | awk '{if($8=="Z") print}'|wc -l

image.png what 才更新了几天的程序有两个多个僵尸进程?扫了一眼:一个截图的game-screenshot 的nodejs程序造成的.....之前为什么没有......11月份他们改了程序方式....总算找到了罪魁祸首,僵尸进程没有处理....长时间运行是会出现更多的僵尸进程....那国内为什么没有出现过这个问题呢?带着疑惑看了一眼我的阿里亚ack集群:

 ps ux | awk '{if($8=="Z") print}'|wc -l

有500多个僵尸进程....但是确实没有出现过这样的问题,看一眼ulimit -a image.png 顺便扫一眼腾讯云TKE image.png 注:机型配置不一样,参数会有所区别,但是max user processed这个参数国内云商确实优化了.....先忽略1024的那么小的配置....找到写程序的小伙伴,连夜让他把代码改了......

吐槽:

  1. case工单提交了一天 完全没有人鸟.....账号还是国内某大厂的。最后找到了国内aws团队的小伙伴(最近正好又业务往来),给加速了一下,并帮分配到了台湾的工程师帮忙排查问题。当前状态下,国外电话打进来都自动被屏蔽了,联系很不方便。web 体验了一下Amazon Chime.....也断线了好几次。台湾工程师交流起来还是不习惯,太流程化.....文化差异吧哈哈。https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-failed-create-pod-sandbox/也是台湾工程师给提供的!
  2. 我使用托管服务默认觉得云商对系统参数都进行了优化....起码国内的 腾讯云 阿里云都这样做了。系统的参数很多都可以不用去关心调整。第一次使用aws我也想当然以为这样了,出了这问题我才发现其实并不是这样的,台湾的工程师也一直给我解释,他们是让用户差异化初始机器的时候自己设置......那我用什么EKS 我自己搭建一个kubeadm的集群不好了......当时着急搭建, 我是直接梭哈跑起来的....还被各种IAM摧残......
  3. 其实看到resource temporarily unavailable报错的时候就应该想到最大进程数了...这个问题我真的没有想到过.....因为初始化系统的时候个人都会把这些参数优化了....太理所当然的以为云商进行了优化了......

image.png 自己搭建集群好歹也记得把这些limit设置了..... image.png

  1. 感谢国内AWS团队小伙伴的帮助

标签:......,kubernetes,....,31,aws,.....,eks,复盘
From: https://blog.51cto.com/saynaihe/6033818

相关文章

  • kubernetes(四)
    一、基于StatefulSet部署有状态访问、基于DaemonSet在每一个node节点部署一个prometheusnode-exporter1.1StatefulSethttps://kubernetes.io/zh-cn/docs/concepts/work......
  • kubernetes 污点(Taint)和容忍度(Toleration)研究
    1.文档官方文档https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/2.知识点2.1.什么污点和容忍度?污点(Taint)是应用在节点之上......
  • Mysql索引相关的知识复盘一
    索引的作用和分类索引的优缺点优点:加快数据检索速率排序分组时候,使用索引将降低资源的消耗缺点:增加了索引维护的成本降低了更新的速度提高了数据维护的成本索引会占据更多的......
  • Kubernetes(k8s)配置文件管理:ConfigMap
    目录一.系统环境二.前言三.ConfigMap概览四.创建ConfigMap五.ConfigMap的使用5.1以环境变量的方式使用ConfigMap5.2以卷的方式使用ConfigMap一.系统环境服务器版本......
  • 每日复盘总结
    目录个股资金流向排行行业资金流向排行概念资金流向排行业绩预告个股资金流向排行沪深两市个股资金流向排行-数据中心-同花顺财经(10jqka.com.cn)http://data.10jqka.c......
  • Kubernetes搭建Yearning与简单使用
    背景:数据库基本为myql,数量不是很多,过去一直默认开启了防火墙模式通过公司固定IP,远程访问操作mysql。疫情原因,一些小伙伴不喜欢远程通过公司的网络去连接mysql,频繁添加防......
  • kubernetes对接NFS动态存储
    存储PK根据不同的场景,可以考虑用Ceph、GlusterFS或NFS来存储Kubernetes数据。Ceph有较强的性能和容错能力,通常适用于中小规模的Kubernetes组件;GlusterFS具有可伸缩性,适用......
  • kubernetes get pods 跟踪
    之前重启pods的时候总是不停的敲sudokubectlgetpods,今天发现居然有watch功能,太方便了,记录一下sudokubectlgetpods-w-lapp=zk-owide-w就是watch的意思-lap......
  • kubernetes affnity亲和力研究
    1.官方文档https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity2.亲和性与反亲和性 亲和性和反亲和性扩......
  • 部署Kubernetes Cluster
      安装方法kubernetes二进制安装(配置最繁琐,不亚于安装openstack)kubeadm安装(谷歌推出的自动化安装工具,网络有要求)minikube安装(仅仅用来体验k8s)yum安......