一、报错A
- 安装flannel报错
[root@master ~]# kubectl apply -f kube-flannel.yml
error: error parsing kube-flannel.yml: error converting YAML to JSON: yaml: line 2: found character that cannot start any token
报错原因:yml文件中有格式符或编码问。或有类似的问题,大部分都是kube-flannel.yml的问题,这里建议使用我的文件上传到主节点即可
- kube-flannel.yml免费下载地址(提取码:000a):网盘
二、报错B
在主节点使用这个命令:
kubectl get node
发现节点一直处于NotReady状态
通过命令在该节点查看相关kubectl日志提示如下错误:
主节点输入这个命令:[root@master ~]# journalctl -f -u kubelet
[failed to find plugin “flannel” in path [/opt/cni/bin]]
查看 /opt/cni/bin 缺少 flannel
解决方式:
需要下载CNI插件:
CNI plugins v0.8.6github下载地址:
https://github.com/containernetworking/plugins/releases/tag/v0.8.6
(在1.0.0版本后CNI Plugins中没有flannel)
-
CNI Plugins免费下载地址(提取码:000b):网盘
-
我这边通过windterm上传到主节点(直接将文件丢进去,软件会自动上传。前提是节点已经安装过这个:
[root@master bin]# yum -y install lrzsz
)
-
上传到主节点这个位置:
[root@master bin]# pwd /opt/cni/bin
-
开始解压软件
[root@master bin]# tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz
-
验证主节点状态
[root@master bin]# kubectl get nodes
-
其他从节点也是同样操作
在其他从节点也是上传此文件并解压(从节点也需要)。cni-plugins-linux-amd64-v0.8.6.tgz
从节点解压完成后在主节点查看所有节点状态都是ready[root@master bin]# kubectl get nodes
三、报错C
- 在dashboard页面发现报错(且左侧点击后没有内容)
报错信息如下(或类似):
customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard" cannot list resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scope
或
storageclasses.storage.k8s.io is forbidden: User "system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard" cannot list resource "storageclasses" in API group "storage.k8s.io" at the cluster scope
或
persistentvolumes is forbidden: User "system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard" cannot list resource "persistentvolumes" in API group "" at the cluster scope
或
nodes is forbidden: User "system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard" cannot list resource "nodes" in API group "" at the cluster scope
- 解决方式(主节点执行):
[root@master ~]# kubectl create clusterrolebinding
serviceaccounts-cluster-admin --clusterrole=cluster-admin
–group=system:serviceaccounts
参考:报错参考
四、报错D
k8s的Dashboard再次web登录时无法登录,问题解决方式
安装完k8s的Dashboard后,第一次可以web页面访问。过几天后重新再访问时发现不能访问
dashboard的镜像拉取成功,容器创建成功,但容器在启动的时候启动失败,状态为CrashLoopBackOff
查看pod状态:[root@master ~]# kubectl get po,svc -n kubernetes-dashboard
- 故障排查:
1)查看dashboard pod的详细信息,在最后的Events中看到容器的状态异常(Back-off restarting failed container):
[root@master ~]# kubectl describe po -n kubernetes-dashboard dashboard-metrics-scraper-c79c65bb7-vwjws
报错信息:
Events:Type Reason Age From Message
/ ---- ------ ---- ---- -------
Warning Unhealthy 5m54s (x199 over 5d23h) kubelet, slave1 Liveness probe failed: Get http://10.244.1.3:8000/: dial tcp 10.244.1.3:8000: connect: connection refused
Warning BackOff 67s (x746 over 5d22h) kubelet, slave1 Back-off restarting failed container
然后再然后马上查看dashboard pod的日志
[root@master ~]# kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-55fd8c78bd-776rt
报错信息:
panic: Get "https://10.96.0.1:443/api/v1/namespaces/kubernetes-dashboard/secrets/kubernetes-dashboard-csrf": dial tcp 10.96.0.1:443: connect: no route to host
goroutine 1 [running]:
github.com/kubernetes/dashboard/src/app/backend/client/csrf.(*csrfTokenManager).init(0xc0004fa200)
把报错信息去搜索引擎搜索了下,说可能是ipatables规则问题,于是查看了下iptables规则:
iptables -L -n --line-numbers | grep dashboard
根据上图可以很明显看到,dashboard的数据包直接被REJECT(拒绝)了,找到原因就好办了,设置成允许(ACCEPT)就行
1)先把现有的防火墙规则保存下
[root@master ~]# iptables-save > iptables.rules
2)执行以下命令以确保默认策略为ACCEPT
[root@master ~]# iptables -P INPUT ACCEPT
[root@master ~]# iptables -P FORWARD ACCEPT
[root@master ~]# iptables -P OUTPUT ACCEPT
[root@master ~]# iptables -F
4)把创建的dashboard pod删掉并重启下docker,再次创建dashboard,创建成功
# 只在主节点操作(两个pod都删除)
[root ~]# kubectl delete pod dashboard-metrics-scraper-c79c65bb7-mkh8h -n kubernetes-dashboard
pod "dashboard-metrics-scraper-c79c65bb7-vwjws" deleted
[root ~]# kubectl delete pod kubernetes-dashboard-55fd8c78bd-8ptbk -n kubernetes-dashboard
pod "kubernetes-dashboard-55fd8c78bd-776rt" deleted
# 重启docker 所有节点
[root ~]# systemctl restart docker
5)再次查看状态
[root ~]# kubectl get pods -n kubernetes-dashboard
# 下面状态为running 则正常
6).重新登陆页面:
一般上述操作完等一会儿.试试自己的各个节点访问(之前第一次安装成功是是主节点地址,现在是192.168.30.101访问),访问重新获取一些ak登录即可:
[root@master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
参考:学习