注:以下为k8s 1.16版本,并且是新加节点,无备份的操作

  • 备份

    • 配置etcd 3

      1  
      2
      

|

      docker cp `docker ps |grep etcd |grep -v pause |awk '{print $1}'`:/usr/local/bin/etcdctl /tmp/  
      export `cat /etc/kubernetes/manifests/etcd.yaml |grep ETCDCTL_API -A1 |xargs  |sed  's/^.//g' |awk '{print $1 }'` ;echo $ETCDCTL_API  
        

—|—
* 获取etcd指令:

      1  
      

|

      export etcdctl=`cat /etc/kubernetes/manifests/etcd.yaml |grep ETCDCTL_API -A1 |xargs  |sed  's/^.//g' |sed 's/ETCDCTL_API=3 /\/tmp\//g'`  
        

—|—
* 备份etcd:(最好/etc/kubernetes目录)

      1  
      

|

      mkdir /back ; cd  /back ; $etcdctl snapshot save snapshot.db    
        

—|—

  • 根据ID删除坏的etcd节点:

    1  
    2
    

|

    $etcdctl member list  
    $etcdctl member remove <ID>  
      

—|—

  • 删除坏掉的node节点:

    1
    

|

    kubectl delete nodes <node>  
      

—|—

  • 使用ake将这个节点重新加回来

    1  
    2
    

|

    ake addnodes  
    ake join --apiserver 192.168.16.40:6443 --pkg-repo http://192.168.16.40:7000 --registry 192.168.16.40:60080 --debug  
      

—|—

  • 给加入进来的node打上master的标签

    1
    

|

    kubectl label no <node> node-role.kubernetes.io/master=   
      

—|—

如果/etc/kubernetes/有备份,以下步骤不需要 将其他节点的/etc/kubernetes/整个目录拷贝过来,并修改/etc/kubernetes/manifests/下yaml文件,将其中的相关的ip换成本机的ip

  • 重新添加etcd节点

    1
    

|

    $etcdctl member add 10.0.129.124 --peer-urls=https://10.0.129.124:2380  
      

—|—

添加节点IP

  • 旧版本k8s可用:
    • 把其他 master 节点的 /etc/kubeadm/etcdcfg.yaml 拷贝过来,然后把其中的 ip 信息改成本机的 ip
    • 把其他 master 节点的 /etc/kubernetes/pki/etcd/ca.crt 和 /etc/kubernetes/pki/etcd/ca.key 拷贝过来
    • 然后使用 kubeadm init phase certs etcd-server etcd-peer apiserver-etcd-client –config /etc/kubeadm/etcdcfg.yaml 生成新的证书
    • 最后用 kubeadm init phase etcd local –config /etc/kubeadm/etcdcfg.yaml 生成新的 etcd manifest 就可以了