kubeadm: updated DNS deployment.

This commit is contained in:
Paulo Pires 2017-01-09 15:43:30 +00:00
parent de59ede6b2
commit 070f7d9d2d
No known key found for this signature in database
GPG Key ID: F3F6ED5C522EAA71
3 changed files with 27 additions and 62 deletions

View File

@ -31,19 +31,17 @@ const (
KubeSchedulerImage = "scheduler" KubeSchedulerImage = "scheduler"
KubeProxyImage = "proxy" KubeProxyImage = "proxy"
KubeDNSImage = "kubedns" KubeDNSImage = "k8s-dns-kube-dns"
KubeDNSmasqImage = "kube-dnsmasq" KubeDNSmasqImage = "k8s-dns-dnsmasq"
KubeDNSmasqMetricsImage = "dnsmasq-metrics" KubeDNSSidecarImage = "k8s-dns-sidecar"
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.9" kubeDNSVersion = "1.10.1"
dnsmasqVersion = "1.4" dnsmasqVersion = "1.10.1"
exechealthzVersion = "1.2" kubeDNSSidecarVersion = "1.10.1"
dnsmasqMetricsVersion = "1.0"
pauseVersion = "3.0" pauseVersion = "3.0"
) )
@ -64,10 +62,9 @@ func GetCoreImage(image string, cfg *kubeadmapi.MasterConfiguration, overrideIma
func GetAddonImage(image string) string { func GetAddonImage(image string) string {
repoPrefix := kubeadmapi.GlobalEnvParams.RepositoryPrefix repoPrefix := kubeadmapi.GlobalEnvParams.RepositoryPrefix
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, KubeDNSImage, runtime.GOARCH, kubeDNSVersion),
KubeDNSmasqImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "kube-dnsmasq", runtime.GOARCH, dnsmasqVersion), KubeDNSmasqImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, KubeDNSmasqImage, runtime.GOARCH, dnsmasqVersion),
KubeDNSmasqMetricsImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, "dnsmasq-metrics", runtime.GOARCH, dnsmasqMetricsVersion), KubeDNSSidecarImage: fmt.Sprintf("%s/%s-%s:%s", repoPrefix, KubeDNSSidecarImage, runtime.GOARCH, kubeDNSSidecarVersion),
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]
} }

View File

@ -84,19 +84,19 @@ func TestGetAddonImage(t *testing.T) {
{"matches nothing", ""}, {"matches nothing", ""},
{ {
KubeDNSImage, KubeDNSImage,
fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kubedns", runtime.GOARCH, kubeDNSVersion), fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, KubeDNSImage, runtime.GOARCH, kubeDNSVersion),
}, },
{ {
KubeDNSmasqImage, KubeDNSmasqImage,
fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-dnsmasq", runtime.GOARCH, dnsmasqVersion), fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, KubeDNSmasqImage, runtime.GOARCH, dnsmasqVersion),
}, },
{ {
KubeExechealthzImage, KubeDNSSidecarImage,
fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "exechealthz", runtime.GOARCH, exechealthzVersion), fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, KubeDNSSidecarImage, runtime.GOARCH, kubeDNSSidecarVersion),
}, },
{ {
Pause, Pause,
fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "pause", runtime.GOARCH, pauseVersion), fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, Pause, runtime.GOARCH, pauseVersion),
}, },
} }
for _, rt := range tokenTest { for _, rt := range tokenTest {

View File

@ -26,7 +26,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"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/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"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"
) )
@ -82,16 +82,14 @@ func createKubeProxyPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
} }
func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec { func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
kubeDNSPort := int32(10053) kubeDNSPort := int32(10053)
dnsmasqPort := int32(53) dnsmasqPort := int32(53)
dnsMasqMetricsUser := int64(0)
return v1.PodSpec{ return v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
// DNS server // DNS server
{ {
Name: "kube-dns", Name: "kubedns",
Image: images.GetAddonImage(images.KubeDNSImage), Image: images.GetAddonImage(images.KubeDNSImage),
Resources: v1.ResourceRequirements{ Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{ Limits: v1.ResourceList{
@ -105,8 +103,8 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
LivenessProbe: &v1.Probe{ LivenessProbe: &v1.Probe{
Handler: v1.Handler{ Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{ HTTPGet: &v1.HTTPGetAction{
Path: "/healthz-kubedns", Path: "/healthcheck/kubedns",
Port: intstr.FromInt(8080), Port: intstr.FromInt(10054),
Scheme: v1.URISchemeHTTP, Scheme: v1.URISchemeHTTP,
}, },
}, },
@ -165,8 +163,8 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
LivenessProbe: &v1.Probe{ LivenessProbe: &v1.Probe{
Handler: v1.Handler{ Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{ HTTPGet: &v1.HTTPGetAction{
Path: "/healthz-dnsmasq", Path: "/healthcheck/dnsmasq",
Port: intstr.FromInt(8080), Port: intstr.FromInt(10054),
Scheme: v1.URISchemeHTTP, Scheme: v1.URISchemeHTTP,
}, },
}, },
@ -201,8 +199,8 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
}, },
}, },
{ {
Name: "dnsmasq-metrics", Name: "sidecar",
Image: images.GetAddonImage(images.KubeDNSmasqMetricsImage), Image: images.GetAddonImage(images.KubeDNSSidecarImage),
LivenessProbe: &v1.Probe{ LivenessProbe: &v1.Probe{
Handler: v1.Handler{ Handler: v1.Handler{
HTTPGet: &v1.HTTPGetAction{ HTTPGet: &v1.HTTPGetAction{
@ -216,16 +214,11 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
SuccessThreshold: 1, SuccessThreshold: 1,
FailureThreshold: 5, FailureThreshold: 5,
}, },
// The code below is a workaround for https://github.com/kubernetes/contrib/blob/master/dnsmasq-metrics/Dockerfile.in#L21
// This is just the normal mode (to run with user 0), all other containers do it except for this one, which may lead to
// that the DNS pod fails if the "nobody" _group_ doesn't exist. I think it's a typo in the Dockerfile manifest and
// that it should be "USER nobody:nogroup" instead of "USER nobody:nobody". However, this fixes the problem.
SecurityContext: &v1.SecurityContext{
RunAsUser: &dnsMasqMetricsUser,
},
Args: []string{ Args: []string{
"--v=2", "--v=2",
"--logtostderr", "--logtostderr",
fmt.Sprintf("--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.%s,5,A", cfg.Networking.DNSDomain),
fmt.Sprintf("--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.%s,5,A", cfg.Networking.DNSDomain),
}, },
Ports: []v1.ContainerPort{ Ports: []v1.ContainerPort{
{ {
@ -236,35 +229,10 @@ func createKubeDNSPodSpec(cfg *kubeadmapi.MasterConfiguration) v1.PodSpec {
}, },
Resources: v1.ResourceRequirements{ Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{ Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceMemory): resource.MustParse("10Mi"), v1.ResourceName(v1.ResourceMemory): resource.MustParse("20Mi"),
},
},
},
// healthz
{
Name: "healthz",
Image: images.GetAddonImage(images.KubeExechealthzImage),
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceName(v1.ResourceMemory): resource.MustParse("50Mi"),
},
Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceCPU): resource.MustParse("10m"), v1.ResourceName(v1.ResourceCPU): resource.MustParse("10m"),
v1.ResourceName(v1.ResourceMemory): resource.MustParse("50Mi"),
}, },
}, },
Args: []string{
fmt.Sprintf("--cmd=nslookup kubernetes.default.svc.%s 127.0.0.1 >/dev/null", cfg.Networking.DNSDomain),
"--url=/healthz-dnsmasq",
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{{
ContainerPort: 8080,
Protocol: v1.ProtocolTCP,
}},
}, },
}, },
DNSPolicy: v1.DNSDefault, DNSPolicy: v1.DNSDefault,