DNS 是每个体系结构中最敏感和最重要的服务之一。应用程序、微服务、服务、主机……如今,万物互联,并不一定意味着只用于内部服务,它也可以应用于外部服务。DNS 负责解析域名并关联内部或外部服务和 PodIP,维护 Pod 的 DNS 记录是一项关键任务,尤其是涉及到临时 Pod 时,IP 地址可以在没有警告的情况下随时更改。
从 Kubernetes 1.11 开始,在基于 DNS 的服务发现达到一般可用性 (GA) 之后,引入了CoreDNS 作为 kube-dns 的替代方案,CoreDNS 到目前为止一直是 Kubernetes 集群事实上的 DNS 引擎。顾名思义,CoreDNS 是一种用 Go 编写的 DNS 服务,因其灵活性而被广泛采用。
谈到 kube-DNS 附加组件,它是以单个 pod 中三个不同容器的形式提供整个 DNS 功能: kubedns、 dnsmasq 和 sidecar:
kubedns:这是 Kubernetes 的 SkyDNS 实现,它负责 Kubernetes 集群内的 DNS 解析,它监视 Kubernetes API 并提供适当的 DNS 记录;
dnsmasq: 为 SkyDNS 解析请求提供 DNS 缓存机制;
sidecar:此容器导出指标并对 DNS 服务执行健康检查。
CoreDNS 解决了 Kube-dns 当时带来的一些问题,Dnsmasq 引入了一些安全漏洞问题,导致在过去需要 Kubernetes 安全补丁。此外,CoreDNS 在一个容器中而不是 kube-dns 中需要的三个容器中提供所有功能,解决了 kube-dns 中外部服务的存根域的一些其他问题。CoreDNS 在 9153 端口上公开其指标端点,并且可以从 SDN 网络中的 Pod 或主机节点网络访问它。
# kubectl get ep kube-dns -n kube-system -o json |jq -r ".subsets"[{"addresses":[{"ip":"192.169.107.100","nodeName":"k8s-control-2.lab.example.com","targetRef":{"kind":"Pod","name":"coredns-565d847f94-rz4b6","namespace":"kube-system","uid":"c1b62754-4740-49ca-b506-3f40fb681778"}},{"ip":"192.169.203.46","nodeName":"k8s-control-3.lab.example.com","targetRef":{"kind":"Pod","name":"coredns-565d847f94-8xqxg","namespace":"kube-system","uid":"bec3ca63-f09a-4007-82e9-0e147e8587de"}}],"ports":[{"name":"dns-tcp","port":53,"protocol":"TCP"},{"name":"dns","port":53,"protocol":"UDP"},{"name":"metrics","port":9153,"protocol":"TCP"}]}]
二、如何在 Kubernetes 中监控 CoreDNS?
正如刚刚那样,CoreDNS 已经被检测并在每个 CoreDNS Pod 的端口 9153 上公开了 /metrics 端点。
访问这个 /metrics 端点很简单,只需运行 curl 并立即开始提取 CoreDNS 指标。
① 手动访问端点
知道运行 CoreDNS 的端点或 IP 后,请尝试访问 9153 端口:
# curl http://192.169.203.46:9153/metrics
# HELP coredns_build_info A metric with a constant '1' value labeled by version, revision, and goversion from which CoreDNS was built.
# TYPE coredns_build_info gauge
coredns_build_info{goversion="go1.18.2",revision="45b0a11",version="1.9.3"}1
# HELP coredns_cache_entries The number of elements in the cache.
# TYPE coredns_cache_entries gauge
coredns_cache_entries{server="dns://:53",type="denial",zones="."}46
coredns_cache_entries{server="dns://:53",type="success",zones="."}9
# HELP coredns_cache_hits_total The count of cache hits.
# TYPE coredns_cache_hits_total counter
coredns_cache_hits_total{server="dns://:53",type="denial",zones="."}6471
coredns_cache_hits_total{server="dns://:53",type="success",zones="."}6596
# HELP coredns_cache_misses_total The count of cache misses.Deprecated, derive misses from cache hits/requests counters.
# TYPE coredns_cache_misses_total counter
coredns_cache_misses_total{server="dns://:53",zones="."}1951
# HELP coredns_cache_requests_total The count of cache requests.
# TYPE coredns_cache_requests_total counter
coredns_cache_requests_total{server="dns://:53",zones="."}15018
# HELP coredns_dns_request_duration_seconds Histogram of the time(in seconds) each request took per zone.
# TYPE coredns_dns_request_duration_seconds histogram
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.00025"}14098
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.0005"}14836
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.001"}14850
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.002"}14856
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.004"}14857
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.008"}14870
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.016"}14879
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.032"}14883
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.064"}14884
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.128"}14884
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.256"}14885
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.512"}14886
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="1.024"}14887
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="2.048"}14903
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="4.096"}14911
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="8.192"}15018
coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="+Inf"}15018
coredns_dns_request_duration_seconds_sum{server="dns://:53",zone="."}698.531992215999
coredns_dns_request_duration_seconds_count{server="dns://:53",zone="."}15018
…
(output truncated)
1、问题
在使用代码调用谷歌浏览器时会出错:
from selenium import webdriver
driver webdriver.Chrome()
SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser versi…