• 首页
  • Qt文档
  • DTK文档
  • 玲珑文档
  • k8s集群排错指南

    一、常见问题及解决方案

    部署阶段

    1.在kubeadm init过程中出现 docker pull failed 的问题?

    因为未登陆docker帐号,使用如下指令login

    docker login harbor.sh.deepin.com

    2.如果出现ports in used 的问题

    ./clean_all.sh,清理完成后继续init,如果还是不干净,继续清理

    3:后续使用过程中如遇以下问题:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    执行如下指令

    4:coredns故障 /etc/coredns/Corefile问题

    https://blog.csdn.net/textdemo123/article/details/106126671

    kubectl edit cm/coredns -n kube-system -oyaml

    5: kubectl get pods —all-namespaces查看镜像出现coredns的两个pod起不来的问题

    问题分析:该问题的根本原因是/etc/cni目录的缺失导致,cni目录是在加载flannel.yaml文件的时候生成,如果出现该问题,可以定位这问题就是在加载flannel.yaml文件产生的,可能是文件中声明的镜像架构不匹配导致

    解决方法:把flannel.yaml文件中的镜像架构改为本机器架构,再进行apply

    6:节点添加阶段无法添加从节点到master原因基本是使用方法不得当导致

    确认join命令是在从节点机器部署,确保环境干净,主节点能看到从节点的信息

    从节点kubeadm join时可能出现10250 in used 说明从节点占用了端口,使用清理脚本,注意由于守护进程的关系,部分残留配置未删除干净也会导致失败,继续清除

    kubeadm join过程中会出现Node existed,这是因为主节点未删除现有的从节点导致,删除kubectl delete node node_name即可

    出现not ready问题是因为在拉取镜像,或者缺少镜像

    添加节点前需先修改hostname,不能有冲突,如hostname相同会返回已存在的信息

    init token保存时间默认为24h,过期后采用如下方法重新生成token

    kubeadm token create

    xxxxx这是生成的tokenxxxx

    kubeadm token list

    xxxxx这是查看token命令xxxx

    获取哈希值

    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/^.* //‘

    xxxxxxxxxxxx这是生成的哈希值xxxxxxxxxxx

    组合例如:

    sudo kubeadm join —token s10e5l.ewhmm9dc4eib2xw0 —discovery-token-ca-cert-hash sha256:2026250b28aa490485f42e782c761eaba398e99ee4b18ed3219ce7f05267f77f 10.20.13.28:6443

    修改节点role:

    kubectl label nodes master02 node-role.kubernetes.io/node2=

    master02 为节点name

    node2 为所需的role名

    二、部分指令详解

    部署过程

    k8s部署过程有三步,为方便手动部署,指令介绍如下

    第一步:初始化k8s

    sudo kubeadm init —config kubeadm-[arch].yaml

    —arch 意为指定架构

    第二步:根据提示输入三步法

    mkdir -p $HOME/.kube

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

    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    第三步:加载网络插件flannel

    kubectl apply -f flannel-[arch].yaml

    排查工具

    查询pod的详细信息

    kubectl describe pod pod_name -n namespace

    查看pod日志

    kubectl logs pod_name -n namespace

    注:这里分享的是常用指令,具体详情请使用man pages或—help get more..