一切, 从今天的报警邮件说起。
早上上班的时候收到阿里云的站点监控邮件, 一下子有点蒙蔽。
“地图搜租房“的服务都稳定运行了几个月了,而且还是在K8S集群的,不应该有问题啊。
然后kubectl get pod 一看。2333...
一堆的服务状态都是Unknown, 还有一堆服务的状态是Pending...
Node节点挂了?
kubectl get node 一看, 哈哈哈, 真的是一个Node 节点NoReady.
咋回事啊老哥, K8S节点还能挂啊,
说好的集群现在就只剩一个机器了, 咋玩啊.
登录腾讯云看看.
咦, 红色了 , 居然是待回收了.
OK, 服务器到期了咯, 哈哈哈哈.
点了一下续费...
别这样同学, 我真的没钱啊.
怂了怂了...
算了, 集群嘛, 一台机器也是集群, 嘿嘿嘿.
手动把一些重量级的服务先停掉,
如Elasticsearch/Gitlab/PostgresQL服务,
然后把"地图搜租房"前端UI/API的Pod数量调整成1(之前是两个),
再然后把域名切到仅剩的机器上,
NGINX配置迁移过来(居然之前这机器就有一份NGINX完整的配置),
重启Nginx, 等待域名解析生效.
最后机器和Pod恢复正常.
整体服务停机了一个多小时恢复正常.
所以, 回到题目的话,
K8S的服务器崩了咋办啊?
一般情况下完全撑得住,
对应节点上的Pod会自动迁移到剩余的机器上面,
需要多少实例理论上都是自动完成迁移的,
不过这种情况下需要注意的是空余的服务器资源是足够的,
不然非常容易导致服务一直在等待CPU或者内存资源, 导致不能正常使用,
一般建议集群内应该都是有闲余资源的, 少一个Node节点不应该影响整个集群.
如果和我一样SB的话, 使用某个Node节点作为网关出口,
然后又恰好这个Node死掉了,
第一件事情应该是先切流量走,
然后是把对应的配置/Nginx等内容挪到新机器,
同时恢复当前需要的Pod, 完成完整的迁移.
好了, 今天的文章水到这里就算了..
PS:
最近"地图搜租房"搜索暂时不可用,
估计得等我买了新的服务器再说了.