• 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),还支持在不同集群之间迁移数据。

  • 相关阅读:
    学习笔记-Secure-Linux
    Python——Python添加解释器Interpreter怎么选?
    node封装一个图片拼接插件
    【JavaScript高级】01-this的指向
    AUTOSAR协议栈 - 功能简介
    Linux中的 loop设备
    (三)线性判别式分析LDA
    理解 std::thread::join
    2024年申报国自然项目基金撰写及技巧
    【JavaSE】面向对象三大特性之多态
  • 原文地址:https://blog.csdn.net/womeng2009/article/details/136344473