zoukankan      html  css  js  c++  java
  • Rancher中删除k8s节点数据,还原机器用于重新安装

      在测试环境中,我们一般都会使用单节点docker 部署rancher节点,然后再用rancher 节点开辟一个k8s集群,但是我们安装的时候总会出现各种奇怪的问题,导致k8s的某个节点出现问题,比如你修改了节点的的容器配置,类似docker 对某一个harbor地址支持http访问,这是可能就需要重启docker,重启之后可能你的k8s节点就不好使了,这时候需要清空该物理(虚拟机)节点上的所有rancher k8s配置重新部署、重启才能生效,否则总会有各种问题出现导致节点不能正常工作。

      其实官网说的很清楚,我再贴一下。地址:https://docs.rancher.cn/docs/rancher2/cluster-admin/cleaning-cluster-nodes/_index

      我再大概说一下,先使用脚本将k8s节点上的相关数据清空,脚本:           使用此脚本该备份的东西一定要备份好,小心世上没有后悔药,脚本执行完之后重启操作系统,reboot之类的,然后就可以重新部署了

    #!/bin/bash
    
    KUBE_SVC='
    kubelet
    kube-scheduler
    kube-proxy
    kube-controller-manager
    kube-apiserver
    '
    
    for kube_svc in ${KUBE_SVC};
    do
      # 停止服务
      if [[ `systemctl is-active ${kube_svc}` == 'active' ]]; then
        systemctl stop ${kube_svc}
      fi
      # 禁止服务开机启动
      if [[ `systemctl is-enabled ${kube_svc}` == 'enabled' ]]; then
        systemctl disable ${kube_svc}
      fi
    done
    
    # 停止所有容器
    docker stop $(docker ps -aq)
    
    # 删除所有容器
    docker rm -f $(docker ps -qa)
    
    # 删除所有容器卷
    docker volume rm $(docker volume ls -q)
    
    # 卸载mount目录
    for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher;
    do
      umount $mount;
    done
    
    # 备份目录
    mv /etc/kubernetes /etc/kubernetes-bak-$(date +"%Y%m%d%H%M")
    mv /var/lib/etcd /var/lib/etcd-bak-$(date +"%Y%m%d%H%M")
    mv /var/lib/rancher /var/lib/rancher-bak-$(date +"%Y%m%d%H%M")
    mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")
    
    # 删除残留路径
    rm -rf /etc/ceph 
        /etc/cni 
        /opt/cni 
        /run/secrets/kubernetes.io 
        /run/calico 
        /run/flannel 
        /var/lib/calico 
        /var/lib/cni 
        /var/lib/kubelet 
        /var/log/containers 
        /var/log/kube-audit 
        /var/log/pods 
        /var/run/calico
    
    # 清理网络接口
    no_del_net_inter='
    lo
    docker0
    eth
    ens
    bond
    '
    
    network_interface=`ls /sys/class/net`
    
    for net_inter in $network_interface;
    do
      if ! echo "${no_del_net_inter}" | grep -qE ${net_inter:0:3}; then
        ip link delete $net_inter
      fi
    done
    
    # 清理残留进程
    port_list='
    80
    443
    6443
    2376
    2379
    2380
    8472
    9099
    10250
    10254
    '
    
    for port in $port_list;
    do
      pid=`netstat -atlnup | grep $port | awk '{print $7}' | awk -F '/' '{print $1}' | grep -v - | sort -rnk2 | uniq`
      if [[ -n $pid ]]; then
        kill -9 $pid
      fi
    done
    
    kube_pid=`ps -ef | grep -v grep | grep kube | awk '{print $2}'`
    
    if [[ -n $kube_pid ]]; then
      kill -9 $kube_pid
    fi
    
    # 清理Iptables表
    ## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
    sudo iptables --flush
    sudo iptables --flush --table nat
    sudo iptables --flush --table filter
    sudo iptables --table nat --delete-chain
    sudo iptables --table filter --delete-chain
    systemctl restart docker
  • 相关阅读:
    纯线性同余随机数生成器
    读书笔记之:C语言参考手册(第5版)
    读书笔记之:C语言函数库
    读书笔记之:C/C++程序员实用大全—C/C++最佳编程指南
    C++中重要关键字总结
    读书笔记之:C++参考大全
    读书笔记之:C++大学教程(第2版)
    C语言中函数参数入栈的顺序
    ANSI设备驱动器
    可以输出自己的源程序代码(quine)
  • 原文地址:https://www.cnblogs.com/yidiandhappy/p/13917786.html
Copyright © 2011-2022 走看看