mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 01:40:07 +00:00
Update the built-in DNS addon of kubeadm to the v1.5 version
This commit is contained in:
parent
342f98d516
commit
f4cb405164
@ -31,17 +31,19 @@ const (
|
|||||||
KubeSchedulerImage = "scheduler"
|
KubeSchedulerImage = "scheduler"
|
||||||
KubeProxyImage = "proxy"
|
KubeProxyImage = "proxy"
|
||||||
|
|
||||||
KubeDNSImage = "kube-dns"
|
KubeDNSImage = "kubedns"
|
||||||
KubeDNSmasqImage = "dnsmasq"
|
KubeDNSmasqImage = "kube-dnsmasq"
|
||||||
|
KubeDNSmasqMetricsImage = "dnsmasq-metrics"
|
||||||
KubeExechealthzImage = "exechealthz"
|
KubeExechealthzImage = "exechealthz"
|
||||||
Pause = "pause"
|
Pause = "pause"
|
||||||
|
|
||||||
gcrPrefix = "gcr.io/google_containers"
|
gcrPrefix = "gcr.io/google_containers"
|
||||||
etcdVersion = "3.0.14-kubeadm"
|
etcdVersion = "3.0.14-kubeadm"
|
||||||
|
|
||||||
kubeDNSVersion = "1.7"
|
kubeDNSVersion = "1.9"
|
||||||
dnsmasqVersion = "1.3"
|
dnsmasqVersion = "1.4"
|
||||||
exechealthzVersion = "1.1"
|
exechealthzVersion = "1.2"
|
||||||
|
dnsmasqMetricsVersion = "1.0"
|
||||||
pauseVersion = "3.0"
|
pauseVersion = "3.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -64,6 +66,7 @@ func GetAddonImage(image string) string {
|
|||||||
return map[string]string{
|
return map[string]string{
|
||||||
KubeDNSImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "kubedns", runtime.GOARCH, kubeDNSVersion),
|
KubeDNSImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "kubedns", runtime.GOARCH, kubeDNSVersion),
|
||||||
KubeDNSmasqImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "kube-dnsmasq", runtime.GOARCH, dnsmasqVersion),
|
KubeDNSmasqImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "kube-dnsmasq", runtime.GOARCH, dnsmasqVersion),
|
||||||
|
KubeDNSmasqMetricsImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "dnsmasq-metrics", runtime.GOARCH, dnsmasqMetricsVersion),
|
||||||
KubeExechealthzImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "exechealthz", runtime.GOARCH, exechealthzVersion),
|
KubeExechealthzImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "exechealthz", runtime.GOARCH, exechealthzVersion),
|
||||||
Pause: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "pause", runtime.GOARCH, pauseVersion),
|
Pause: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "pause", runtime.GOARCH, pauseVersion),
|
||||||
}[image]
|
}[image]
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||||
ipallocator "k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -83,26 +83,9 @@ func createKubeProxyPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
|
|
||||||
func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
||||||
|
|
||||||
dnsPodResources := v1.ResourceList{
|
|
||||||
v1.ResourceName(v1.ResourceCPU): resource.MustParse("100m"),
|
|
||||||
v1.ResourceName(v1.ResourceMemory): resource.MustParse("170Mi"),
|
|
||||||
}
|
|
||||||
|
|
||||||
healthzPodResources := v1.ResourceList{
|
|
||||||
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10m"),
|
|
||||||
v1.ResourceName(v1.ResourceMemory): resource.MustParse("50Mi"),
|
|
||||||
}
|
|
||||||
|
|
||||||
kubeDNSPort := int32(10053)
|
kubeDNSPort := int32(10053)
|
||||||
dnsmasqPort := int32(53)
|
dnsmasqPort := int32(53)
|
||||||
|
|
||||||
nslookup := fmt.Sprintf("nslookup kubernetes.default.svc.%s 127.0.0.1", cfg.Networking.DNSDomain)
|
|
||||||
|
|
||||||
nslookup = fmt.Sprintf("-cmd=%s:%d >/dev/null && %s:%d >/dev/null",
|
|
||||||
nslookup, dnsmasqPort,
|
|
||||||
nslookup, kubeDNSPort,
|
|
||||||
)
|
|
||||||
|
|
||||||
return v1.PodSpec{
|
return v1.PodSpec{
|
||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
// DNS server
|
// DNS server
|
||||||
@ -110,18 +93,18 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
Name: "kube-dns",
|
Name: "kube-dns",
|
||||||
Image: images.GetAddonImage(images.KubeDNSImage),
|
Image: images.GetAddonImage(images.KubeDNSImage),
|
||||||
Resources: v1.ResourceRequirements{
|
Resources: v1.ResourceRequirements{
|
||||||
Limits: dnsPodResources,
|
Limits: v1.ResourceList{
|
||||||
Requests: dnsPodResources,
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("170Mi"),
|
||||||
|
},
|
||||||
|
Requests: v1.ResourceList{
|
||||||
|
v1.ResourceName(v1.ResourceCPU): resource.MustParse("100m"),
|
||||||
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("70Mi"),
|
||||||
},
|
},
|
||||||
Args: []string{
|
|
||||||
fmt.Sprintf("--domain=%s", cfg.Networking.DNSDomain),
|
|
||||||
fmt.Sprintf("--dns-port=%d", kubeDNSPort),
|
|
||||||
// TODO __PILLAR__FEDERATIONS__DOMAIN__MAP__
|
|
||||||
},
|
},
|
||||||
LivenessProbe: &v1.Probe{
|
LivenessProbe: &v1.Probe{
|
||||||
Handler: v1.Handler{
|
Handler: v1.Handler{
|
||||||
HTTPGet: &v1.HTTPGetAction{
|
HTTPGet: &v1.HTTPGetAction{
|
||||||
Path: "/healthz",
|
Path: "/healthz-kubedns",
|
||||||
Port: intstr.FromInt(8080),
|
Port: intstr.FromInt(8080),
|
||||||
Scheme: v1.URISchemeHTTP,
|
Scheme: v1.URISchemeHTTP,
|
||||||
},
|
},
|
||||||
@ -129,7 +112,7 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
InitialDelaySeconds: 60,
|
InitialDelaySeconds: 60,
|
||||||
TimeoutSeconds: 5,
|
TimeoutSeconds: 5,
|
||||||
SuccessThreshold: 1,
|
SuccessThreshold: 1,
|
||||||
FailureThreshold: 1,
|
FailureThreshold: 5,
|
||||||
},
|
},
|
||||||
// # we poll on pod startup for the Kubernetes master service and
|
// # we poll on pod startup for the Kubernetes master service and
|
||||||
// # only setup the /readiness HTTP server once that's available.
|
// # only setup the /readiness HTTP server once that's available.
|
||||||
@ -141,9 +124,20 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
Scheme: v1.URISchemeHTTP,
|
Scheme: v1.URISchemeHTTP,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
InitialDelaySeconds: 30,
|
InitialDelaySeconds: 3,
|
||||||
TimeoutSeconds: 5,
|
TimeoutSeconds: 5,
|
||||||
},
|
},
|
||||||
|
Args: []string{
|
||||||
|
fmt.Sprintf("--domain=%s", cfg.Networking.DNSDomain),
|
||||||
|
fmt.Sprintf("--dns-port=%d", kubeDNSPort),
|
||||||
|
"--config-map=kube-dns",
|
||||||
|
},
|
||||||
|
Env: []v1.EnvVar{
|
||||||
|
{
|
||||||
|
Name: "PROMETHEUS_PORT",
|
||||||
|
Value: "10055",
|
||||||
|
},
|
||||||
|
},
|
||||||
Ports: []v1.ContainerPort{
|
Ports: []v1.ContainerPort{
|
||||||
{
|
{
|
||||||
ContainerPort: kubeDNSPort,
|
ContainerPort: kubeDNSPort,
|
||||||
@ -155,20 +149,35 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
Name: "dns-tcp-local",
|
Name: "dns-tcp-local",
|
||||||
Protocol: v1.ProtocolTCP,
|
Protocol: v1.ProtocolTCP,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ContainerPort: 10055,
|
||||||
|
Name: "metrics",
|
||||||
|
Protocol: v1.ProtocolTCP,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// dnsmasq
|
// dnsmasq
|
||||||
{
|
{
|
||||||
Name: "dnsmasq",
|
Name: "dnsmasq",
|
||||||
Image: images.GetAddonImage(images.KubeDNSmasqImage),
|
Image: images.GetAddonImage(images.KubeDNSmasqImage),
|
||||||
Resources: v1.ResourceRequirements{
|
LivenessProbe: &v1.Probe{
|
||||||
Limits: dnsPodResources,
|
Handler: v1.Handler{
|
||||||
Requests: dnsPodResources,
|
HTTPGet: &v1.HTTPGetAction{
|
||||||
|
Path: "/healthz-dnsmasq",
|
||||||
|
Port: intstr.FromInt(8080),
|
||||||
|
Scheme: v1.URISchemeHTTP,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
InitialDelaySeconds: 60,
|
||||||
|
TimeoutSeconds: 5,
|
||||||
|
SuccessThreshold: 1,
|
||||||
|
FailureThreshold: 5,
|
||||||
},
|
},
|
||||||
Args: []string{
|
Args: []string{
|
||||||
"--cache-size=1000",
|
"--cache-size=1000",
|
||||||
"--no-resolv",
|
"--no-resolv",
|
||||||
fmt.Sprintf("--server=127.0.0.1#%d", kubeDNSPort),
|
fmt.Sprintf("--server=127.0.0.1#%d", kubeDNSPort),
|
||||||
|
"--log-facility=-",
|
||||||
},
|
},
|
||||||
Ports: []v1.ContainerPort{
|
Ports: []v1.ContainerPort{
|
||||||
{
|
{
|
||||||
@ -182,19 +191,66 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
Protocol: v1.ProtocolTCP,
|
Protocol: v1.ProtocolTCP,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Resources: v1.ResourceRequirements{
|
||||||
|
Requests: v1.ResourceList{
|
||||||
|
v1.ResourceName(v1.ResourceCPU): resource.MustParse("150m"),
|
||||||
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10Mi"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "dnsmasq-metrics",
|
||||||
|
Image: images.GetAddonImage(images.KubeDNSmasqMetricsImage),
|
||||||
|
LivenessProbe: &v1.Probe{
|
||||||
|
Handler: v1.Handler{
|
||||||
|
HTTPGet: &v1.HTTPGetAction{
|
||||||
|
Path: "/metrics",
|
||||||
|
Port: intstr.FromInt(10054),
|
||||||
|
Scheme: v1.URISchemeHTTP,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
InitialDelaySeconds: 60,
|
||||||
|
TimeoutSeconds: 5,
|
||||||
|
SuccessThreshold: 1,
|
||||||
|
FailureThreshold: 5,
|
||||||
|
},
|
||||||
|
Args: []string{
|
||||||
|
"--v=2",
|
||||||
|
"--logtostderr",
|
||||||
|
},
|
||||||
|
Ports: []v1.ContainerPort{
|
||||||
|
{
|
||||||
|
ContainerPort: 10054,
|
||||||
|
Name: "metrics",
|
||||||
|
Protocol: v1.ProtocolTCP,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Resources: v1.ResourceRequirements{
|
||||||
|
Requests: v1.ResourceList{
|
||||||
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10Mi"),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
// healthz
|
// healthz
|
||||||
{
|
{
|
||||||
Name: "healthz",
|
Name: "healthz",
|
||||||
Image: images.GetAddonImage(images.KubeExechealthzImage),
|
Image: images.GetAddonImage(images.KubeExechealthzImage),
|
||||||
Resources: v1.ResourceRequirements{
|
Resources: v1.ResourceRequirements{
|
||||||
Limits: healthzPodResources,
|
Limits: v1.ResourceList{
|
||||||
Requests: healthzPodResources,
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("50Mi"),
|
||||||
|
},
|
||||||
|
Requests: v1.ResourceList{
|
||||||
|
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10m"),
|
||||||
|
v1.ResourceName(v1.ResourceMemory): resource.MustParse("50Mi"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Args: []string{
|
Args: []string{
|
||||||
nslookup,
|
fmt.Sprintf("--cmd=nslookup kubernetes.default.svc.%s 127.0.0.1 >/dev/null", cfg.Networking.DNSDomain),
|
||||||
"-port=8080",
|
"--url=/healthz-dnsmasq",
|
||||||
"-quiet",
|
fmt.Sprintf("--cmd=nslookup kubernetes.default.svc.%s 127.0.0.1:%d >/dev/null", cfg.Networking.DNSDomain, kubeDNSPort),
|
||||||
|
"--url=/healthz-kubedns",
|
||||||
|
"--port=8080",
|
||||||
|
"--quiet",
|
||||||
},
|
},
|
||||||
Ports: []v1.ContainerPort{{
|
Ports: []v1.ContainerPort{{
|
||||||
ContainerPort: 8080,
|
ContainerPort: 8080,
|
||||||
@ -204,7 +260,6 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
|
|||||||
},
|
},
|
||||||
DNSPolicy: v1.DNSDefault,
|
DNSPolicy: v1.DNSDefault,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createKubeDNSServiceSpec(cfg *kubeadmapi.MasterConfiguration) (*v1.ServiceSpec, error) {
|
func createKubeDNSServiceSpec(cfg *kubeadmapi.MasterConfiguration) (*v1.ServiceSpec, error) {
|
||||||
@ -217,16 +272,14 @@ func createKubeDNSServiceSpec(cfg *kubeadmapi.MasterConfiguration) (*v1.ServiceS
|
|||||||
return nil, fmt.Errorf("unable to allocate IP address for kube-dns addon from the given CIDR (%q) [%v]", cfg.Networking.ServiceSubnet, err)
|
return nil, fmt.Errorf("unable to allocate IP address for kube-dns addon from the given CIDR (%q) [%v]", cfg.Networking.ServiceSubnet, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := &v1.ServiceSpec{
|
return &v1.ServiceSpec{
|
||||||
Selector: map[string]string{"name": "kube-dns"},
|
Selector: map[string]string{"name": "kube-dns"},
|
||||||
Ports: []v1.ServicePort{
|
Ports: []v1.ServicePort{
|
||||||
{Name: "dns", Port: 53, Protocol: v1.ProtocolUDP},
|
{Name: "dns", Port: 53, Protocol: v1.ProtocolUDP},
|
||||||
{Name: "dns-tcp", Port: 53, Protocol: v1.ProtocolTCP},
|
{Name: "dns-tcp", Port: 53, Protocol: v1.ProtocolTCP},
|
||||||
},
|
},
|
||||||
ClusterIP: ip.String(),
|
ClusterIP: ip.String(),
|
||||||
}
|
}, nil
|
||||||
|
|
||||||
return svc, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error {
|
func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error {
|
||||||
@ -250,10 +303,11 @@ func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client *clientse
|
|||||||
|
|
||||||
kubeDNSServiceSpec, err := createKubeDNSServiceSpec(cfg)
|
kubeDNSServiceSpec, err := createKubeDNSServiceSpec(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("<master/addons> failed creating essential kube-dns addon - %v", err)
|
return fmt.Errorf("failed creating essential kube-dns addon [%v]", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeDNSService := NewService("kube-dns", *kubeDNSServiceSpec)
|
kubeDNSService := NewService("kube-dns", *kubeDNSServiceSpec)
|
||||||
|
kubeDNSService.ObjectMeta.Labels["kubernetes.io/name"] = "KubeDNS"
|
||||||
if _, err := client.Services(api.NamespaceSystem).Create(kubeDNSService); err != nil {
|
if _, err := client.Services(api.NamespaceSystem).Create(kubeDNSService); err != nil {
|
||||||
return fmt.Errorf("<master/addons> failed creating essential kube-dns addon [%v]", err)
|
return fmt.Errorf("<master/addons> failed creating essential kube-dns addon [%v]", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user