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..