mirror of https://github.com/kubernetes/kops.git
dns-controller: allow configuring DNS update interval
This commit is contained in:
parent
6f1874a93a
commit
712528728c
|
@ -57,6 +57,7 @@ func main() {
|
||||||
var dnsServer, dnsProviderID, gossipListen, gossipSecret, watchNamespace, metricsListen string
|
var dnsServer, dnsProviderID, gossipListen, gossipSecret, watchNamespace, metricsListen string
|
||||||
var gossipSeeds, zones []string
|
var gossipSeeds, zones []string
|
||||||
var watchIngress bool
|
var watchIngress bool
|
||||||
|
var updateInterval int
|
||||||
|
|
||||||
// Be sure to get the glog flags
|
// Be sure to get the glog flags
|
||||||
glog.Flush()
|
glog.Flush()
|
||||||
|
@ -71,6 +72,7 @@ func main() {
|
||||||
flags.StringVar(&watchNamespace, "watch-namespace", "", "Limits the functionality for pods, services and ingress to specific namespace, by default all")
|
flags.StringVar(&watchNamespace, "watch-namespace", "", "Limits the functionality for pods, services and ingress to specific namespace, by default all")
|
||||||
flag.IntVar(&route53.MaxBatchSize, "route53-batch-size", route53.MaxBatchSize, "Maximum number of operations performed per changeset batch")
|
flag.IntVar(&route53.MaxBatchSize, "route53-batch-size", route53.MaxBatchSize, "Maximum number of operations performed per changeset batch")
|
||||||
flag.StringVar(&metricsListen, "metrics-listen", "", "The address on which to listen for Prometheus metrics.")
|
flag.StringVar(&metricsListen, "metrics-listen", "", "The address on which to listen for Prometheus metrics.")
|
||||||
|
flags.IntVar(&updateInterval, "update-interval", 5, "Configure interval at which to update DNS records.")
|
||||||
|
|
||||||
// Trick to avoid 'logging before flag.Parse' warning
|
// Trick to avoid 'logging before flag.Parse' warning
|
||||||
flag.CommandLine.Parse([]string{})
|
flag.CommandLine.Parse([]string{})
|
||||||
|
@ -163,7 +165,7 @@ func main() {
|
||||||
dnsProviders = append(dnsProviders, dnsProvider)
|
dnsProviders = append(dnsProviders, dnsProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsController, err := dns.NewDNSController(dnsProviders, zoneRules)
|
dnsController, err := dns.NewDNSController(dnsProviders, zoneRules, updateInterval)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Error building DNS controller: %v", err)
|
glog.Errorf("Error building DNS controller: %v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
@ -55,6 +55,9 @@ type DNSController struct {
|
||||||
|
|
||||||
// changeCount is a change-counter, which helps us avoid computation when nothing has changed
|
// changeCount is a change-counter, which helps us avoid computation when nothing has changed
|
||||||
changeCount uint64
|
changeCount uint64
|
||||||
|
|
||||||
|
// update loop frequency (seconds)
|
||||||
|
updateInterval time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// DNSController is a Context
|
// DNSController is a Context
|
||||||
|
@ -81,16 +84,17 @@ type DNSControllerScope struct {
|
||||||
var _ Scope = &DNSControllerScope{}
|
var _ Scope = &DNSControllerScope{}
|
||||||
|
|
||||||
// NewDnsController creates a DnsController
|
// NewDnsController creates a DnsController
|
||||||
func NewDNSController(dnsProviders []dnsprovider.Interface, zoneRules *ZoneRules) (*DNSController, error) {
|
func NewDNSController(dnsProviders []dnsprovider.Interface, zoneRules *ZoneRules, updateInterval int) (*DNSController, error) {
|
||||||
dnsCache, err := newDNSCache(dnsProviders)
|
dnsCache, err := newDNSCache(dnsProviders)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error initializing DNS cache: %v", err)
|
return nil, fmt.Errorf("error initializing DNS cache: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := &DNSController{
|
c := &DNSController{
|
||||||
scopes: make(map[string]*DNSControllerScope),
|
scopes: make(map[string]*DNSControllerScope),
|
||||||
zoneRules: zoneRules,
|
zoneRules: zoneRules,
|
||||||
dnsCache: dnsCache,
|
dnsCache: dnsCache,
|
||||||
|
updateInterval: time.Duration(updateInterval) * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
|
@ -117,10 +121,10 @@ func (c *DNSController) runWatcher(stopCh <-chan struct{}) {
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Warningf("Unexpected error in DNS controller, will retry: %v", err)
|
glog.Warningf("Unexpected error in DNS controller, will retry: %v", err)
|
||||||
time.Sleep(10 * time.Second)
|
time.Sleep(2 * c.updateInterval)
|
||||||
} else {
|
} else {
|
||||||
// Simple debouncing; DNS servers are typically pretty slow anyway
|
// Simple debouncing; DNS servers are typically pretty slow anyway
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(c.updateInterval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ func run() error {
|
||||||
var cloud, clusterID, dnsServer, dnsProviderID, dnsInternalSuffix, gossipSecret, gossipListen string
|
var cloud, clusterID, dnsServer, dnsProviderID, dnsInternalSuffix, gossipSecret, gossipListen string
|
||||||
var flagChannels, tlsCert, tlsKey, tlsCA, peerCert, peerKey, peerCA string
|
var flagChannels, tlsCert, tlsKey, tlsCA, peerCert, peerKey, peerCA string
|
||||||
var etcdBackupImage, etcdBackupStore, etcdImageSource, etcdElectionTimeout, etcdHeartbeatInterval string
|
var etcdBackupImage, etcdBackupStore, etcdImageSource, etcdElectionTimeout, etcdHeartbeatInterval string
|
||||||
|
var dnsUpdateInterval int
|
||||||
|
|
||||||
flag.BoolVar(&applyTaints, "apply-taints", applyTaints, "Apply taints to nodes based on the role")
|
flag.BoolVar(&applyTaints, "apply-taints", applyTaints, "Apply taints to nodes based on the role")
|
||||||
flag.BoolVar(&containerized, "containerized", containerized, "Set if we are running containerized.")
|
flag.BoolVar(&containerized, "containerized", containerized, "Set if we are running containerized.")
|
||||||
|
@ -73,6 +74,7 @@ func run() error {
|
||||||
flag.StringVar(&clusterID, "cluster-id", clusterID, "Cluster ID")
|
flag.StringVar(&clusterID, "cluster-id", clusterID, "Cluster ID")
|
||||||
flag.StringVar(&dnsInternalSuffix, "dns-internal-suffix", dnsInternalSuffix, "DNS suffix for internal domain names")
|
flag.StringVar(&dnsInternalSuffix, "dns-internal-suffix", dnsInternalSuffix, "DNS suffix for internal domain names")
|
||||||
flag.StringVar(&dnsServer, "dns-server", dnsServer, "DNS Server")
|
flag.StringVar(&dnsServer, "dns-server", dnsServer, "DNS Server")
|
||||||
|
flags.IntVar(&dnsUpdateInterval, "dns-update-interval", 5, "Configure interval at which to update DNS records.")
|
||||||
flag.StringVar(&flagChannels, "channels", flagChannels, "channels to install")
|
flag.StringVar(&flagChannels, "channels", flagChannels, "channels to install")
|
||||||
flag.StringVar(&gossipListen, "gossip-listen", "0.0.0.0:3999", "address:port on which to bind for gossip")
|
flag.StringVar(&gossipListen, "gossip-listen", "0.0.0.0:3999", "address:port on which to bind for gossip")
|
||||||
flag.StringVar(&peerCA, "peer-ca", peerCA, "Path to a file containing the peer ca in PEM format")
|
flag.StringVar(&peerCA, "peer-ca", peerCA, "Path to a file containing the peer ca in PEM format")
|
||||||
|
@ -298,7 +300,7 @@ func run() error {
|
||||||
return fmt.Errorf("unexpected zone flags: %q", err)
|
return fmt.Errorf("unexpected zone flags: %q", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsController, err = dns.NewDNSController([]dnsprovider.Interface{dnsProvider}, zoneRules)
|
dnsController, err = dns.NewDNSController([]dnsprovider.Interface{dnsProvider}, zoneRules, dnsUpdateInterval)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue