填坑有意思么?


能从坑里爬出来、又把填平有就意思;在坑里蹲着的时候,就很没意思。


而世上最可悲的事情是:次次都上当,当当都一样。相同的坑总掉进去,因为忘了此处彼处有坑。为了怕忘记坑的位置,大魏会经常写填坑记录,并且公众号推送出来,从不藏着掖着。


Anyway,填坑伤身体。大萝卜多吃,坑少填。


言归正传,为什么叫跨年坑?因为OCP的坑从2020年填到了2021年,终于爬出来并彻底填平。下面我们看看填坑的过程。


1.12月23号左右,一套别人装好的OCP交到了大魏手里。

登录、访问都没问题,但是:OperatorHub无法访问。Hub不是一定要用,但本着有病得治的原则,开启了Operator的修复之旅。详见:

十八般武艺@大魏填坑记之修别人的OpenShift


升级过程中etcd operator死活升级不上去,用如下方法填坑:

大力金刚指@OpenShift升级etcd operator报错


总之,OperatorHub算是修好了,OCP也成功升级了。记住,此时一起看起来很正常、看起来OCP的病治好了。


2. 三天后OCP在压力测试过程中,MCO配置无法下发。

查看MCP,Master MCP出现问题。


对OCP熟的人都清楚,MCP不好修,能不能修好,很多时候看运气。


总之,MCP被大魏奇迹般地修复了,很开心,见:

慑魔外道@OpenShift MCP修复记!


期间大魏还修了一把Image Registry:

洛钟东应@Image Registry的终极修复


3.在随后几天的测试过程中,发现OCP很卡。

卡到什么程度?比如oc get nodes、oc get co,大概4-5秒才有反应。


查看OCP宿主机(安装在两台x86的vSphere),master VM的磁盘延时有几十毫秒的延时,最高到200多毫秒。于是:


申请加FC SAN 1T(全Flash存储,很高端),做VM datastore--->做Storage vmotion,把所有vm迁移到FC SAN---->发现有两个master vmotion总失败--->大魏查看vsphere日志,发现路径频繁切换怀疑有坏盘:


第二天, 请现场技术人去机房一看 ,三个SAS做的raid5 两个亮黄灯

现场技术人员尝试拔插块硬盘触发rebuild, 整个raid直接挂掉。而OCP的两个Master和堡垒机,正好装在这个raid5做的datastore上。


一夜回到解放前。。。。


4.12月31日,决定重装OCP。

硬盘问题定位了,FC SAN也有了,决定重装(现场有技术人员、我远程,一起安装),重装治百病。2020年的坑,别拖到2021年不是?


首先再多申请1T的FC SAN,对原有1T的FC SAN Datastore扩容,这次把所有VM都装在高端存储上,玩把大的。


但是,重装OCP的时候,RHCOS在第一次安装后自动重启,报错如下:

大魏填的跨年坑@OpenShift_java

关键句就是:failed to set up standard input: Inappropriate ioctl for device。


这报错大魏没看见过啊,于是谷歌、内网去搜索,无果。


于是开始排查:

FC磁盘不识别?install-config.yaml写错了?时间戳不对?VM的OS类型选的不对?(vSphere里专门有个CoreOS的VM OS类型)、启动参数输入不对?install iso下载的有问题?raw.gz下载的有问题?


NoNoNo,都不是。


这时候,已经是2020年12月31日晚上了,年内的坑肯定填不平了。



5. 2021年1月1日:破案.

大魏所有能想到的可能问题点都排查了,一定是有什么很普通的细节被忽略,一定是!


福尔摩斯说:一切合理的答案都被逻辑排除后,剩下的那个因为主观,所以被贴上“不可能”的标签的答案即为正解。


果然,在意想不到的点,找到了线索!

大魏填的跨年坑@OpenShift_java_02

大魏填的跨年坑@OpenShift_java_03

问题源于:安装OCP的时候,错误地下载了最新版本的openshift-install二进制文件(4.6的),而要安装的OCP的install.iso和raw.gz却是4.5的。


找到这个问题后,火速下载正确版本,进行重装。


很快装好,搞定。


使用FC SAN 环境,OCP反应是飞一样的速度, master的平均磁盘延迟不到1毫秒。

大魏填的跨年坑@OpenShift_java_04



总结:

1.OCP4对网络I/O和磁盘I/O比较敏感,所以生产上最好OCP安装在SSD磁盘或者FC SAN。因为你要知道,OCP在生产上可以要承载上千个业务容器的。保时捷汽车都买了,不应该买几个好轮胎么?


2.以前我看到很多关于OCP4三个Master跨机房部署,实现所谓一个集群的应用多活的讨论,一看就没掉进过坑。

OCP4的etcd,心跳的同步最长不能超过100ms。100数字看起来挺大,对不?但单位是毫秒。也就是说,OCP master之间的网络延迟,不能高于1/10秒!所以,别折腾了,生产以稳定、稳妥为主。想PoC验证可以试试,但大魏不兜底。

对此感兴趣,有疑问的可以参考:

记一次OpenShift etcd抖动的故障分析