
引言
在Kubernetes中,互联网是根据第三方互联网软件来给予,这种三方软件自身的完成就比较复杂,以致于在清查网络问题时经常栽跟头。那麼有哪些方法来监管集群中任何的数据连接呢?
kubenurse就这样一个新项目,它根据监控集群中的全部数据连接,并给予监管指标供Prometheus收集。
Kubenurse
kubenurse的部署比较简单,应用Daemonset方式部署到集群连接点上,Yaml文档在工程项目的example文件目录下。
部署取得成功后,每5秒左右会对/alive发一次查验要求,随后其内部结构会运作各种各样方式多方位对集群互联网开展检测,为了避免太多的数据流量,会对查验結果缓存文件3秒。其检测体制如下所示:

从上面可以看得出,kubenurse会对ingress、dns、apiserver、kube-proxy开展互联网检测。
全部的查验都是会建立公布的指标,这种指标可用以检测:
- SDN网络延迟及其错误
- Kubelet中间的网络延迟及其错误
- Pod与apiserver通讯问题
- Ingress来回网络延迟及其错误
- Service来回网络延迟及其错误(kube-proxy)
- Kube-apiserver问题
- Kube-dns(CoreDns)错误
- 外界DNS分析错误(ingress url解析)
随后那些数据信息主要是根据2个监管指标来反映:
- kubenurse_errors_total:按错误种类区划的错误计数
- kubenurse_request_duration:分类区划的要求時间遍布
这种指标全是根据Type种类开展标志,相匹配几类不一样的检测总体目标:
- api_server_direct:从连接点立即检测 API Server
- api_server_dns:从连接点根据 DNS 检测 API Server
- me_ingress:通过 Ingress 检测本服务项目 Service
- me_service:应用 Service 检测本服务项目 Service
- path_$KUBELET_HOSTNAME:连接点间的相互之间检测
随后这种指标各自按P50,P90,P99分位数开展区划,就可以依据不一样的具体情况来确定集群互联网情况了。
安裝部署
这儿立即应用官方网站的部署文档开展部署。但是必须变更好多个地区。(1)最先将编码clone到当地
gitclonehttps://github.com/postfinance/kubenurse.git
(2)进到example文件目录,改动ingress.yaml配备,主要是加上网站域名,如下所示。
apiVersion:extensions/v1beta1kind:Ingressmetadata:annotations:kubernetes.io/ingress.class:nginxname:kubenursenamespace:kube-systemspec:rules:-host:kubenurse-test.coolops.cnhttp:paths:-backend:serviceName:kubenurseservicePort:8080
(2)升级daemonset.yaml配备,主要是变更ingress的通道网站域名,如下所示。
apiVersion:apps/v1kind:DaemonSetmetadata:labels:app:kubenursename:kubenursenamespace:kube-systemspec:selector:matchLabels:app:kubenursetemplate:metadata:labels:app:kubenurseannotations:prometheus.io/path:"/metrics"prometheus.io/port:"8080"prometheus.io/scheme:"http"prometheus.io/scrape:"true"spec:serviceAccountName:nursecontainers:-name:kubenurseenv:-name:KUBENURSE_INGRESS_URLvalue:kubenurse-test.coolops.cn#必须调整的地区-name:KUBENURSE_SERVICE_URLvalue:http://kubenurse.kube-system.svc.cluster.local:8080-name:KUBENURSE_NAMESPACEvalue:kube-system-name:KUBENURSE_NEIGHBOUR_FILTERvalue:"app=kubenurse"image:"postfinance/kubenurse:v1.2.0"ports:-containerPort:8080protocol:TCPtolerations:-effect:NoSchedulekey:node-role.kubernetes.io/masteroperator:Equal-effect:NoSchedulekey:node-role.kubernetes.io/control-planeoperator:Equal
(4)新创建一个ServiceMonitor,用于获取指标数据,如下所示:
apiVersion:monitoring.coreos.com/v1kind:ServiceMonitormetadata:name:kubenursenamespace:monitoringlabels:k8s-app:kubenursespec:jobLabel:k8s-appendpoints:-port:"8080-8080"interval:30sscheme:httpselector:matchLabels:app:kubenursenamespaceSelector:matchNames:-kube-system
(5)布署运用,在example文件目录下实行下列指令。
kubectlapply-f.
(6)等候全部运用变为running,如下所示。
#kubectlgetall-nkube-system-lapp=kubenurseNAMEREADYSTATUSRESTARTSAGEpod/kubenurse-fznsw1/1Running017hpod/kubenurse-n52rq1/1Running017hpod/kubenurse-nwtl41/1Running017hpod/kubenurse-xp92p1/1Running017hpod/kubenurse-z2ksz1/1Running017hNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEservice/kubenurseClusterIP10.96.229.244<none>8080/TCP17hNAMEDESIREDCURRENTREADYUP-TO-DATEAVAILABLENODESELECTORAGEdaemonset.apps/kubenurse55555<none>17h
(7)到prometheus上检查能否一切正常获取数据。

查询指标是不是一切正常。


(8)此刻就可以在grafana上绘图,展现监管数据了,如下所示。

参照文本文档
【1】https://github.com/postfinance/kubenurse
【2】https://github.com/postfinance/kubenurse/tree/master/examples