github地址:https://github.com/kubernetes/dns
sidecar
● 定期检查kubedns和dnsmasq的健康状态(nslookup)
● 为k8s活性检测提供HTTP API
/sidecar
--v=2
--logtostderr
--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A
--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A
一 sidecar启动流程
1 main函数
func main() {
options := sidecar.NewOptions()
configureFlags(options, pflag.CommandLine)
flag.InitFlags()
// Convinces goflags that we have called Parse() to avoid noisy logs.
// OSS Issue: kubernetes/kubernetes#17162.
goflag.CommandLine.Parse([]string{})
logs.InitLogs()
defer logs.FlushLogs()
glog.Infof("Version v%s", version.VERSION)
version.PrintAndExitIfRequested()
server := sidecar.NewServer()
server.Run(options)
}
2 Run函数
主要是启动l两个健康检查,kubedns,dnsmasq
--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A
--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A
// Run the server (does not return) func (s *server) Run(options *Options) { s.options = options glog.Infof("Starting server (options %+v)", *s.options) for _, probeOption := range options.Probes { probe := &dnsProbe{DNSProbeOption: probeOption} s.probes = append(s.probes, probe) probe.Start(options) } s.runMetrics(options) }
3 Start函数
func (p *dnsProbe) Start(options *Options) { glog.V(2).Infof("Starting dnsProbe %+v", p.DNSProbeOption) p.lastError = fmt.Errorf("waiting for first probe") http.HandleFunc("/healthcheck/"+p.Label, p.httpHandler) p.registerMetrics(options) if p.delayer == nil { glog.V(4).Infof("Using defaultLoopDelayer") p.delayer = &defaultLoopDelayer{} } go p.loop() }
4 loop函数
func (p *dnsProbe) loop() { glog.V(4).Infof("Starting loop") p.delayer.Start(p.Interval) dnsClient := &dns.Client{} for { glog.V(4).Infof("Sending DNS request @%v %v", p.Server, p.Name) msg, latency, err := dnsClient.Exchange(p.msg(), p.Server) glog.V(4).Infof("Got response, err=%v after %v", err, latency) if err == nil && len(msg.Answer) == 0 { err = fmt.Errorf("no RRs for domain %q", p.Name) } p.update(err, latency) p.delayer.Sleep(latency) } }