Kubernetes救援 - 教你如何从新技术的坑里爬出来(上) | TW洞见

今日洞见

文章作者/配图来自ThoughtWorks:佟达。

本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。

当下新技术层出不穷,为了降低开发者的学习成本,很多新技术都会提供“Quick Start”,初学者只需要非常简单的几步,就可以把这个新技术用起来。“Quick Start”的初衷是好的,隐藏复杂性,让用户第一时间体验产品。但是,正因为复杂性被隐藏了,很多初学者在跟着“Quick Start”成功操作一遍后,会产生“我已经会了”的假象。而在引入到具体项目后,遇到问题,束手无策,只能求助于StackOverflow一知半解的答案,或者陷入到茫茫多的官方文档之中。

为什么我的眼里常含泪水?因为这坑真是又深又沉。每当被坑,我的心里就会浮现出这张图:

最近摆弄Kubernetes,不免又被摆了一道。

一不小心掉进坑里

作为一个发布不过两三年的新技术,Kubernetes的文档可谓做的不错。对于如何创建试用集群,Kubernetes提供了非常丰富的说明,包括基于三大云平台(AWS,GCE,Azure),Mesos集群,CoreOS集群,vagrant虚拟机,以及裸机等等。一开始,我选择vagrant多机部署,一切都是自动化的,等了大概半个多小时,显示配置成功,然后按照文档说的,执行了几个kubectl命令,看起来挺简单的。

“Quick Start”基本上都是提供一个傻瓜式命令,想变魔术一样,“嘭”,什么都有了。

因为vagrant集群是基于fedora的,而且用SaltStack做部署,每次启动都要重新下载一大堆东西,慢的要死,不适合快速创建演示环境。所以我决定稍微改变一下,用vagrant创建几个Ubuntu的虚拟机,用基于Ubuntu的多机部署方案来做演示集群。

  1. 用vagrant创建Ubuntu集群环境,done;
  2. 配置一下几台虚拟机之间的ssh key,done;
  3. 参照文档,运行几条命令,done;

这次就快多了,运行kubectl命令,没问题。一切都那么美好,我感到自己已经掌握了Kubernetes了,要不怎么说我是DevOps专家呢!看到文档里说,安装kube-ui可以看到图形界面,只需要运行./deployAddons.sh就够了。敲完命令,不断用kubectl get pods --namespace=kube-system看到对应的pod状态,变成running表示已经启动成功。我迫不及待的就去浏览器里看结果,结果就是这样:

看到这,我就傻眼了,说好的美图呢?不得不说,此时我的内心是崩溃的。

急救

当然,作为DevOps专家,内心的崩溃是不能让外人看出来的。所以我淡定的开始修复工作:

  1. 复制网页上的报错信息;
  2. 打开Google(是的,你没看错,是Google);
  3. 按下回车

不愧是Google,瞬间就返回了结果,有几个遇到的错误信息和我一样,但是要么是没解决,要么是重启就解决了,等于没说。恩,干得漂亮。

清点处境

既然知道没有人能帮我,我也就放心了。基于我的经历,我发现了一个定律:

Quick Start如果出了问题,是没有Quick Fix的。

深吸一口气,现在只能靠自己了。首先,清点一下我的处境。

  1. 我自己配置了三台Ubuntu虚拟机;
  2. 根据官方文档里的配置,把config-default.sh中的目标IP修改成真实的虚拟机IP,然后运行kube-up.sh,然后根据按照文档,安装了kube-ui;
  3. 网页上报错信息是:Kubernetes healthz sidecar container

既然只有三条线索,就一个一个排查好了。首先,检查vagrant虚拟机是不是出错了:

  1. 三台虚拟机互相ping可以通,宿主机分别ping三台机器也可以通,看来虚拟机网络没问题;
  2. 通过网页控制台信息可以看到,没有任何错误,说明8080端口是工作的,而且响应正常;
  3. service --status-all命令列出所有服务,所有看起来跟Kubernetes有关的服务状态都是running,说明服务都运行良好。

因此暂时可以排除是基础设施的问题,再来看第二个线索,看看是不是漏掉了文档中的关键配置。于是我对着文档,一字一句的看,文档写的比较简洁,因为大部分工作都自动化了,需要配置的也不多,逐字逐句的对比也没发现什么问题。不过倒是在文档里找到一节之前没注意到文字:

照文档的说法,出问题,看etcd,大喜,赶紧打开日志查看。不出所料,没什么异常。不过根据这个提示,找到了Kubernetes日志输出路径和配置信息路径,也算不小的收获。按照原计划,进行第三步问题排查,看看这条出错信息能帮我找到什么。先Google下kubernetes healthz,发现在Kubernetes 201里提到,这是用来做节点健康检查的。再细想一下,本来应该显示kube-ui的页面,结果却显示了健康检查相关的内容,这说明了什么呢?暂时还不太清楚,但是这个疑问先记下。好了,再清点一下第一轮排查的收获:

  1. 找到了Kubernetes的日志,在/var/log/upstart/下面;
  2. 找到了Kubernetes的配置,在/etc/default/下面;
  3. 找到一个疑点:本该显示kube-ui的页面,却显示了健康检查相关的内容。

缩小排查范围

看起来问题还是没什么头绪,但至少又给自己找了些事情可做。在/var/log/upstart/下面,有很多日志,我可以一个一个看下去。除此之外,别无他法。有时候,没有选择也是一种幸福。先列一下都有哪些日志要查:

master

minion1

minion2

docker

etcd

-

-

flanneld

kubelet

kube-proxy

kube-apiserver

-

-

kube-controller-manager

-

-

kube-proxy

kube-scheduler

-

-

kube-apiserver

-

-

用iterm做分屏非常容易,于是把所有的log都用tail -f /var/log/upstart/<file-name>.log命令打印出来:

看起来不错!当然这只是其中一个节点,另外两个没有展示。现在,我只要再次访问那个让我抓狂的页面,然后从这些漂亮的黑底白字中,找出任何蛛丝马迹,就可以直捣黄龙,解救我于水火之中了。

休息一下

总结一下目前的进展:

  1. Kubernetes集群看似跑起来了,但是却并不能正常工作,比如kube-ui就打不开;
  2. 通过排查,基础设施的问题已经排除,将注意力集中在查找Kubernetes配置是否有问题;
  3. 监控所有日志,期待出现解决问题的线索。

休息一下,欲知后事,且听下回分解。


原文发布于微信公众号 - 思特沃克(ThoughtWorks)

原文发表时间:2016-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

使用Github创建自己的小博客

10620
来自专栏Zchannel

核武按钮终被劫持?Meltdown与Spectre攻击深入解析

17220
来自专栏用户2442861的专栏

半同步半异步模式以及Leader_Follwer模式

这里提到的两个设计模式都是用于高并发系统(例如一个高性能的网络服务器)的。这里我只是简单地提一下:    1. 半同步/半异步(half-sync/half-...

33430
来自专栏FreeBuf

使用各种扫描工具的你,不但踩了“蜜罐”可能还要被团灭了

*本文原创作者:evil7,本文属FreeBuf原创奖励计划,未经许可禁止转载 ? 工作后,越来越没有时间挖洞和写东西了(被世俗的纷争与微弱的工资束缚着),真是...

30480
来自专栏PPV课数据科学社区

QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

爬虫功能: QQSpider 使用广度优先策略爬取QQ空间中的个人信息、日志、说说、好友四个方面的信息。 判重使用“内存位”判重,理论上亿数量级的QQ可瞬间判...

54650
来自专栏存储

你真的很熟分布式和事务吗?

微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师...

23590
来自专栏大数据挖掘DT机器学习

新闻个性化推荐系统(python)-(附源码 数据集)

最近参加了一个评测,是关于新闻个性化推荐。说白了就是给你一个人的浏览记录,预测他下一次的浏览记录。花了一周时间写了一个集成系统,可以一键推荐新...

65450
来自专栏Java技术栈

同样是5年的开发经验,差距在哪里了?

我现在就职于一家中型的互联网企业,去年年底入职的薪资和待遇都很不错,但是总结起来说的好听就是全村人的希望,说的不好听就是一个人几乎干了一个项目组的事。

11460
来自专栏数据之美

linux 系统监控、诊断工具之 IO wait

1、问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端、本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台...

446100
来自专栏腾讯云技术沙龙

陈曦:性能与稳定并存 Elasticsearch调优实践

我今天分享的是Elassticsearch调优实践,首先自我介绍一下,我资历比较浅,我是腾讯TEG基础架构部后台开发工程师,虽然我不是项目经理,但是我们项目负责...

34330

扫码关注云+社区

领取腾讯云代金券