Skip to content

Commit

Permalink
Use different copies of 10-kubeadm.conf depending on version.
Browse files Browse the repository at this point in the history
For kubeadm 1.8, we changed the flags we want to start kubelet with.
This change breaks 10-kubeadm.conf into two files (pre- and post-1.8)
and selects which one to use at build time, based on the target version.

I've also included unit tests for the new functionality which aren't run
by default ("go test" manually), but are meant to demonstrate the
versioning edge cases I tested.

A similar change still needs to happen for our rpm build scripts.

kubernetes/kubeadm#442
  • Loading branch information
pipejakob committed Sep 27, 2017
1 parent da7d2fb commit 27e75f6
Show file tree
Hide file tree
Showing 12 changed files with 116 additions and 3 deletions.
1 change: 1 addition & 0 deletions debian/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ADD . /src
ADD vendor /go/src

WORKDIR /src

Expand Down
29 changes: 29 additions & 0 deletions debian/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import (
"strings"
"text/template"
"time"

"github.com/blang/semver"
)

type ChannelType string
Expand Down Expand Up @@ -41,6 +43,7 @@ type version struct {
Channel ChannelType
GetVersion func() (string, error)
GetDownloadLinkBase func(v version) (string, error)
KubeadmKubeletConfigFile string
}

type cfg struct {
Expand Down Expand Up @@ -268,6 +271,26 @@ func getReleaseDownloadLinkBase(v version) (string, error) {
return fmt.Sprintf("https://dl.k8s.io/v%s", v.Version), nil
}

// The version of this file to use changed in 1.8, so use the target build
// version to figure out which copy of it to include in the deb.
func getKubeadmKubeletConfigFile(v version) (string, error) {
sv, err := semver.Make(v.Version)
if err != nil {
return "", err
}

v180, err := semver.Make("1.8.0-alpha.0")
if err != nil {
return "", err
}

if sv.GTE(v180) {
return "post-1.8/10-kubeadm.conf", nil
} else {
return "pre-1.8/10-kubeadm.conf", nil
}
}

func main() {
flag.Parse()

Expand Down Expand Up @@ -437,6 +460,12 @@ func main() {
c.DebArch = c.Arch
}

var err error
c.KubeadmKubeletConfigFile, err = getKubeadmKubeletConfigFile(v)
if err != nil {
log.Fatalf("error getting kubeadm config: %v", err)
}

return c.run()
}); err != nil {
log.Fatalf("err: %v", err)
Expand Down
71 changes: 71 additions & 0 deletions debian/build_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package main

import (
"testing"
)

func TestGetKubeadmConfig(t *testing.T) {
testcases := []struct {
version string
expectConfig string
expectErr bool
}{
{
"1.6.10",
"pre-1.8/10-kubeadm.conf",
false,
},
{
"1.7.10",
"pre-1.8/10-kubeadm.conf",
false,
},
{
"1.7.0-beta.5",
"pre-1.8/10-kubeadm.conf",
false,
},
{
"1.8.0",
"post-1.8/10-kubeadm.conf",
false,
},
{
"1.8.0-alpha.0",
"post-1.8/10-kubeadm.conf",
false,
},
{
"1.8.0-beta.2",
"post-1.8/10-kubeadm.conf",
false,
},
{
"1.9.0",
"post-1.8/10-kubeadm.conf",
false,
},
{
"not-a-real-version",
"",
true,
},
}

for _, tc := range testcases {
v := version{
Version: tc.version,
}
kubeadmConfig, err := getKubeadmConfig(v)

if err != nil {
if !tc.expectErr {
t.Errorf("getKubeadmConfig(%s) returned unwanted error: %v", tc.version, err)
}
} else {
if kubeadmConfig != tc.expectConfig {
t.Errorf("getKubeadmConfig(%s) got %q, wanted %q", tc.version, kubeadmConfig, tc.expectConfig)
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS

This file was deleted.

2 changes: 1 addition & 1 deletion debian/xenial/kubeadm/debian/kubeadm.install
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
usr/bin/kubeadm usr/bin/
channel/{{ .Channel }}/etc/systemd/system/kubelet.service.d/10-kubeadm.conf etc/systemd/system/kubelet.service.d/
channel/{{ .Channel }}/etc/systemd/system/kubelet.service.d/{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/

0 comments on commit 27e75f6

Please sign in to comment.