zoukankan      html  css  js  c++  java
  • 另类 k8s 集群灾难恢复方法:用 master 服务器镜像恢复出新集群

    我们的生产环境 kubernetes 集群是用阿里云服务器自己搭建的高可用集群(详见之前的博文),这篇博文记录的是如何通过已有集群的1台 master 服务器的阿里云ECS镜像恢复出同样配置的新集群,kubernetes 版本是 1.17.0。

    这台 master 服务器的主机名是 k8s-master0,IP地址是 10.0.1.81。

    首先对 k8s-master0 服务器打快照并生成镜像,用这个镜像创建新的服务器,新服务器的 hostname 也要用 k8s-master0(如果要换主机名,参考博文),新服务器 IP 地址为10.0.9.171。

    通过镜像创建新集群主要面临的是 IP 地址变化带来的问题,为了解决这个问题,需要进行以下几个操作:

    1)替换 /etc/kubernetes 中与 IP 地址关联的配置

    oldip=10.0.1.81
    newip=10.0.9.171
    cd /etc/kubernetes
    
    find . -type f | xargs grep $oldip
    find . -type f | xargs sed -i "s/$oldip/$newip/"
    find . -type f | xargs grep $newip
    

    2)给 etcd 启动命令添加参数

    打开 /etc/kubernetes/manifests/etcd.yaml,给command 添加

    --initial-cluster-state=new
    --force-new-cluster
    

    3)通过 iptables 将旧 IP 地址映射到新 IP 地址

    iptables -t nat -A OUTPUT -d 10.0.1.81 -j DNAT --to-destination 10.0.9.171
    

    4)修改 /etc/hosts 中涉及旧 IP 地址的解析(如果有)

    vim /etc/hosts
    %s/10.0.1.81/10.0.9.171 
    

    5)修改集群配置与旧 IP 地址相关的配置

    kubectl -n kube-system edit cm kubeadm-config 
    %s/10.0.1.81/10.0.9.171
    

    修改好 IP 地址之后,重新生成 etcd-server 证书(这个证书与IP地址关联)

    cd /etc/kubernetes/pki/etcd
    rm server.crt server.key
    kubeadm init phase certs etcd-server
    

    更新当前用户的 .kube/config

    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    

    重启 kubelet 与 docker 服务之后集群就可以恢复

    systemctl restart kubelet && systemctl restart docker
    

    这时通过 kubectl get nodes 命令可以看到 k8s-master0 处于 Ready 状态(注:如果新 master 服务器使用的是不同的主机名,k8s-master0 会显示 NotReady)

    接着去掉之前在 /etc/kubernetes/manifests/etcd.yaml 中给 etcd 启动命令添加的参数(需要重启 kubelet 与 docker 服务使修改生效)

    --initial-cluster-state=new
    --force-new-cluster
    

    最后生成 node 加入集群的命令

    $ kubeadm token create --print-join-command
    

    通过新生成的命令加入新的 node

    kubeadm join k8s-api:6443 --token ***** --discovery-token-ca-cert-hash *****
    

    并删除所有旧的 NotReady 状态的 node

    kubectl delete node $(kubectl get nodes | grep NotReady | cut -d " " -f1)
    

    就大功告成了!

    后续博文:

    参考资料:

  • 相关阅读:
    Drupal忘记管理员密码
    Drupal7新装一个主题时页面白屏,如何设置一个默认主题?
    Drupal7强制把主题恢复到默认主题
    Drupal常用的模块
    网页流量分析系统
    S运算符&&和|| 及其优先级
    Linux crontab命令
    C语言实现文件实时更新
    Linux 查看设置系统语言
    Python沙盒环境配置
  • 原文地址:https://www.cnblogs.com/dudu/p/14259968.html
Copyright © 2011-2022 走看看