首页 文章 精选 留言 我的

精选列表

搜索[timeout],共6460篇文章
优秀的个人博客,低调大师

kubernetes的timeout问题

kubernetes+alpine+php特别容易出现访问外网/解析外网地址的时候出现超时的问题. 原因 docker容器访问外网的时候,整个完整路径是这样的. 容器-->主机-->外网-->主机-->容器 容器到主机之间的流量要经过源地址转换(SNAT)才能顺利流通. SNAT就像是一个搬运工,把砖(流量)从容器搬到主机 如果一个主机上面运行多个容器,并发访问外网(特别是PHP这种没有连接池的)时向系统申请可用端口(nf_nat_l4proto_unique_tuple),不可用时+1,然后再申请,再校验.这个过程一多,最终就会导致寻址超时. 说白了是个系统内核问题. 详细的解释见 记一次Docker/Kubernetes上无法解释的连接超时原因探寻之旅 解决方案 最优解 节点升级到 5.1的Linux内核. iptables升级到1.6.2以上 用基于IPVS模式,尽量少做SNAT/DNAT,支持随机端口SNAT的网络插件启动kubernetes 或者用绕过SNAT的网络插件插件方案,比如阿里云的terway.但这个插件跟阿里云绑定得比较深入,需要每台机器额外购买一个弹性网卡. 次优解 用ds部署name sever,所有节点的DNS解析走节点上的name server,通过最小程度的SNAT+dns cache缓解此类问题. 伪解决方案(不能解决根本问题) 默认的pod的/etc/resolv.conf一般长这样 sh-4.2# cat /etc/resolv.conf nameserver <kube-dns-vip> search <namespace>.svc.cluster.local svc.cluster.local cluster.local localdomain options ndots:5 这个配置的意思是,默认nameserver指向kube-dns/core-dns,所有查询中,如果.的个数少于5个,则会根据search中配置的列表依次搜索,如果没有返回,则最后再直接查询域名本身。ndots就是n个.(dots)的意思 举个例子 sh-4.2# host -v baidu.com Trying "baidu.com.<namespace>.svc.cluster.local" Trying "baidu.com.svc.cluster.local" Trying "baidu.com.cluster.local" Trying "baidu.com.localdomain" Trying "baidu.com" ...... 重开socket lifecycle: postStart: exec: command: - /bin/sh - -c - "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf" 设置重开socket是规避容器并发A,AAAA查询 2级域名直接走上层解析 参考kubernetes 使用基于 alpine 镜像无法正常解析外网DNS 做的 直接运行 sed -i 's/options ndots:5/#options ndots:5/g' /etc/resolv.conf 会报错 alpine的echo命令会吞换行符,而resolv.conf格式不对DNS解析会报错 dnsConfig: options: - name: ndots value: "2" - name: single-request-reopen 去掉了options ndots:5,变会默认值1,这样的话,容器内部直接访问还是没问题的,走search列表,<svc>.<namespace>.svc.cluster.local,还是能够访问。 而解析Google.com,实际上是解析Google.com.,.的数量超过1个,这时不走search列表,直接用上层DNS 综上所述,去掉ndots/ndots设为1 降低了频繁DNS查询的可能性。对于外网IP的解析有“奇效”。 但如果该主机运行其他容器(这不废话吗,一个节点不跑多个容器那还用啥kubernetes),其他容器也会并发地请求,SNAT的问题还是会出现,所以说修改/etc/resolv.conf文件并不能解决根本问题 歪门邪道1 lifecycle: postStart: exec: command: - /bin/sh - -c - "head -n 2 /etc/resolv.conf > /etc/temp.conf;cat /etc/temp.conf > /etc/resolv.conf;rm -rf /etc/temp.conf" 歪门邪道2 initContainers: - name: alpine image: alpine command: - /bin/sh - -c - "head -n 2 /etc/resolv.conf > /etc/temp.conf;cat /etc/temp.conf > /etc/resolv.conf;rm -rf /etc/temp.conf" 衍生的问题 DNAT 容器访问clusterIP(因为是虚拟IP所以需要DNAT)也有可能出现这类超时的问题 注意Virtual domain的问题 non-headservice的域名格式是<svc>.<namespace>.svc.cluster.local 如果我们容器直接访问<svc>.<namespace>.svc.cluster.local,因为默认DNS设置的问题,解析的次数反而更多。正确的方式是访问<svc> 例子:假设test下面有个s的svc host -v s # 解析1次 host -v s.test.svc.cluster.local # 解析4次 所以,访问同namespace其他svc,直接用svc名去访问即可,没必要装逼使用<svc>.<namespace>.svc.cluster.local这种格式。 其他知识 dns记录类型 A记录:地址记录,用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP地址,就需要添加A记录。 CNAME: 如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。 TXT:在这里可以填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF记录(反垃圾邮件)。 NS:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。 AAAA:用来指定主机名(或域名)对应的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)记录。 MX:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。 显性URL:从一个地址301重定向到另一个地址的时候,就需要添加显性URL记录(注:DNSPod目前只支持301重定向)。 隐性URL:类似于显性URL,区别在于隐性URL不会改变地址栏中的域名。 SRV:记录了哪台计算机提供了哪个服务。格式为:服务的名字、点、协议的类型,例如:_xmpp-server._tcp。 用到的命令 安装方法: yum install -y bind-utils sudo apt-get install -y dnsutils apk add bind-tools dig dig +trace +ndots=5 +search $host host host -v $host 参考链接: iptables中DNAT、SNAT和MASQUERADE的理解 linux根文件系统 /etc/resolv.conf 文件详解 kube-dns per node #45363 DNS intermittent delays of 5s #56903 Racy conntrack and DNS lookup timeouts /etc/resolv.conf /etc/resolv.conf search和ndots配置 DNS for Services and Pods

优秀的个人博客,低调大师

【问题】The coprocessor thread stopped itself due to scan timeout or scan ...

Kylin执行查询语句的时候报错如下: Error while executing SQL "select t.hotel_id_m,t.live_dt, d.day_of_week,sum(rns) from tableT t join TableD d on t.live_dt = d.daY_no group by t.hotel_id_m,t.live_dt, d.day_of_week LIMIT 50000": <sub-thread for Query ac580b70-96f2-403a-a64a-0557e599d35f GTScanRequest 143ae1ba>The coprocessor thread stopped itself due toscan timeoutorscan threshold(check region server log), failing current query... 查看regionserver日志 2017-03-20 11:10:05,436 INFO [Query dc7017bb-fefc-4177-a2c9-5842625beb89-109] endpoint.CubeVisitService: Scanned 9999001 rows from HBase. 2017-03-20 11:10:05,454 INFO [Query dc7017bb-fefc-4177-a2c9-5842625beb89-109] endpoint.CubeVisitService: The cube visit did not finish normally because scan num exceeds threshold org.apache.kylin.gridtable.GTScanExceedThresholdException: Exceed scan threshold at 10000001 at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService$1.hasNext(CubeVisitService.java:258) at org.apache.kylin.storage.hbase.cube.v2.HBaseReadonlyStore$1$1.hasNext(HBaseReadonlyStore.java:111) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService.visitCube(CubeVisitService.java:290) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitService.callMethod(CubeVisitProtos.java:4117) at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7797) at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1982) at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1964) at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:33652) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2170) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:109) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:185) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:165) 2017-03-20 11:10:05,459 WARN [RpcServer.FifoWFPBQ.default.handler=59,queue=5,port=60020] ipc.RpcServer: (responseTooSlow): {"call":"ExecService(org.apache.hadoop.hbase.protobuf.generated.ClientProtos$CoprocessorServiceRequest)","starttimems":1489979376495,"responsesize":359,"method":"ExecService","processingtimems":28964,"client":"10.10.16.102:58720","queuetimems":1,"class":"HRegionServer"} 分析解决: 在${KYLIN_HOME}/conf/kylin.property配置文件中有一个配置项 1 kylin.query.scan.threshold=10000000 这个配置项限制了Hbase scan的行数,当scan超过kylin.query.scan.threshold行的时候还是不能满足查询需求,则kylin取消hbase端的查询。 目前暂时有两种方式解决 1、增加kylin.query.scan.threshold值,这相应也会增加hbase压力,在Hbase能够顶住查询压力的情况下,可以增大该值 2、此次查询语句中有LIMIT 50000,Hbase在scan了kylin.query.scan.threshold行之后,让不能扫描出50000行。可以减小LIMIT的值,在Hbase在scan到达kylin.query.scan.threshold之前,就能满足查询要求。则不会出现这个问题 本文转自巧克力黒 51CTO博客,原文链接:http://blog.51cto.com/10120275/1908363,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册