跳到主要内容

dns

故障类型 我遇到的几次k8s集群的dns问题,大致分为几种:

网络插件的pod挂掉了 服务是双网卡的情况 服务器自身的网络问题,比如路由 解决办法 1、确认宿主机的网络访问情况,dns解析。因为pod一般是复制宿主机信息。 ping 114.114.114.114 cat /etc/resolv centos7 可以在网卡配置dns覆盖resolv的配置,确认网卡中的dns删除掉。 2、确认服务器路由,都使用同一个默认网关 route -n netstat -r 3、查看集群的网络组建 flannel和dns,确认pod运行状态正常 kubectl get pod -n kube-system -o wide |grep flannel kubectl get pod -n kube-system |grep dns

4、如果以上都正常。 重启服务器网络 systemctl restart network 重启docker,清空exit状态的pod systemc restart docker 删除所有为stop状态的容器: docker container prune 重启kubelet systemctl restart kubelet

5、终极杀招 重启服务器 reboot

测试脚本 busybox 部署一个DaemonSet的busybox运行在每个节点上

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: busybox-test
namespace: default
spec:
selector:
matchLabels:
name: busybox-test
template:
metadata:
labels:
name: busybox-test
spec:
containers:
- name: app
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
terminationGracePeriodSeconds: 30

在kubectl服务器上执行脚本测试

#!/bin/bash

for i in `kubectl get pods -o wide |grep busy |awk '{print $1}'`
do
echo "开始执行测试.....$i"

PODNAME=$i
NODENAME=`kubectl get pods -o wide |grep $i | awk '{print $7}'`

echo "正在执行测试主机名为$NODENAME,POD名为$PODNAME"

kubectl exec $PODNAME -- nslookup my-nginx |grep -v 'find'

echo "准备下一次测试"
sleep 5
done