如何使用 kubeadm 从 master 故障中恢复

how to recover from master failure with kubeadm

我使用 kubeadm 设置了一个具有单个主节点和两个工作节点的 Kubernetes 集群,我正在尝试弄清楚如何从节点故障中恢复。

当一个工作节点发生故障时,恢复很简单:我从头开始创建一个新的工作节点,运行 kubeadm join,一切都很好。

但是,我不知道如何从主节点故障中恢复(不中断工作节点上的部署 运行ning)。我是否需要备份和恢复原始证书,或者我可以 运行 kubeadm init 从头开始​​创建一个新的主证书?如何加入现有工作节点?

kubeadm init 肯定不会开箱即用,因为这将完全创建一个新集群、凭据、ip space 等

至少,恢复主节点需要备份 etcd 数据。这通常位于 /var/lib/etcd 目录中。

您还需要集群中的 kubeadm 配置 kubeadm config view 应该输出这个。 (v1.8 以上)

恢复主节点的 step-by-step 确实不是那么干净,这就是他们引入 HA - 高可用性的原因。这是一种更安全的维护冗余和正常运行时间的方法。特别是因为从 etcd 恢复任何东西都非常痛苦(以我的拙见和经验)。

如果我可能会偏离你的问题的主题,如果你仍在开始使用 Kubernetes 并且没有深入投资 kubeadm,我建议你考虑使用 kops 创建你的集群。它已经支持 HA,我发现 kops 对于 kubeadm 和 kube-aws(coreos 集群构建器)来说更健​​壮且更易于使用。 https://kubernetes.io/docs/getting-started-guides/kops/

根据你提到的 Master 的备份,实际上如果你的意思是备份程序(比如 traditional/legacy 备份 tools/techs)在官方文档中没有直接提到(据我所知),但是你可以采取一些预防措施 Options/Workarounds :

我最终写了一个 Kubernetes CronJob backing up the etcd data. If you are interested: I wrote a blog post about it: https://labs.consol.de/kubernetes/2018/05/25/kubeadm-backup.html

除此之外,您可能希望备份所有 /etc/kubernetes/pki 以避免必须更新机密(令牌)的问题。

比如kube-proxy使用secret存储token,如果只备份了etcd证书,这个token就失效了