From 6559e4dedeffa0c1d97b5b8795b24047a4617081 Mon Sep 17 00:00:00 2001 From: Rye Terrell Date: Tue, 12 Dec 2017 14:33:38 -0600 Subject: [PATCH] make kube-dns addon optional --- .../juju/layers/kubernetes-master/config.yaml | 4 ++++ .../reactive/kubernetes_master.py | 22 +++++++++---------- .../reactive/kubernetes_worker.py | 4 +++- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/cluster/juju/layers/kubernetes-master/config.yaml b/cluster/juju/layers/kubernetes-master/config.yaml index 18b2b691d57..4001cd979ac 100644 --- a/cluster/juju/layers/kubernetes-master/config.yaml +++ b/cluster/juju/layers/kubernetes-master/config.yaml @@ -3,6 +3,10 @@ options: type: boolean default: True description: Deploy the Kubernetes Dashboard and Heapster addons + enable-kube-dns: + type: boolean + default: True + description: Deploy kube-dns addon dns_domain: type: string default: cluster.local diff --git a/cluster/juju/layers/kubernetes-master/reactive/kubernetes_master.py b/cluster/juju/layers/kubernetes-master/reactive/kubernetes_master.py index 1547bc8bc93..5736e938110 100644 --- a/cluster/juju/layers/kubernetes-master/reactive/kubernetes_master.py +++ b/cluster/juju/layers/kubernetes-master/reactive/kubernetes_master.py @@ -438,10 +438,10 @@ def etcd_data_change(etcd): @when('cdk-addons.configured') def send_cluster_dns_detail(kube_control): ''' Send cluster DNS info ''' - # Note that the DNS server doesn't necessarily exist at this point. We know - # where we're going to put it, though, so let's send the info anyway. - dns_ip = get_dns_ip() - kube_control.set_dns(53, hookenv.config('dns_domain'), dns_ip) + enableKubeDNS = hookenv.config('enable-kube-dns') + dnsDomain = hookenv.config('dns_domain') + dns_ip = None if not enableKubeDNS else get_dns_ip() + kube_control.set_dns(53, dnsDomain, dns_ip, enableKubeDNS) @when('kube-control.connected') @@ -563,11 +563,12 @@ def configure_cdk_addons(): ''' Configure CDK addons ''' remove_state('cdk-addons.configured') dbEnabled = str(hookenv.config('enable-dashboard-addons')).lower() + dnsEnabled = str(hookenv.config('enable-kube-dns')).lower() args = [ 'arch=' + arch(), - 'dns-ip=' + get_dns_ip(), 'dns-domain=' + hookenv.config('dns_domain'), - 'enable-dashboard=' + dbEnabled + 'enable-dashboard=' + dbEnabled, + 'enable-kube-dns=' + dnsEnabled ] check_call(['snap', 'set', 'cdk-addons'] + args) if not addons_ready(): @@ -951,11 +952,10 @@ def create_kubeconfig(kubeconfig, server, ca, key=None, certificate=None, def get_dns_ip(): - '''Get an IP address for the DNS server on the provided cidr.''' - interface = ipaddress.IPv4Interface(service_cidr()) - # Add .10 at the end of the network - ip = interface.network.network_address + 10 - return ip.exploded + cmd = "kubectl get service --namespace kube-system kube-dns --output json" + output = check_output(cmd, shell=True).decode() + svc = json.loads(output) + return svc['spec']['clusterIP'] def get_kubernetes_service_ip(): diff --git a/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py b/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py index d43f06768a8..01c215c61c8 100644 --- a/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py +++ b/cluster/juju/layers/kubernetes-worker/reactive/kubernetes_worker.py @@ -518,7 +518,6 @@ def configure_kubelet(dns): kubelet_opts['v'] = '0' kubelet_opts['address'] = '0.0.0.0' kubelet_opts['port'] = '10250' - kubelet_opts['cluster-dns'] = dns['sdn-ip'] kubelet_opts['cluster-domain'] = dns['domain'] kubelet_opts['anonymous-auth'] = 'false' kubelet_opts['client-ca-file'] = ca_cert_path @@ -527,6 +526,9 @@ def configure_kubelet(dns): kubelet_opts['logtostderr'] = 'true' kubelet_opts['fail-swap-on'] = 'false' + if (dns['enable-kube-dns']): + kubelet_opts['cluster-dns'] = dns['sdn-ip'] + privileged = is_state('kubernetes-worker.privileged') kubelet_opts['allow-privileged'] = 'true' if privileged else 'false'