searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

k8s之应用故障(应用异常)

2024-10-18 09:19:46
67
0

1.k8sservice访问异常的常见问题

1).service没有正确匹配到后端的pod标签

(1).service匹配的label标签没有匹配上后面的pod(导致访问不到界面)

(2).service匹配的label标签匹配到后面其他错误的pod(导致访问的别的界面)

2).kube-proxy服务故障导致service无法提供服务

kube-proxy是什么:

Service为一组相同的pod提供了统一的入口,起到负载均衡的效果。Service具有这样的功能,真是kube-proxy的功劳,kube-proxy是一个代理,安装在每一个k8s节点,当我们暴露一个service的时候,kube-proxy会在iptables中追加一些规则,为我们实现路由与负载均衡的功能。

kube-proxy的两种转发规则: iptables(DNAT规则转发到后台pod)ipvs

故障现象:

service的标签选择器正常,pod也正常,但是访问serviceip时,还是代理不到pod,就需要检查kube-proxy组件。

解决思路:

(1).查看相应node节点kube-proxy服务是否正常。

(2).查看相应node节点上kube-proxy相关日志,有没有报错,资源不足,如:cpu/内存/磁盘

(3)查看相应node节点上系统日志中有没有关于kube-proxy的日志报错.

#cat /var/log/messages[kube-proxy] |grep kube-proxykubectl logs pod|grep kube-proxy

解决方法:

(1).扩容节点资源,增加服务器或者虚拟机的cpu和内存。

(2).修改kube-proxyyaml中的limit资源限制,限制可使用的cpu和内存。

 

2.k8spod删除失败的解决

故障现象:在k8s中,可能会产生很多垃圾pod,也就是有些pod虽然是running状态,可是其所调度到的k8snode节点已经从k8s集群删除了,但是pod还是在这个node上,没有被驱逐,针对这种情况就需要把pod删除。

故障问题:删除pod时候,pod一直处于terminate状态,很长时间无法删除。

解决方案:

可以通过如下方法添加参数强制删除pod,–force --grace-period=0, grace-period表示过渡存活期,默认30s,在删除pod之前运行pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod.

#kubectl delete pod pod--force --grace-period=0

 

3.k8s中命名空间的强制删除

虽然pod可以强制删除,但是可能命名空间还是处于terminate状态,无法删除。

解决方法:

(1).强制删除命名空间

#kubectl delete ns 命名空间 --force --grace-period=0

(2).获取namespacejson文件,删除相关内容

#kubectl get ns 命名空间 -o json > /root/xx.json

#vim /root/xx.json

删除spec下的”finalizers:[ 和”kubernetes” 内容

调用api-server接口进行删除:

打开一个新的终端,或者把下面的命令放到后台执行: # kubectl proxy --port=8081

调用接口删除:

#curl -k -H Content-Type: application/json-X PUT --data-binary @xx.json

127.0.0.1:8081/api/v1/namespaces/命名空间名/finalize

如果kubectl get ns 命名空间 -o json的结果中”spec:{}中为空了,但是metadata部分还有finalizers字段,需要将里面相关finalizers的内容也删除。

#kubectl edit ns 命名空间

进去后,直接删除相关finalizers的内容即可,保存退出后,出入Terminating状态的ns便没有了。

 

4.k8s中跨主机连接不通(podpod

1).pause容器概念:

Pause容器,又叫Infra容器,Pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含一个或者多个紧密相关的用户业务容器。

2).pause容器的作用:

(1).pod里的多个业务容器共享pause容器的ip,共享pause容器挂载的volume,这样简化了业务容器之间的通信问题,也解决了容器之间的问题件共享问题。

(2).pod中的容器共享同一个ip地址。故同一个podcontainer可以做到直接通过localhost直接通信。

3).同一个节点多个pod通信机制:

pause容器启动之前,会为容器创建虚拟一对ethernet接口,一个保留在宿主机vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,从另一端出来。任何pod连接到该网桥的pod都可以收发数据。

4).跨节点pod通信机制:

跨节点pod通信,相当于创建一个整个集群公用的 [网桥] ,然后把集群中所有的pod连接起来,就可以通信了。

5).跨主机连接不通(podpod)的故障排查方法:

(1).排查宿主机网络是否正常,在宿主机上ping baidu.com,tcpdump抓包看是否丢包.

(2).查看k8s中的网络插件是否正常,查看网络组件calicoflannel的日志。

0条评论
0 / 1000
Liqingsen
7文章数
0粉丝数
Liqingsen
7 文章 | 0 粉丝
原创

k8s之应用故障(应用异常)

2024-10-18 09:19:46
67
0

1.k8sservice访问异常的常见问题

1).service没有正确匹配到后端的pod标签

(1).service匹配的label标签没有匹配上后面的pod(导致访问不到界面)

(2).service匹配的label标签匹配到后面其他错误的pod(导致访问的别的界面)

2).kube-proxy服务故障导致service无法提供服务

kube-proxy是什么:

Service为一组相同的pod提供了统一的入口,起到负载均衡的效果。Service具有这样的功能,真是kube-proxy的功劳,kube-proxy是一个代理,安装在每一个k8s节点,当我们暴露一个service的时候,kube-proxy会在iptables中追加一些规则,为我们实现路由与负载均衡的功能。

kube-proxy的两种转发规则: iptables(DNAT规则转发到后台pod)ipvs

故障现象:

service的标签选择器正常,pod也正常,但是访问serviceip时,还是代理不到pod,就需要检查kube-proxy组件。

解决思路:

(1).查看相应node节点kube-proxy服务是否正常。

(2).查看相应node节点上kube-proxy相关日志,有没有报错,资源不足,如:cpu/内存/磁盘

(3)查看相应node节点上系统日志中有没有关于kube-proxy的日志报错.

#cat /var/log/messages[kube-proxy] |grep kube-proxykubectl logs pod|grep kube-proxy

解决方法:

(1).扩容节点资源,增加服务器或者虚拟机的cpu和内存。

(2).修改kube-proxyyaml中的limit资源限制,限制可使用的cpu和内存。

 

2.k8spod删除失败的解决

故障现象:在k8s中,可能会产生很多垃圾pod,也就是有些pod虽然是running状态,可是其所调度到的k8snode节点已经从k8s集群删除了,但是pod还是在这个node上,没有被驱逐,针对这种情况就需要把pod删除。

故障问题:删除pod时候,pod一直处于terminate状态,很长时间无法删除。

解决方案:

可以通过如下方法添加参数强制删除pod,–force --grace-period=0, grace-period表示过渡存活期,默认30s,在删除pod之前运行pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod.

#kubectl delete pod pod--force --grace-period=0

 

3.k8s中命名空间的强制删除

虽然pod可以强制删除,但是可能命名空间还是处于terminate状态,无法删除。

解决方法:

(1).强制删除命名空间

#kubectl delete ns 命名空间 --force --grace-period=0

(2).获取namespacejson文件,删除相关内容

#kubectl get ns 命名空间 -o json > /root/xx.json

#vim /root/xx.json

删除spec下的”finalizers:[ 和”kubernetes” 内容

调用api-server接口进行删除:

打开一个新的终端,或者把下面的命令放到后台执行: # kubectl proxy --port=8081

调用接口删除:

#curl -k -H Content-Type: application/json-X PUT --data-binary @xx.json

127.0.0.1:8081/api/v1/namespaces/命名空间名/finalize

如果kubectl get ns 命名空间 -o json的结果中”spec:{}中为空了,但是metadata部分还有finalizers字段,需要将里面相关finalizers的内容也删除。

#kubectl edit ns 命名空间

进去后,直接删除相关finalizers的内容即可,保存退出后,出入Terminating状态的ns便没有了。

 

4.k8s中跨主机连接不通(podpod

1).pause容器概念:

Pause容器,又叫Infra容器,Pause容器对应的镜像属于k8s平台的一部分,除了pause容器,每个pod还包含一个或者多个紧密相关的用户业务容器。

2).pause容器的作用:

(1).pod里的多个业务容器共享pause容器的ip,共享pause容器挂载的volume,这样简化了业务容器之间的通信问题,也解决了容器之间的问题件共享问题。

(2).pod中的容器共享同一个ip地址。故同一个podcontainer可以做到直接通过localhost直接通信。

3).同一个节点多个pod通信机制:

pause容器启动之前,会为容器创建虚拟一对ethernet接口,一个保留在宿主机vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,从另一端出来。任何pod连接到该网桥的pod都可以收发数据。

4).跨节点pod通信机制:

跨节点pod通信,相当于创建一个整个集群公用的 [网桥] ,然后把集群中所有的pod连接起来,就可以通信了。

5).跨主机连接不通(podpod)的故障排查方法:

(1).排查宿主机网络是否正常,在宿主机上ping baidu.com,tcpdump抓包看是否丢包.

(2).查看k8s中的网络插件是否正常,查看网络组件calicoflannel的日志。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0