k8s节点为NotReady的常见原因
问题描述
k8s节点为NotReady
排查过程:
原因1: node节点的kubelet未启动
查看kubelet日志
# 查看node详情
kubectl get node -o yaml
# 查看你systemd守护进程管理的组件日志
## kubelet是systemd方式运行的
## 实时滚动显示某个Unit的最新日志
journalctl -u kubelet -f
# 只查看今天的kubelet日志
## |less可以解决日志显示不全的问题
journalctl -u kubelet --since today |less
解决办法:
systemctl enable --now kubelet
查看kube-proxy日志
# 查看Pod部署的组件日志
## k8s的其他组件都是pod运行的
kubectl logs kube-proxy-xxx -n kube-system
## 持续查看日志
kubectl logs -f kube-proxy-xxx -n kube-system
查看os日志
# 从OS中查看日志
tail /var/log/messages
# 持续查看OS日志
tail -f /var/log/messages
原因2:没有安装cni插件
解决办法: 安装cni插件
https://blog.youkuaiyun.com/omaidb/article/details/121283067
get node看不到节点
二进制:如果get node
看不到节点,先判断是否get csr
可以看到请求证书,如果能看到说明通信和启动没啥大问题
- 可能是kubelet请求证书没权限
# 创建cluster绑定
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
- 如果看不到说明
kubelet
启动有问题,可能是系统环境不满足(例如cgroups驱动
、swap
、selinux
等)或者配置有问题。
不管什么错误,重启kubelet
,然后less
命令从头查看/opt/kubernetes/logs/kubeletxxx.INFO
日志,慢慢分析,找出警告或者错误日志~
# 查看kubelet日志
journalctl -u kubelet --since today |less
# 或
less /opt/kubernetes/logs/kubeletxxx.INFO
如果没有问题apiserver
组件日志同样方式也分析下。