环境情况:kubeadmin部署的k8s集群,版本1.22.1,docker版本20.10.7
现象: kubectl get pod 发现pod长时间处于containercreating状态/或者kubectl get node时node节点长时间处于notready状态/或者kubectl get node时node节点状态一会儿ready一会儿notready状态之间相互转换/pod长时间不更新状态
过段时间后hz-cs2上的pod状态就会全变terminating
问题描述:k8s集群过一段时间就会有节点notready,有时候是一直notready,有时候是一会儿notready一会儿ready状态,有的环境是是ready状态,但piod状态更新很慢,时间估计有5到8分钟状态才更新为Runnning ,看日志硬是找不到原因,百度也找不到解决方案。
1.node节点状态异常,notready
# kubectl get node
# 其中一个node,notready了,尝试重启kubelet均无效果
#重启kubelet: systemctl restart kubelet

2.describe node 一下 看看
# kubectl describe node hz-cs2
#效果如图


从这里看就非常奇怪了,毕竟一般notready状态的原因都是资源问题导致的,咱们这里没有给出任何原因,资源也是充足的
3.在hz-cs2上top看看
# top
# top看一下负载

cpu等负载都不高非常正常,这也是这个问题的难点所在。毕竟网上的结论都是说资源负载导致的。真的是我们不一样呀!
4.看看kubelet日志
# journalctl -xeu kubelet
# 日志如图


看到这没有一点关键信息,毕竟这里的runtime status check may not have complet只是表像。百度一下会发现没有符合我们的情况答案。这就难整了。日志给的是表象没有给具体根因
5.把kubelet的日志级别设置为4,或者6
# vim /usr/lib/systemd/system/kubelet.service
# 添加 --v=6 编辑保存
# systemctl daemon-reload
# systemctl restart kubelet

然并卵。kubelet日志还是和4一模一样
6.查阅多方资料后断定是kubelet调用docker超时导致的问题。网上的解决方案众说纷纭。一 一实践后,均无果
7.既然是docker出问题了,那就给个临时解决方案吧:
# systemctl restart docker
8.以上7步骤补充说明,对大部分环境有效。所以强烈建议先不做7.请把7放一下先往下走。Master节点上如果有业务pod有可能重启会导致k8s容器起不来,最后解决起来比较棘手。这里要写的话又是一堆细节要写,我们在此止步
9.追根朔源吧。分析docker日志
# journalctl -xeu docker
徒劳无果,也是一堆表象报错和业务容器报错。让人眼花缭乱,无从下手。
10.docker ps试试看看有没有hang死的容器
# docker ps

正常,docker命令均正常
怀疑人生了,看似是docker问题,却从日志下不了手呀,兄弟们!
11.docker ps -a |grep -vi up看看有没有异常的业务容器
# docker ps -a |grep -vi up

试着清理一下,docker rm f8b1580354b3
# docker rm f8b1580354b3
结果不出所料执行命令:
# docker rm b008f63cc944
# docker inspect b008f63cc944
# docker start b008f63cc944
都hang死了
12.有眉目了,兄弟们,试试将这个hang死的异常容器删除
docker rm b008f63cc944 这条命令肯定是不奏效了
咱们换一种方式删除:
# cd /var/lib/docker/containers
# ls |grep b008f63cc944
# docker start b008f63cc944

# rm -rf b008f63cc944e7ee00243ef90e1629713fec936333746282f5af7da9d83d4aa9
# cd /var/run/docker/containerd
# ls |grep b008f63cc944
# rm -rf b008f63cc944e7ee00243ef90e1629713fec936333746282f5af7da9d83d4aa9

# docker rm -f b008f63cc944
仍然hang死,继续操作
# ps aux |grep b008f63cc944

# ps aux |grep b008f63cc944 |grep -v grep | awk '{print $1 $2}'

# kill -9 802575
# ps aux |grep b008f63cc944 |grep -v grep | awk '{print $1 $2}'
# docker rm -f b008f63cc944
到此处理完毕。
12.到此处理完毕。
# kubectl get node

立马就状态正常了
13.kubectl get pod 看看

正常了
方案1.做第7步重启docker,暂时不推荐做第7步。对于master结点不一定奏效
方案2.走以上步骤,走一遍。推荐走方案2
以上为生产实践及个人总结得出的解决方案,网络上对此问题几乎无正确解决方案。纯属原创作品,请大家转载注明出处!
原文地址
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我想为我的Task模型创建一个status属性,该属性将按以下顺序指示它在三部分进度中的位置:打开=>进行中=>完成。它的工作方式类似于亚马逊包裹的交付方式:已订购=>已发货=>已交付。我想知道设置此属性的最佳方法是什么。我可能是错的,但创建三个独立的bool属性似乎有点多余。实现此目标的最佳方法是什么? 最佳答案 Rails4有一个内置的enummacro.它使用单个整数列并映射到键列表。classOrderenumstatus:[:ordered,:shipped,:delivered]end状态映射如下:{ordered:0,
s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成