升级 k8s 集群 docker
Contents
背景
最近需要给 k8s 集群升级 docker, 预期升到 19.03.x.
遇到一些问题, 记录下
调试期间遇到的问题:
集群中的 ingress 是以 daemonsets 方式部署, 通过 node-selector 选择节点定死.
而 kubectl drain node 并不 evict daemonset pods. 故在升级/重启 dockerd 期间会造成 ingress 短暂不可用. 而现有的 lb 的 health check 不能 cover 这一点, 仍会有流量打入.会导致升级期间 ingress 流量黑洞问题.
并且 dockerd 拉起来后, 有些 daemonsets 由于 ingress 自身 livenessProbe 等原因在 dockerd 升级期间持续 crashLoopbackoff 了, 一个原因是仍然 mount 一份旧的 docker overlay. 在 delete pod 重启后恢复. 故需要一个手段在升级后重启 ingress pods.
Ref https://github.com/kubernetes/kubernetes/issues/75482#issuecomment-511476698
但目前我没找到一个优雅的方式 restart all daemonsets pods on node, 只能通过脚本逐个杀
ingress qcloud lb health check 问题
由于目前我们 ingress 外部还接了 qcloud lb 做一层负载均衡, 从而引入了新问题.
遇到了没有重启 kubeproxy/calico 时网络问题(具体原因未知)导致 lb -> ingress 异常, 从而导致 http 504
结论: 需要对所有 pod 进行重启最保险.
重启命令:
|
|