• k8s运维问题整理


    1.宕机或异常重启导致etcd启动失败

    服务器非正常关机(意外掉电、强制拔电)后 etcd 数据损坏。
    查看apiserver日志发现出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused,2379是etcd的端口,那么apiserver是由于etcd无法连接而启动不了

    参考资料https://blog.csdn.net/kali_yao/article/details/126810964

    处理办法
    查看etcd和api-server服务状态及日志
    docker ps -a|grep etcd
    docker ps -a|grep api-server
    
    #1.不知道路径可以查找etcd数据目录
    find / -type d -name member
    cd /var/lib/etcd/member
    mv /var/lib/etcd/member /root/member.back
    # 注:在故障节点执行,删除或者移走备份都可以
    
    #1.重启etcd
    docker ps -a|grep etcd
    docker rm -f etcd的ID        # 所有节点执行
    systemctl restart kubelet    # 重启kubelet
    
    #2.查看
    kubectl get pods
    # 注:此时没有报错了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    etcd数据备份与恢复

    https://www.cnblogs.com/huanglingfa/p/13773397.html

    # 首先需要安装etcdctl 命令行命令
    yum install -y etcd
    
    # 备份
    # 可 export ETCDCTL_API=3 设定临时环境变量,防止每次重复输入
    # 注意 snapshot.db 是当前路径,可以指定路径
    ETCDCTL_API=3 etcdctl \
      snapshot save snapshot.db \  
      --endpoints=https://127.0.0.1:2379 \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/peer.crt \
      --key=/etc/kubernetes/pki/etcd/peer.key
    
    # 查看文件存储的信息
    ETCDCTL_API=3 etcdctl snapshot status snapshot.db
    
    # kubeadm 部署恢复etcd数据库
    # 1、先暂停kube-apiserver和etcd容器
    mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
    mv /var/lib/etcd/ /var/lib/etcd.bak
    # 2、恢复
    ETCDCTL_API=3 etcdctl \
      snapshot restore snapshot.db \
      --data-dir=/var/lib/etcd
    # 3、启动kube-apiserver和etcd容器
    mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
    mv /var/lib/etcd.bak  /var/lib/etcd/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    # 环境准备,复制容器中的etcdctl命令出来
    docker ps | grep etcd
    docker cp baf3e1a53c2c:/usr/local/bin/etcdctl /usr/bin/
    
    # 创建定时任务 crontab -e
    0 * * * * /opt/k8s_bak/backup_etcd.sh
    
    #!/bin/bash
    BACKUP_FILE="snapshot.db"
    BACKUP_PATH="/opt/k8s_bak/"
    ETCDCTL_API=3 etcdctl snapshot save $BACKUP_PATH$BACKUP_FILE --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key
    echo "etcd backup completed at $(date)"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2.安装k8s集群cilium一直重启
    docker ps -a
    # 查看已关闭容器日志
    # 发现报错日志:nsenter: cannot open /hostproc/1/ns/cgroup: No such file or directory
    
    - hostPath:
      path: /proc # 也就是说是宿主机的这个目录中没有 /proc/1/ns/cgroup 这个文件。
    
    # 使用cilium,因linux内核版本过低无法启动,issues:https://github.com/rancher/rke2/issues/3571
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3.K8S Flannel Pod 无法启动系列问题

    “cni0” already has an IP address different from

    # 可以使用 IP 命令直接修改
    sudo ip address flush dev cni0
    sudo ip address change 10.244.X.1/24 dev cni0
    
    # 或是删除 cni0 让 K8S 自动重建
    sudo ip link set cni0 down
    sudo ip link delete cni0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4.修改默认端口范围
    vim /etc/kubernetes/manifests/kube-apiserver.yaml
    
    # 添加到如下位置就行了
    - command:
       - kube-apiserver
       - --service-node-port-range=1-65535
    
    # 直接删除kube-apiserver  pod 就行了 会自动重启
    # 多master节点,需删除所有
    # kubectl delete pod kube-apiserver-qa-01.df-emall.com -n kube-system
    # kubectl delete pod kube-apiserver-qa-04.df-emall.com -n kube-system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    5.k8s备份工具velero

    Github:https://github.com/vmware-tanzu/velero
    Velero(之前称为Heptio Ark)是一个备份和还原Kubernetes集群的流行工具,支持备份和还原Kubernetes对象、PV和Namespace等资源。Velero能够备份到本地存储和云存储(如AWS S3和Google Cloud Storage),还支持在不同集群之间迁移数据。

  • 相关阅读:
    基于Java+SpringBoot+vue+element实现汽车订票管理平台详细设计和实现
    OA系统都能为企业带来什么
    leetcode -658--找到 K 个最接近的元素
    搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack
    开源网络协议栈onps诞生记
    Vue六(插件|Vuex的使用|购物车垮组件通信|Vue-route|路由跳转 携带数据 嵌套 守卫)
    瑞吉外卖 —— 11、项目优化:使用 Redis 缓存
    对比学习的锚网络和自动生成标签
    如何解密Allatori 混淆的字符串 Java ALLATORIxDEMO
    java 自增问题 字节码角度解释
  • 原文地址:https://blog.csdn.net/womeng2009/article/details/136344473