k8s 中mysql 无法访问_故障排查:Kubernetes 中 Pod 无法正常解析域名

k8s service **使用Kubernetes,您无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes为Pods提供自己的IP地址和一组Pod的单个DNS名称,并且可以在它们之间进行负载平衡。 ** 1,ClusterIP 会自动分配一个虚拟ip,支持集群内部的访问 部署文件 apiVersion: v1 kind: Service metadata: name: my-clusterip sp... 阅读详情

问题描述:

最近将 Kubernetes 升级到 1.18.1 版本,不过升级完后,查看工作节点的部分 Pod 无法启动,查看消息全是 connetion timeout 的问题,一看连接超时的地址大部分是以域名方式连接集群内部地址(ClusterIP),少部分是以域名方式连接集群外部地址,通过 IP 进行远程连接的应用倒是没有问题(例如,应用通过 IP 连接 MySQL),由此判断,初步怀疑很可能是 DNS 出现了问题,后来慢慢发现 kube-proxy 中的错误,再定位到 IPVS parseIP Error 错误,再到解决问题。下面是分析及解问题的过程。

问题分析:

部署 DNS 调试工具为了探针是否为 DNS 问题,这里需要提前部署用于测试 DNS 问题的 dnsutils 镜像,该镜像中包含了用于测试 DNS 问题的工具包,非常利于我们分析与发现问题。接下来,我们将在 Kubernetes 中部署这个工具镜像。

部署 DNS 调试工具

1、创建 DNS 工具,镜像自行下载

[root@localhost ~]# vi ndsutils.yaml
apiVersion: v1
kind: Pod
  metadata:
  name: dnsutils
spec:
  containers:
  - name: dnsutils
    image: mydlqclub/dnsutils:1.3
    imagePullPolicy: IfNotPresent
    command: ["sleep","3600"]

应用资源配置清单:

[root@localhost ~]# kubectl create -f ndsutils.yaml -n kube-system

进入容器内部

[root@localhost ~]# kubectl exec -it ndsutils-6f8459c455-nz7sl /bin/sh -n kube-system

使用 ping 命令来分探测是否能够 ping 通集群内部和集群外部的地址:

root@ndsutils-6f8459c455-nz7sl:/#  ping www.baidu.com    ## Ping 集群外部,例如这里 ping 一下百度
ping: bad address 'www.baidu.com'

Ping 集群内部 kube-apiserver 的 Service 地址

root@ndsutils-6f8459c455-nz7sl:/#  ping kubernetes.default 
ping: bad address 'kubernetes.default'

 使用 nslookup 命令查询域名信息

root@ndsutils-6f8459c455-nz7sl:/#  nslookup kubernetes.default 
;; connection timed out; no servers could be reached

直接 Ping 集群内部 kube-apiserver 的 IP 地址

root@ndsutils-6f8459c455-nz7sl:/#  ping 10.96.0.1
PING 10.96.0.1 (10.96.0.1): 56 data bytes
64 bytes from 10.96.0.1: seq=0 ttl=64 time=0.096 ms
64 bytes from 10.96.0.1: seq=1 ttl=64 time=0.050 ms
64 bytes from 10.96.0.1: seq=2 ttl=64 time=0.068 ms

可以观察到两次 ping 域名都不能 ping 通,且使用 nsloopup 分析域名信息时超时。然而,使用 ping kube-apiserver 的 IP 地址 “10.96.0.1” 则可以正常通信,所以,排除网络插件(Flannel、Calico 等)的问题。初步判断,很可能是 CoreDNS 组件的错误引起的某些问题,所以接下来我们测试 CoreDNS 是否正常。

检测 CoreDNS 应用是否正常运行首先,检查 CoreDNS Pod 是否正在运行,如果 READY 为 0,则显示 CoreDNS 组件有问题:

-l:指定根据 label 标签进行查找,筛选有该 label 的 Pod。
-n:指定 CoreDNS 组件部署的 Namespace。

[root@localhost ~]# kubectl get pods -l k8s-app=kube-dns -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
coredns-669f77d7cc-8pkpw   1/1     Running   2          6h5m
coredns-669f77d7cc-jk9wk   1/1     Running   2          6h5m

可也看到 CoreDNS 两个 Pod 均正常启动,所以再查看两个 Pod 中的日志信息,看看有无错误日志:

[root@localhost ~]# for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name); do kubectl logs --namespace=kube-system $p; done
.:53
[INFO] plugin/reload: Running configuration MD5 = 4e235fcc3696966e76816bcd9034ebc7
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
.:53
[INFO] plugin/reload: Running configuration MD5 = 4e235fcc3696966e76816bcd9034ebc7
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b

通过上面信息可以观察到,日志中信息也是正常启动没有问题。再接下来,查看下 CoreDNS 的入口 Service “kube-dns” 是否存在。kube-dns 的 IP 为 10.96.0.10,集群内的 Pod 都是通过该 IP 与 DNS 组件进行交互,查询 DNS 信息。

[root@localhost ~]# kubectl get service -n kube-system | grep kube-dns
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)
kube-dns                    ClusterIP   10.96.0.10      53/UDP,53/TCP,9153/TCP

上面显示 Service “kube-dns” 也存在,但是 Service 是通过 endpoints 和 Pod 进行绑定的,所以看看这个 CoreDNS 的 Endpoints 是否存在,及信息是否正确。

[root@localhost ~]# kubectl get endpoints kube-dns -n kube-system
NAME       ENDPOINTS
kube-dns   10.244.0.21:53,d10.244.2.82:53,10.244.0.21:9153

可以看到 Endpoints 配置也是正常的,正确的与两个 CporeDNS Pod 进行了关联。

经过上面一系列检测 CoreDNS 组件确实是正常运行。接下来,观察 CoreDNS 域名解析日志,进而确定 Pod 中的域名解析请求是否能够正常进入 CoreDNS。

观察 CoreDNS 域名解析日志信息使用 kubectl edit 命令来修改存储于 Kubernetes ConfigMap 中的 CoreDNS 配置参数信息,添加 log 参数,让 CoreDNS 日志中显示域名解析信息。

CoreDNS 配置参数说明:

errors:输出错误信息到控制台。
health:CoreDNS 进行监控检测,检测地址为 http://localhost:8080/health 如果状态为不健康则让 Pod 进行重启。
ready:全部插件已经加载完成时,将通过 endpoints 在 8081 端口返回 HTTP 状态 200。
kubernetes:CoreDNS 将根据 Kubernetes 服务和 pod 的 IP 回复 DNS 查询。
prometheus:是否开启 CoreDNS Metrics 信息接口,如果配置则开启,接口地址为 http://localhost:9153/metrics
forward:任何不在Kubernetes 集群内的域名查询将被转发到预定义的解析器 (/etc/resolv.conf)。
cache:启用缓存,30 秒 TTL。
loop:检测简单的转发循环,如果找到循环则停止 CoreDNS 进程。
reload:监听 CoreDNS 配置,如果配置发生变化则重新加载配置。
loadbalance:DNS 负载均衡器,默认 round_robin。

编辑 coredns 配置

[root@localhost ~]#  kubectl edit configmap coredns -n kube-system
apiVersion: v1
data:
  Corefile: |
    .:53 {
        undefined
        log            #添加log
        errors
        health {
          undefined
          lameduck 5s
          } 
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          undefined
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
          ttl 30
          }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
         }

保存更改后 CoreDNS 会自动重新加载配置信息,不过可能需要等上一两分钟才能将这些更改传播到 CoreDNS Pod。等一段时间后,再次查看 CoreDNS 日志:

[root@localhost ~]# for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name);do kubectl logs --namespace=kube-system $p; done
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] 127.0.0.1:47278 - 55171 "HINFO IN 4940754309314083739.5160468069505858354. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.040844011s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
[INFO] 127.0.0.1:32896 - 49064 "HINFO IN 1027842207973621585.7098421666386159336. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.044098742s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete

可以看到 CoreDNS 已经重新加载了配置,我们再次进入 dnsuitls Pod 中执行 ping 命令

进入 DNSutils Pod 命令行

[root@localhost ~]#  kubectl exec -it ndsutils-6f8459c455-nz7sl /bin/sh -n kube-system

执行 ping 命令

root@ndsutils-6f8459c455-nz7sl:/#  ping www.baidu.com

然后,再次查看 CoreDNS 的日志信息:

[root@localhost ~]#  for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name);do kubectl logs --namespace=kube-system $p; done
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] 127.0.0.1:47278 - 55171 "HINFO IN 4940754309314083739.5160468069505858354. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.040844011s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
[INFO] 127.0.0.1:32896 - 49064 "HINFO IN 1027842207973621585.7098421666386159336. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.044098742s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete

发现和之前没有执行 ping 命令时候一样,没有 DNS 域名解析的日志信息,说明 Pod 执行域名解析时,请求并没有进入 CoreDNS 中。接下来在查看 Pod 中 DNS 配置信息,进而分析问题。

查看 Pod 中的 DNS 配置信息一般 Pod 中的 DNS 策略默认为 ClusterFirst,该参数起到的作用是,优先从 Kubernetes DNS 插件地址读取 DNS 配置。所以,我们正常创建的 Pod 中,DNS 配置 DNS 服务器地址应该指定为 Kubernetes 集群的 DNS 插件 Service 提供的虚拟 IP 地址。

注:其中 DNS 策略(dnsPolicy)支持四种类型

Default: 从 DNS 所在节点继承 DNS 配置,即该 Pod 的 DNS 配置与宿主机完全一致。
ClusterFirst:预先从 Kubenetes 的 DNS 插件中进行 DNS 解析,如果解析不成功,才会使用宿主机的 DNS 进行解析。
ClusterFirstWithHostNet:Pod 是用 HOST 模式启动的(hostnetwork),用 HOST 模式表示 Pod 中的所有容器,都使用宿主机的 /etc/resolv.conf 配置进行 DNS 解析,但如果使用了 HOST 模式,还继续使用 Kubernetes 的 DNS 服务,那就将 dnsPolicy 设置为 ClusterFirstWithHostNet。
None:完全忽略 kubernetes 系统提供的 DNS,以 Pod Spec 中 dnsConfig 配置为主。

为了再分析原因,我们接着进入 dnsutils Pod 中,查看 Pod 中 DNS 配置文件 /etc/resolv.conf 配置参数是否正确

resolv.conf 配置参数说明:
search: 指明域名查询顺序。
nameserver: 指定 DNS 服务器的 IP 地址,可以配置多个 nameserver。

进入 dnsutils Pod 内部 sh 命令行

[root@localhost ~]#  kubectl exec -it ndsutils-6f8459c455-nz7sl /bin/sh -n kube-system

查看 resolv.conf 配置文件

root@ndsutils-6f8459c455-nz7sl:/#  cat /etc/resolv.conf
nameserver 10.96.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

可以看到 Pod 内部的 resolv.conf 内容,其中 nameserver 指定 DNS 解析服务器 IP 为 “10.96.0.10” ,这个 IP 地址正是本人 Kubernetes 集群 CoreDNS 的 Service “kube-dns” 的 cluterIP,说明当 Pod 内部进行域名解析时,确实是将查询请求发送到 Service “kube-dns” 提供的虚拟 IP 进行域名解析。

那么,既然 Pod 中 DNS 配置文件没问题,且 CoreDNS 也没问题,会不会是 Pod 本身域名解析不正常呢?或者 Service “kube-dns” 是否能够正常转发域名解析请求到 CoreDNS Pod 中?

当然,猜想是没有用的,进行一下测试来观察问题到底出在哪里。

进行观察来定位问题所在上面怀疑是 Pod 本身解析域名有问题,不能正常解析域名。或者 Pod 没问题,但是请求域名解析时将请求发送到 Service “kube-dns” 后不能正常转发请求到 CoreDNS Pod。 为了验证这两点,我们可以修改 Pod 中的 /etc/resolv.conf 配置来进行测试验证。

修改 resolv.conf 中 DNS 解析请求地址为 阿里云 DNS 服务器地址,然后执行 ping 命令验证是否为 Pod 解析域名是否有问题:

进入 dnsutils Pod 内部 sh 命令行

[root@localhost ~]#  kubectl exec -it ndsutils-6f8459c455-nz7sl /bin/sh -n kube-system

 编辑 /etc/resolv.conf 文件,修改 nameserver 参数为阿里云提供的 DNS 服务器地址

root@ndsutils-6f8459c455-nz7sl:/#  vi /etc/resolv.conf
nameserver 223.5.5.5
#nameserver 10.96.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

修改完后再进行 ping 命令测试,看看是否能够解析 www.mydlq.club 网址

root@ndsutils-6f8459c455-nz7sl:/#  ping www.mydlq.club
PING www.mydlq.club (140.143.8.181) 56(84) bytes of data.
64 bytes from 140.143.8.181 (140.143.8.181): icmp_seq=1 ttl=128 time=9.70 ms
64 bytes from 140.143.8.181 (140.143.8.181): icmp_seq=2 ttl=128 time=9.21 ms

上面可也观察到 Pod 中更换 DNS 服务器地址后,域名解析正常,说明 Pod 本身域名解析是没有问题的。

接下来再修改 resolv.conf 中 DNS 解析请求地址为 CoreDNS Pod 的 IP 地址,这样让 Pod 直接连接 CoreDNS Pod 的 IP,而不通过 Service 进行转发,再进行 ping 命令测试,进而判断 Service kube-dns 是否能够正常转发请求到 CoreDNS Pod 的问题:

查看 CoreDNS Pod 的 IP 地址

[root@localhost ~]# kubectl get pods -n kube-system -o wide | grep coredns
coredns-669f77d7cc-rss5f     1/1     Running   0     10.244.2.155   k8s-node-2-13
coredns-669f77d7cc-rt8l6     1/1     Running   0     10.244.1.163   k8s-node-2-12

进入 dnsutils Pod 内部 sh 命令行

[root@localhost ~]# kubectl exec -it dnsutils /bin/sh -n kube-system

编辑 /etc/resolv.conf 文件,修改 nameserver 参数为阿里云提供的 DNS 服务器地址

root@ndsutils-6f8459c455-nz7sl:/#  vi /etc/resolv.conf
nameserver 10.244.2.155
nameserver 10.244.1.163
#nameserver 10.96.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

修改完后再进行 ping 命令测试,看看是否能够解析 www.mydlq.club 网址

root@ndsutils-6f8459c455-nz7sl:/#  ping www.mydlq.club
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=6.054 ms
64 bytes from 39.156.66.18: seq=1 ttl=127 time=4.678 ms

观察 CoreDNS 日志信息,查看有无域名解析相关日志

[root@localhost ~]# for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name); \
do kubectl logs --namespace=kube-system $p; done
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] 127.0.0.1:47278 - 55171 "HINFO IN 4940754309314083739.5160468069505858354. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.040844011s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
[INFO] 10.244.1.162:40261 - 21083 "AAAA IN www.mydlq.club.kube-system.svc.cluster.local. udp 62 false 512" NXDOMAIN qr,aa,rd 155 0.000398875s
[INFO] 10.244.1.162:40261 - 20812 "A IN www.mydlq.club.kube-system.svc.cluster.local. udp 62 false 512" NXDOMAIN qr,aa,rd 155 0.000505793s
[INFO] 10.244.1.162:55066 - 53460 "AAAA IN www.mydlq.club.svc.cluster.local. udp 50 false 512" NXDOMAIN qr,aa,rd 143 0.000215384s
[INFO] 10.244.1.162:55066 - 53239 "A IN www.mydlq.club.svc.cluster.local. udp 50 false 512" NXDOMAIN qr,aa,rd 143 0.000267642s
.:53
[INFO] plugin/reload: Running configuration MD5 = 6434d0912b39645ed0707a3569fd69dc
CoreDNS-1.6.7
linux/amd64, go1.13.6, da7f65b
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
[INFO] 127.0.0.1:32896 - 49064 "HINFO IN 1027842207973621585.7098421666386159336. udp 57 false 512" NXDOMAIN qr,rd,ra 57 0.044098742s
[INFO] plugin/reload: Running configuration MD5 = a4809ab99f6713c362194263016e6fac
[INFO] Reloading complete
[INFO] 10.244.1.162:40261 - 21083 "AAAA IN www.mydlq.club.kube-system.svc.cluster.local. udp 62 false 512" NXDOMAIN qr,aa,rd 155 0.000217299s
[INFO] 10.244.1.162:40261 - 20812 "A IN www.mydlq.club.kube-system.svc.cluster.local. udp 62 false 512" NXDOMAIN qr,aa,rd 155 0.000264552s
[INFO] 10.244.1.162:55066 - 53460 "AAAA IN www.mydlq.club.svc.cluster.local. udp 50 false 512" NXDOMAIN qr,aa,rd 143 0.000144795s
[INFO] 10.244.1.162:55066 - 53239 "A IN www.mydlq.club.svc.cluster.local. udp 50 false 512" NXDOMAIN qr,aa,rd 143 0.000221163s

经过上面两个测试,已经可以得知,如果 Pod DNS 配置中直接修改 DNS 服务器地址为 CoreDNS Pod 的 IP 地址,DNS 解析确实没有问题,能够正常解析。不过,正常的情况下 Pod 中 DNS 配置的服务器地址一般是 CoreDNS 的 Service 地址,不直接绑定 Pod IP(因为 Pod 每次重启 IP 都会发生变化)。 所以问题找到了,正是在 Pod 向 CoreDNS 的 Service “kube-dns” 进行域名解析请求转发时,出现了问题,一般 Service 的问题都跟 Kube-proxy 组件有关,接下来观察该组件是否存在问题。

分析 Kube-Proxy 是否存在问题观察 Kube-proxy 的日志,查看是否存在问题

查看 kube-proxy Pod 列表

[root@localhost ~]# kubectl get pods -n kube-system | grep kube-proxy
kube-proxy-6kdj2          1/1     Running   3          9h
kube-proxy-lw2q6          1/1     Running   3          9h
kube-proxy-mftlt          1/1     Running   3          9h

选择一个 kube-proxy Pod,查看最后 5 条日志内容

[root@localhost ~]# kubectl logs kube-proxy-6kdj2 --tail=5  -n kube-system

E0326 15:20:23.159364  1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0]

E0326 15:20:23.159388  1 proxier.go:1192] Failed to sync endpoint for service: 10.8.0.10:53/UPD, err: parseIP Error ip=[10 96 0 16 0 0 0 0 0 0 0 0 0 0 0 0]

E0326 15:20:23.159479  1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0]

E0326 15:20:23.159501  1 proxier.go:1192] Failed to sync endpoint for service: 10.8.0.10:53/TCP, err: parseIP Error ip=[10 96 0 16 0 0 0 0 0 0 0 0 0 0 0 0]

E0326 15:20:23.159595  1 proxier.go:1950] Failed to list IPVS destinations, error: parseIP Error ip=[10 96 0 10 0 0 0 0 0 0 0 0 0 0 0 0]

通过 kube-proxy Pod 的日志可以看到,里面有很多 Error 级别的日志信息,根据关键字 IPVS、parseIP Error 可知,可能是由于 IPVS 模块对 IP 进行格式化导致出现问题。

因为这个问题是升级到 Kubernetes 1.18 版本才出现的,所以去 Kubernetes GitHub 查看相关 issues,发现有人在升级 Kubernetes 版本到 1.18 后,也遇见了相同的问题,经过 issue 中 Kubernetes 维护人员讨论,分析出原因可能为新版 Kubernetes 使用的 IPVS 模块是比较新的,需要系统内核版本支持,本人使用的是 CentOS 系统,内核版本为 3.10,里面的 IPVS 模块比较老旧,缺少新版 Kubernetes IPVS 所需的依赖。

根据该 issue 讨论结果,解决该问题的办法是,更新内核为新的版本。

注:该 issues 地址为:https://github.com/kubernetes/ ... 89520

解决问题:

升级系统内核版本升级 Kubernetes 集群各个节点的 CentOS 系统内核版本:

载入公钥

[root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

 安装 ELRepo 最新版本

[root@localhost ~]# yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

列出可以使用的 kernel 包版本

[root@localhost ~]# yum list available --disablerepo=* --enablerepo=elrepo-kernel

安装指定的 kernel 版本

[root@localhost ~]#  yum install -y kernel-lt-4.4.218-1.el7.elrepo --enablerepo=elrepo-kernel

查看系统可用内核

[root@localhost ~]#  cat /boot/grub2/grub.cfg | grep menuentry
menuentry 'CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)' --class centos (略)
menuentry 'CentOS Linux (4.4.218-1.el7.elrepo.x86_64) 7 (Core)' --class centos ...(略)

设置开机从新内核启动

[root@localhost ~]#  grub2-set-default "CentOS Linux (4.4.218-1.el7.elrepo.x86_64) 7 (Core)"

查看内核启动项

[root@localhost ~]#  grub2-editenv list
saved_entry=CentOS Linux (4.4.218-1.el7.elrepo.x86_64) 7 (Core)

重启系统使内核生效

[root@localhost ~]#  reboot

启动完成查看内核版本是否更新

[root@localhost ~]#  uname -r
4.4.218-1.el7.elrepo.x86_64

测试 Pod 中 DNS 是否能够正常解析进入 Pod 内部使用 ping 命令测试 DNS 是否能正常解析

进入 dnsutils Pod 内部 sh 命令行

[root@localhost ~]#  kubectl exec -it dnsutils /bin/sh -n kube-system

Ping 集群外部,例如这里 ping 一下百度

root@ndsutils-6f8459c455-nz7sl:/#  ping www.baidu.com
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=127 time=7.20 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=127 time=6.60 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=127 time=6.38 ms

Ping 集群内部 kube-api 的 Service 地址

root@ndsutils-6f8459c455-nz7sl:/#  ping kubernetes.default
64 bytes from kubernetes.default.svc.cluster.local (10.96.0.1): icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from kubernetes.default.svc.cluster.local (10.96.0.1): icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from kubernetes.default.svc.cluster.local (10.96.0.1): icmp_seq=3 ttl=64 time=0.064 ms

可以看到 Pod 中的域名解析已经恢复正常。
 

linux命令行输入nslookup 某某域名,报错:;; connection timed out; no servers could be reached的解决办法 linux命令行输入nslookup 某某域名,报错:;; connection timed out; no servers could be reached的解决办法 阅读详情

相关推荐

Kubernetes生产实战:Pod、Service与故障定位核心原理

Kubernetes不是高级Docker,而是面向分布式系统概率性生存的声明式编排平台。其核心在于通过期望状态(Desired State)驱动控制循环,以Pod为共享网络与存储的命运共同体单元,以Service为服务发现与流量调度的抽象层。理解Pod生命周期原子性、ClusterIP的iptables/IPVS实现机制、以及liveness/readiness探针协同逻辑,是解决滚动更新中断、Terminating卡顿、Service不通等高频问题的技术基础。本文聚焦真实运维现场的五个关键问题,结合etc

weixin_34200628的博客 449

DNS故障分析优化

DNS 解析时快时慢,该怎么办,看完此篇博客,你便有了清晰的答案!

今夜不设防,让我们猎个痛快! 8436

Docker与K8S入门指南:从容器部署到监控排查的完整路径

容器化部署已成为现代运维和云原生技术的核心实践,它通过将应用及其依赖环境打包成标准镜像,从根本上解决了传统部署中环境不一致、迁移困难等痛点。作为容器化生态的两大基石,Docker提供了轻量级的容器运行和镜像管理能力,而Kubernetes(K8S)则负责在多机环境下对容器进行自动化调度、弹性伸缩与故障恢复。理解二者的分工与协作,是掌握云原生运维的第一步。本文从镜像、容器、Pod、Service等基础概念入手,梳理了从单机Docker到集群K8S的进阶路径,并结合MySQL、Redis等常见中间件的部署案例,

weixin_34161032的博客 539

用Linux搭建DNS服务器报错:connection timed out; no servers could be reached

搭建完DNS服务器,linux客户机测试时报错:connection timed out;没有的话,指定服务器的IP地址 为 客户机的DNS地址。翻译过来就是连接超时;无法访问任何服务器。方法二:查看是否配置DNS服务器地址。最后测试:nslookup。可以解析出来,即为正确。

m0_70800810的博客 5400

K8s StatefulSet Pod域名访问:Headless Service与DNS解析原理实战

在Kubernetes中,有状态应用(如etcd、数据库)对网络标识的稳定性有着硬性要求,而StatefulSet与Headless Service的组合正是解决这一难题的关键。StatefulSet为每个Pod分配固定序号和稳定主机名,Headless Service(clusterIP为None)则通过DNS机制为这些Pod提供无需负载均衡的A记录和SRV记录,实现节点间的精准寻址。这套机制不仅支持Pod重建后域名不变,还能通过DNS自发现辅助集群自组网,广泛应用于分布式系统的节点间通信、服务发现以及跨

weixin_33563728的博客 168

配置Linux下DNS服务器connect错误解决办法

配置好DNS正向和反向区域文件后,使用host命令测试报错连接服务器超时!

10wlan无法启动1053_故障排查:Kubernetes 中 Pod 无法正常解析域名

作者:超级小布丁 (授权转载)来源:http://www.mydlq.club/article/78/目录[-]一、问题描述二、部署 DNS 调试工具1、创建 DNS 工具 Pod 部署文件2、通过 Kubectl 工具部署 NDS 工具镜像三、问题分析1、进入 DNS 工具 Pod 的命令行2、通过 Ping 和 Nsloopup 命令测试3、检...

weixin_42361635的博客 500

数据安全实战技能解析:从加密攻防到数字水印的竞赛指南

数据安全是信息安全领域的核心,其基础在于密码学与信息隐藏技术。密码学通过加密算法(如AES、RSA)和哈希函数,保障数据的机密性与完整性,其原理涉及对称/非对称加密、工作模式及密钥管理。数字水印技术则基于信号处理(如DCT/DWT变换),将信息嵌入多媒体载体,用于版权保护与溯源。这些技术的价值在于为数据全生命周期提供“防泄漏”与“可追溯”的解决方案,广泛应用于企业数据治理、合规审计和**数据防泄漏(DLP)** 系统。本文以一场贴近实战的**数据安全职业技能竞赛**为切入点,深入剖析如何运用密码分析、磁盘取

weixin_34314962的博客 402

Docker与K8s:为什么容器化之后还要学Kubernetes?

容器技术通过标准化打包解决了应用跨环境运行的问题,Docker让开发者能够将应用与依赖环境一起交付,实现“一次构建,到处运行”。但面对生产环境中的多节点集群、高并发流量和持续交付需求,单机容器管理已无法满足系统的高可用性。Kubernetes作为容器编排平台,基于声明式API和期望状态模型,提供跨节点的调度编排、故障自动恢复、弹性伸缩、服务发现与滚动更新等能力,将“容器能跑”升级为“应用集群稳定自动可控地运行”。无论是微服务架构落地,还是DevOps实践,K8s都已成为基础设施层的关键技术。本文从Docke

weixin_33766168的博客 463

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南)

本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。

d3e4f的博客 337

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6868

K8S常见故障及解决方法

问题1:K8S集群服务访问失败?原因分析:证书不能被识别,其原因为:自定义证书,过期等。解决方法:更新证书即可。问题2:K8S集群服务访问失败?curl:(7)Failedconne...

u012516914的专栏 1万+

ADS 使用调整器动态调参教程(Tuning)

ADS动态调参教程

weixin_42845306的博客 1万+

Kubernetes DNS 实战指南:CoreDNS 解析原理与故障排查

DNS 是 Kubernetes 服务发现的基石,其本质是将 Service 名称(如 nginx-service)通过分层解析机制映射为 ClusterIP 地址。该过程依赖 /etc/resolv.conf 配置、iptables/IPVS 流量重定向、CoreDNS 插件链(kubernetes/forward/cache)协同工作。技术价值在于支撑 Ingress 路由、Helm 模板变量、Operator 自注册等关键能力。典型应用场景包括跨命名空间服务调用、外部域名安全解析、IPv6 双栈支持及

weixin_30825199的博客 368

基于STM32F1XX 、HAL库的BH1745NUC-E2环境光传感器驱动应用C语言程序设计

printf("BH1745制造商ID: 0x%02X\r\n", BH1745_ReadManufacturerID(&hbh1745));#define BH1745_ADDR_HIGH 0x39 // ADDR引脚接VDD。#define BH1745_ADDR_LOW 0x38 // ADDR引脚接地。= 0xE0) // BH1745制造商ID为0xE0。// 清除RGBC测量使能位。printf("BH1745初始化失败\r\n");

PP_Cottage的博客 281

制作你自己的yolov5数据集并进行训练

项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations .

年少的勇气已经用完,剩下的就是三思而后行 1万+

面试宝典(纯享版)-- k8s篇

答案自动化运维:自动扩缩容、滚动更新、自愈(如 Pod 故障重启)。声明式配置:通过 YAML/JSON 定义应用终态(如 Deployment、Service)。资源隔离与优化:通过命名空间(Namespace)和资源配额(Resource Quota)管理多租户资源。跨环境一致性:支持混合云、边缘计算等复杂部署场景。

技术驱动,分享互联网软件的那些事儿。关注我,获取有深度、有温度的技术内容,开启你的技术之旅。 2273

YOLOv5/v7/v8首发革新改进——轻巧、创新的LADH检测头

本文介绍了一种原创改进的轻量化非对称多级压缩LADH检测头,该检测头能够实现即插即用,并在YOLOv5/v7/v8检测器中取得了显著的性能提升。本文将介绍一种原创改进的轻量级非对称多级压缩LADH(Lightweight Asymmetric Dual-Head)检测头,该检测头能够实现即插即用,并显著提升YOLO检测器的性能。因此,我们提出了一种非对称多级压缩的方法,即对不同类别的检测头采用不同的压缩比例。然而,为了进一步提高YOLO的性能,我们进行了一项原创改进,设计了一种轻巧且创新的LADH检测头。

IpyVariable的博客 2726

Kubernetes核心组件、Pod与网络模型深度解析与实战指南

容器编排是现代云原生应用部署与管理的核心技术,它通过自动化容器的调度、网络和存储管理,解决了微服务架构下应用部署复杂、扩展性差的问题。其核心原理在于将应用及其依赖封装为轻量级、可移植的容器,并由编排系统统一管理生命周期。这一技术为分布式系统带来了声明式配置、弹性伸缩和高可用性等核心价值,广泛应用于微服务治理、持续交付和混合云场景。在众多编排平台中,Kubernetes凭借其强大的**核心组件**架构和灵活的**Pod**抽象成为事实标准。理解其控制平面组件(如API Server、etcd)与工作节点组件(

weixin_30701575的博客 310

SAC-IA算法点云粗配准

SAC-IA(Sample Consensus Initial Alignment)是PCL库中的一种初始点云配准算法,它使用特征匹配和RANSAC(随机抽样一致性)框架来估计两个点云之间的初始刚性变换。其目标是通过特征描述符找到一组可靠的匹配点对,并使用这些点对估计初始对齐的变换矩阵。

twnkie的博客 1445

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

centos7内核默认包含在操作系统镜像中_故障排查:Kubernetes 中 Pod 无法正常解析域名...

作者:超级小布丁 (授权转载)来源:http://www.mydlq.club/article/78/目录[-]一、问题描述二、部署 DNS 调试工具1、创建 DNS 工具 Pod 部署文件2、通过 Kubectl 工具部署 NDS 工具镜像三、问题分析1、进入 DNS 工具 Pod 的命令行2、通过 Ping 和 Nsloopup 命令测试3、检...

weixin_39898011的博客 280

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深入解析Kubernetes StatefulSet拓扑状态:原理、实战与故障排查

在容器编排领域,有状态应用的部署与管理是核心挑战之一。Kubernetes通过StatefulSet控制器为这类应用提供了身份与秩序保障,其关键在于拓扑状态机制。拓扑状态定义了Pod的稳定网络标识与有序生命周期,通过Headless Service为每个Pod提供唯一、持久的DNS域名,解决了分布式系统中服务发现与成员身份识别的基础问题。在技术价值层面,这种机制确保了如ZooKeeper、MySQL等集群化应用在扩缩容、故障恢复时,能维持稳定的网络端点与启动顺序,是实现数据一致性、高可用性的工程基石。应用场

weixin_30225755的博客 215

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

k8s-152习题【内含k8s、docker、prometheus、ELK、Jenkins等面试内容】

常用资源介绍:Pod、最早的控制器RS、deployment(RS的升级)、daemonSet、statefulSet、service、IngressIngress-controller、configmap、secret 、serviceAccount(服务账号)Pod:运行服务器部署中的最小工作单元,pod里运行服务的容器,可以运行一个或者多个容器,一般运行一个一个容器。RS控制器/ReplicaSet,是Pod的控制器,维护pod的副本数,更新pod时候,手动删除pod才能更新。

Nightwish5的博客 423

K8S日常故障处理集锦

问题1:K8S集群服务访问失败? 原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Failed connect to 10.103.22.158:3000; Connection refused 原因分析:端口映射错误,服务正常工作,但不能提供服务。 解决...

WinJay 204

MySQL在Kubernetes上的高可用实现

MySQL在Kubernetes上的高可用实现

m0_60259116的博客 1981
上一篇: node节点NotReady
下一篇: Shell数组:Shell数组定义以及获取数组元素
Jerry00713
博客等级 码龄11年 273粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值