k8s排错随记(一)

这篇具有很好参考价值的文章主要介绍了k8s排错随记(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、执行kubeadm init后报错[ERROR Swap]:running with swap on is not supported。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
处理方法:

swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

二、执行kubectl apply -f flannel.yaml后,coredns一直pending,所有节点仍然NotReady。

#排错
kubectl get pods -n kube-system

kubectl describe pod -n kube-system coredns-7ff-c5k

vim /var/log/messages

systemctl status kubelet -l

journalctl -u kubelet -f

desc日志:0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate.
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
message日志: failed to find plugin “flannel” in path [/opt/cni/bin]
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

#最终处理方法:
下载flannel,所有节点 复制 flannel 到 /opt/cni/bin/ 。 此时全部节点变成ready状态,

参考:https://blog.csdn.net/qq_29385297/article/details/127682552 《failed to find plugin “flannel” in path [/opt/cni/bin]

2.1 其他类似情况

处理手法类似。
failed to find plugin "portmap" in path [/opt/cni/bin]
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate.

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

三、expects " or n,but found t, error found in

apply yaml文件时,报错,根据下图中的报错提示, v1.LabelSelector.MatchLabels 和 #10 byte of "access":true
定位是matchLabels:下面的access: true 有语法错误。

需要加双引号变成 access: "true"

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

四、error unknown flag: --label

通过--help和错误提示, 正确写法是 --labels

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

五、yaml中annotation的值写纯数字报错。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

error: unable to decode annotation readString: expects " or n,but found 2,error found in #10 byte of

#模拟报错
[root@master01 c5] kubectl apply -f nginx-pod.yaml 
error: unable to decode "nginx-pod.yaml": resource.metadataOnlyObject.ObjectMeta: v1.ObjectMeta.Annotations: ReadString: expects " or n, but found 1, error found in #10 byte of ...|version":1.1},"creat|..., bigger context ...|ta":{"annotations":{"app":"nginx-pod1","version":1.1},"creationTimestamp":null,"labels":{"run":"ngin|...
发现在annotation的value值写 纯数字,小数会报错。
version: 123  (会报错)
version: 1.2  (会报错)
version: 123v  ( ok )
version: v123  ( ok )
version: v1.2 ( ok )
version: "123" ( ok )

处理方法: value加上双引号,或者写成数字+英文。
yaml语法检查网站: json2yaml.com/convert-yaml-to-json
本文的第五项与第三项可相互看。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

六、排错执行的操作

kubectl logs -f kube-flannel-xxx
kubectl describe pod kube-flannel-xxx
cat /var/log/message
journalctl -u kubelet -f

七、pod的name不能含有大写,大写会报错。

这里的name的值需要符合RFC 1035规范。可以写 小写, -号 ,数字。比如 v-test-01

[root@master01 test_file]# kubectl apply -f nginx-pod.yaml 
The Pod "nginxTEst" is invalid: metadata.name: Invalid value: "nginxTEst": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
[root@master01 test_file]#

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

八、DaemonSet的yaml文件,编写的报错。(报错文字的分析+排查)

from : “演示Daemonset部署fluentd组件-”

8.1、

写漏字母,比较好排查。DaemonSet.spec.template.spec.volumes[0]:unknow field “hotPath” in io.k8s.api.core.v1.volume
改成hostPath即可。
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

8.2、

最后一行的hostpath,写错了。应该写成hostPath (排错手法与8.1相同)
DaemonSet.spec.template.spec.volumes[1]:unknown field “hostpath” in io.k8s.api.core.v1.volume
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

8.3、(重要)

DaemonSet.spec.template.spec.volumes[1].hostPath:
invalid type for io.k8s.api.core.v1.HostPathVolumeSource: (重点是invalid type)
got “string”,expected “map” (得到了string类型,但需要的是map类型)
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
原错误文本:
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
hotstPath: /var/log 这样写是String类型 。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
hostPath为object对象,他下面有两个字段path和type 。文中写成了string类型了。正确的写成下图:符合他说的map。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

=分割线=
参考其他参数来看他所谓的String类型和object类型 (Map)。
String类型后面直接 接“字符串”。 object类型说明他有自己的fields,需要再看其下一层的内容。
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

小结:根据报错英文提示,参考kubectl explain进行排查

九、已在node1节点docker load镜像,但一直ErrImagePull

来源:安装k8s的dashboard组件-
背景:安装dashboard插件,已docker load -i dashboard_2_0_0.tar.gz

docker load -i dashboard_2_0_0.tar.gz

kubectl apply -f kubernetes-dashboard.yaml
kubectl get pods -n kubernetes-dashboard
kubectl describe pods kubernetes-dashboard-977xx -n kubernetes-dashboard

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
describe信息:
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

处理方法
1、delete删除该pod,让其重新尝试拉取。(但错误依旧)
2、vim kubernetes-dashboard.yaml的 imagePullPolicy策略。 将Always(总是拉取镜像)换成 IfNotPresent
(如果有提子,那估计没这种报错)
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

十、cni网络插件有问题, apply yaml文件后,pod的状态一直是containerCreating。

之前虚拟机宕机,再次启动服务器后,calico出问题。
尝试新创建另一个pod (如nginx 、 busybox), 看新建的busybox是否有错 。
通过describe pod报错信息为:networkPlugin cni failed to teardown pod xxx 。 projectcalico.org
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
处理方法
重置calico。重新安装calico.yaml (生产环境慎重操作)

十一、yaml格式,字段缩进错误,导致报错。

来源:statefulset通过存储类动态生成pv 15.30
原错误yaml文本:
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

11.1 在statefulSet.spec下 缺少必须字段selector

validationError(StatefulSet.spec) missing required filed “selector”
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
上图中有两个报错,先处理缺required field报错。 加上下图中selector内容即可。

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

11.2 由于缩进格式问题,出现unknown field spec

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
定位在validationError(statefulSet.spec.volumeClaimTemplates[0].metadata)下,unknown field ‘spec’。 通过kubectl explain查看是要写这个spec字段的。
报错时的格式:
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
metadata和spec是同级的field。 上图中spec缩进了一个空格,
那这样写就会被认为: metadata下有name 、annotations 、spec字段。所以报了unknown field ‘spec’

11.3 同样的再举个错误的写法,他也会报错 unknown field
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
报错信息变成:validationError(statefulSet.spec.volumeClaimTemplates[0])下,unknown field ‘annotation’。报错的逻辑跟上面红字类似。volumeClaimTemplates下本身就不存在annotation字段。 (kubectl explain很有参考价值)0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
正确的:
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

小结:遇过几次unknown field的报错了。总的来说,写错单词,写错位置,缩进格式错误导致根本不存在该field。他都报这个unknown field

十二、node1节点状态notReady处理

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
问题描述:node1节点已经正常运行一段时间,虚拟机内存6GB。在master节点执行apply yaml文件后,容器状态是pending / containerCreating. 通过describe pod节点。 发现这pod竟然调度到了master节点,由于master本身有污点,报错了。(yaml文件写特别的容忍字段)
平常应该调度到node1节点上部署。 (node1 状态notReady后,不在集群里,调度跑到了 ready状态的master1上了。)
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

master节点查看

kubectl describe nodes node1
#不建议这样操作,应该取调整node1节点的硬件参数。
kubectl taint node master1 node-role.kubernetes.io/master-

0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维
0/3 nodes are available: 3 node(s) had taint {node.kubernetes.io/not-ready:,云玩家-K8S&docker,kubernetes,docker,容器,运维

free   Unused memory (MemFree and SwapFree in /proc/meminfo)
===
available
Estimation of how much memory is available for starting new applications, without swapping.  Unlike the data provided by the cache  or  free
fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use

生产环境慎用!文章来源地址https://www.toymoban.com/news/detail-580079.html

#node1节点操作. 重启完后node1节点恢复回ready状态
systemctl restart kubelet
systemctl restart kubelet

到了这里,关于k8s排错随记(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • k8s node NotReady

    k8s node NotReady

    If a Kubernetes node is notReady, it means that the node is not able to perform its intended functions and is not available for scheduling new workloads. There are several reasons why a node may be notReady, including: Network issues: If the node loses its network connectivity, it may become notReady. Resource exhaustion: If the node runs out of resources li

    2023年04月18日
    浏览(13)
  • k8s删除node节点

    如果不做上面的操作的话会导致这个节点上的pod无法启动,具体报错信息为:networkPlugin cni failed to set up pod \\\"alertmanager-main-1_monitoring\\\" network: failed to set bridge ad has an IP address different from 10.244.5.1/24 ,意思是已经集群网络cni已经有一个不同于10.244.51.1/24 的网络地址,所以需要执行

    2024年02月08日
    浏览(13)
  • K8S node磁盘清理

    K8S的部署形式相比传统非容器部署,会消耗更多的磁盘,在运行时可能会把磁盘占满。 这里以使用containerd运行时的K8S node为例,说明磁盘会用到那里了和如何清理磁盘 磁盘清理: 查看是什么占用磁盘多 另外也可以采用Node exporter去持续收集节点的磁盘使用信息,但针对非PV效

    2024年04月14日
    浏览(10)
  • 0/5 nodes are available: 5 Insufficient cpu.

    0/5 nodes are available: 5 Insufficient cpu.

    是因为集群中的CPU资源不够部署当前pod(nodejs 8 cpus)导致的。 注意这边计算的公式是 总CPU - Request CPU 查看 每个node 的CPU 和Request CPU 可以用以下命令 总CPU 已申请CPU 本问题中为什么会有78%的CPU已被申请,主要是因为以下几个pod点用的

    2024年02月11日
    浏览(8)
  • k8s删除node节点的方法

    2024年02月16日
    浏览(13)
  • k8s如何给node添加标签

    k8s集群如果由大量节点组成,可将节点打上对应的标签,然后通过标签进行筛选及查看,更好的进行资源对象的相关选择与匹配 [root@master01 ~]# kubectl label node worker02 region=guanzhou node/worker02 labeled [root@master01 ~]# kubectl get nodes -L region NAME       STATUS   ROLES                  AGE  

    2024年02月07日
    浏览(15)
  • k8s 维护node与驱逐pod

    k8s 维护node与驱逐pod

    1.维护node节点 设置节点状态为不可调度状态,执行以下命令后,节点状态会多出一个SchedulingDisabled的状态,即新建的pod不会往该节点上调度,本身存在node中的pod保持正常运行 kubectl cordon k8s-node01 kubectl get node 2.驱逐pod 在node节点设置为不可调度状态后,就可以开始驱逐本节点

    2024年02月06日
    浏览(12)
  • K8S 设置node最大pod数量

    K8S 设置node最大pod数量

    1.默认情况下k8s 一个node最多起110个pod 2.在node上设置打开文件/var/lib/kubelet/config.yaml 3.修改参数maxPods为指定的值(例子为180) 4.node端重启kubelet: systemctl restart kubelet 5.查看kht125节点上支持的最大pod数量: kubectl describe node kht125 | grep -i \\\"Capacity|Allocatable\\\" -A 6 6.如果以上方法不生效,

    2024年02月07日
    浏览(10)
  • k8s-污点 (Taint)和容忍 (Tolerations)

    k8s-污点 (Taint)和容忍 (Tolerations)

    节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点 Taint 则相反,它使节点能够排斥一类特定的 Pod Taint 和 Toleration 相互配合,可以用来避免 Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些

    2024年01月16日
    浏览(13)
  • 0/1 nodes are available: 1 node(s) didn‘t match Pod‘s node affinity.

    0/1 nodes are available: 1 node(s) didn‘t match Pod‘s node affinity.

    主要是需要确认你的yaml文件中是否有nodeSelector的配置,一般是因为k8s集群中没有相应的node节点匹配导致   这个错误消息表明您正在尝试在不符合Pod的节点亲和性规则的节点上运行Pod。这通常是由于节点选择器或节点亲和性规则设置不正确引起的。 以下是一些可能导致此错误

    2024年02月06日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包