Rancher无法启动healthcheck和lb

阅读陈同学 博客原文,格式更佳

Rancher 是一个容器管理平台,最新2.0版本已经内嵌k8s

问题描述

一个新产品临近上线,全部采购了腾讯云ECS服务器,安装了Rancher 1.6.17做容器编排。在添加主机到服务器集群时,rancher的 healthcheck 容器和自定义的 loadbalance 容器无法启动,一直处于Initializing 状态

问题排查

问题容器日志

查看healthcheck和lb容器的日志,并没发现什么特别的信息。因本身没有使用k8s,因此k8s相关的日志也只是普通提示信息

Failed to initialize Kubernetes controller: KUBERNETES_URL is not set, CATTLE_ACCESS_KEY is not set, skipping init of Rancher LB provider
Starting Rancher LB service
LB controller: rancher
LB provider: haproxy
starting rancher controller
Healthcheck handler is listening on :10241
Initializing event router" workerCount=25
Connection established
Starting websocket pings
 -- starting haproxy\n * Starting haproxy haproxy\n   ...done.\n
 -- reloading haproxy config with the new config changes\n * Reloading haproxy haproxy\n[WARNING] 147/162016 (61) : config : 'option forwardfor' ignored for proxy 'default' as it requires HTTP mode.\n[WARNING] 147/162016 (63) : config : 'option forwardfor' ignored for proxy 'default' as it requires HTTP mode.\n   ...done.\n

Google到的蛛丝马迹

这种问题最头疼,没有日志,全看经验,日志甚至会错误引导。

在rancher github的Issues #9916 中发现了点蛛丝马迹,有两个有用的回答:

回答1:

LB not working might be a different issue, this error message shouldn't affect the behavior. If the LB gets stuck in initializing state, in most of the cases - especially when there are multiple hosts in the system - it means that the healthcheck for LB is failing due to cross hosts communication failures.

经验证,发现集群只有一台机器时,没有发生任何问题;当集群超过一台机器时,出现问题。

回答2:

This is becoming an aggregation of issues, while the log message is not telling us anything. I marked this an enhancement.

For other issues, please ensure cross host networking is working properly (http://rancher.com/docs/rancher/v1.6/en/faqs/troubleshooting/#cross-host-communication). If this is the case, please file a new issue describing what isn't working as expected with all the relevant versions and information to reproduce.

经验证,发现不同机器上的容器之间无法ping通,此时焕然大悟,是机器之间的网络出问题了。

因为往机器中添加机器时,若不设置IP,会默认读取机器的公网IP,如下图:

因为是云服务器,基于安全考虑,除了开放80/443/22等必要端口外,其他进入公网流量全部被拒绝。因为Rancher上添加机器时没有指定内网IP,所以不同机器上的容器之间无法通讯。

问题解决

添加主机时指定内网IP即可,指定后healthcheck和lb容器均恢复正常

拓展阅读

以下资料来自rancher官网英文文档:CROSS HOST COMMUNICATION

本小节记录关于 跨主机通讯

如果不同主机上的容器相互无法ping通,可能由以下常见的场景导致:

如何检查跨主机通讯是否正常?

查看healthcheck 容器的状态,如果状态是active,那么跨主机通讯一切正常。

控制台上显示的主机IP是否正确?

每隔一段时间,会使用docker的桥接IP替换主机的IP(不会使用机器的实际IP),这些IP通常是172.17.42.1或从172.17.x.x开始。如果是这种情况,你需要在docker run命令中设置CATTLE_AGENT_IP并重新注册主机。

Ubuntu上容器之间无法通讯

如果你启用了UFW,你可以禁用UFW或者把/etc/default/ufw设置为:

DEFAULT_FORWARD_POLICY="ACCEPT"

为什么Load Balances一直是INITIALIZING状态?

Load Balancers会自动启动健康检查,如果它们一直是这个状态,则很有可能是跨主机通讯出了问题。

处理总结

处理这个问题需要了解Rancher的healthcheck和lb,知道这两个点的人一眼就能看出问题。算是涨经验了。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

nginx防止DDOS攻击配置(二)

我们用的高防服务器只防流量攻击不防CC,现在的攻击多数都是混合型的,而且CC攻击很多,防CC只能自己搞了,按照第一篇的配置,在实际的使用中效果并不理想。限制每秒...

68420
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch推荐插件篇(head,sense,marvel)

安装head head插件可以用来快速查看elasticsearch中的数据概况以及非全量的数据,也支持控件化查询和rest请求,但是体验都不是很好。 一般就用...

38070
来自专栏个人分享

Linux知识体系之磁盘与档案系统管理

硬盘的物理组成:由许许多多的圆形硬盘盘所组成。宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟。

14850
来自专栏杨建荣的学习笔记

通过shell脚本批量验证dataguard的有效性(r7笔记第96天)

我们假设一个场景,当你接触到一个新的环境,我们需要了解这个数据库是否为RAC,是否有备库。 如果有备库,那么问题来了,如果想去验证备库的状态是否有效,是否及时应...

29760
来自专栏魏艾斯博客www.vpsss.net

Vultr 控制面板中文详细介绍

85760
来自专栏极客编程

Java为Hyperledger Fabric(超级账本)开发区块链链代码智能合约之环境部署

您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用。本教程将帮助大家解惑。我将分步展示如何使用 Hyperledger Fabric v0.6 来...

32520
来自专栏晓晨的专栏

Docker实用技巧之更改软件包源提升构建速度

地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘。忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空...

11800
来自专栏跨界架构师

C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

  在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_c...

14310
来自专栏carven

win7 安装 mac虚拟机

  一周前社团ios方向刚完成招新,图新鲜的我也试装了一下虚拟机。自己装的时候是按教程来的,很轻松就装成了。 ios的经理见我装的那么溜,就把几个需要装虚拟机的...

15740
来自专栏图像识别与深度学习

64位Win10系统配置IIS 7.0+PHP+Mysql

25770

扫码关注云+社区

领取腾讯云代金券