Skip to content

kubepkg: Bundle CNI plugins (v0.8.6) in kubelet deb/rpm packages #1330

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cmd/kubepkg/templates/latest/deb/kubelet/debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ Vcs-Browser: https://github.com/kubernetes/kubernetes

Package: kubelet
Architecture: {{ .BuildArch }}
Depends: iptables (>= 1.4.21), kubernetes-cni (>= {{ index .Dependencies "kubernetes-cni" }}), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends}
Depends: iptables (>= 1.4.21), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends}
Provides: kubernetes-cni
Conflicts: kubernetes-cni
Replaces: kubernetes-cni
Description: Kubernetes Node Agent
The node agent of Kubernetes, the container cluster manager
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
usr/bin/kubelet usr/bin/
lib/systemd/system/kubelet.service lib/systemd/system/
bin/ opt/cni
4 changes: 4 additions & 0 deletions cmd/kubepkg/templates/latest/deb/kubelet/debian/rules
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ else
"{{ .DownloadLinkBase }}/bin/linux/{{ .GoArch }}/kubelet"
endif
chmod +x usr/bin/kubelet
mkdir -p ./bin
curl -sSL --fail --retry 5 \
"https://storage.googleapis.com/k8s-artifacts-cni/release/v{{ .CNIVersion }}/cni-plugins-linux-{{ .GoArch }}-v{{ .CNIVersion }}.tgz" \
| tar -C ./bin -xz
dh_testroot
dh_auto_install
dh_shlibdeps
Expand Down
1 change: 0 additions & 1 deletion cmd/kubepkg/templates/latest/deb/kubernetes-cni/.gitignore

This file was deleted.

This file was deleted.

This file was deleted.

15 changes: 0 additions & 15 deletions cmd/kubepkg/templates/latest/deb/kubernetes-cni/debian/control

This file was deleted.

18 changes: 0 additions & 18 deletions cmd/kubepkg/templates/latest/deb/kubernetes-cni/debian/copyright

This file was deleted.

This file was deleted.

24 changes: 0 additions & 24 deletions cmd/kubepkg/templates/latest/deb/kubernetes-cni/debian/rules

This file was deleted.

13 changes: 12 additions & 1 deletion cmd/kubepkg/templates/latest/rpm/kubelet/kubelet.spec
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,26 @@ Summary: Container cluster management
License: ASL 2.0
URL: https://kubernetes.io
Source0: {{ .DownloadLinkBase }}/bin/linux/{{ .GoArch }}/kubelet
Source1: {{ .CNIDownloadLink }}

BuildRequires: systemd
BuildRequires: curl
Requires: iptables >= 1.4.21
Requires: kubernetes-cni >= {{ index .Dependencies "kubernetes-cni" }}
Requires: socat
Requires: util-linux
Requires: ethtool
Requires: iproute
Requires: ebtables
Requires: conntrack
Obsoletes: kubernetes-cni
Conflicts: kubernetes-cni

%description
The node agent of Kubernetes, the container cluster manager.

%prep
cp -p %SOURCE0 %{_builddir}/
%setup -c -D -T -a 5 -n cni-plugins

# TODO: Do we need these?
#%autosetup
Expand All @@ -43,13 +46,18 @@ install -p -m 755 -t %{buildroot}%{_bindir}/ kubelet
install -p -m 644 -t %{buildroot}%{_unitdir}/ kubelet.service
install -m 755 -d %{buildroot}%{_sysconfdir}/sysconfig/
install -p -m 644 -T kubelet.env %{buildroot}%{_sysconfdir}/sysconfig/kubelet
install -m 755 -d %{buildroot}%{_sysconfdir}/cni/net.d/
install -m 755 -d %{buildroot}/opt/cni/bin
mv cni-plugins/* %{buildroot}/opt/cni/bin/

# TODO: Do we need this?
#%make_install

%files
%{_bindir}/kubelet
%{_unitdir}/kubelet.service
%{_sysconfdir}/kubernetes/manifests/
/opt/cni
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in #1309 (comment), I think we could discuss a better location than /opt


%config(noreplace) %{_sysconfdir}/sysconfig/kubelet

Expand All @@ -59,6 +67,9 @@ install -p -m 644 -T kubelet.env %{buildroot}%{_sysconfdir}/sysconfig/kubelet


%changelog
* Fri May 22 2020 Stephen Augustus <[email protected]> - 1.18.4
- Bundle CNI plugins (v0.8.6) in kubelet package

* Sat Jan 4 2020 Stephen Augustus <[email protected]> - 1.18.0
- Move kubeadm into separate spec file
- Move kubectl into separate spec file
Expand Down

This file was deleted.

80 changes: 31 additions & 49 deletions pkg/kubepkg/kubepkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ const (
ChannelNightly ChannelType = "nightly"

minimumKubernetesVersion = "1.13.0"
MinimumCNIVersion = "0.7.5"
Pre117CNIVersion = "0.7.5"
CurrentCNIVersion = "0.8.6"
MinimumCNIVersion = "0.8.6"

kubeadmConf = "10-kubeadm.conf"
)
Expand Down Expand Up @@ -147,6 +147,7 @@ type PackageDefinition struct {
DownloadLinkBase string
KubeadmKubeletConfigFile string

CNIVersion string
CNIDownloadLink string
}

Expand Down Expand Up @@ -189,8 +190,8 @@ func (c *Client) ConstructBuilds() ([]Build, error) {
packageDef.KubernetesVersion = c.options.KubeVersion()

switch b.Package {
case "kubernetes-cni":
packageDef.Version = c.options.CNIVersion()
case "kubelet":
packageDef.CNIVersion = c.options.CNIVersion()
case "cri-tools":
packageDef.Version = c.options.CRIToolsVersion()
}
Expand Down Expand Up @@ -312,7 +313,12 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,

bc.BuildArch = getBuildArch(bc.GoArch, bc.Type)

bc.CNIDownloadLink, err = GetCNIDownloadLink(pd, bc.GoArch)
bc.CNIVersion, err = GetCNIVersion(pd)
if err != nil {
return errors.Wrap(err, "getting CNI version")
}

bc.CNIDownloadLink, err = GetCNIDownloadLink(pd.Version, bc.GoArch)
if err != nil {
return errors.Wrap(err, "getting CNI download link")
}
Expand Down Expand Up @@ -393,10 +399,7 @@ func (c *Client) GetPackageVersion(packageDef *PackageDefinition) (string, error
}

logrus.Infof("Setting version for %s package...", packageDef.Name)
switch packageDef.Name {
case "kubernetes-cni":
return GetCNIVersion(packageDef)
case "cri-tools":
if packageDef.Name == "cri-tools" {
return c.GetCRIToolsVersion(packageDef)
}

Expand Down Expand Up @@ -431,27 +434,24 @@ func GetCNIVersion(packageDef *PackageDefinition) (string, error) {
return "", errors.New("package definition cannot be nil")
}

// TODO: Ensure version is not less than MinimumCNIVersion
logrus.Infof("Getting CNI version...")
if packageDef.CNIVersion != "" {
cniSemVer, err := util.TagStringToSemver(packageDef.CNIVersion)
if err != nil {
return "", errors.Wrap(err, "parsing CNI version")
}
minCNISemVer, err := util.TagStringToSemver(MinimumCNIVersion)
if err != nil {
return "", errors.Wrap(err, "parsing CNI version")
}

kubeSemver, err := util.TagStringToSemver(packageDef.KubernetesVersion)
if err != nil {
return "", err
}

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

if packageDef.Version != "" {
if kubeSemver.LT(v117) {
logrus.Infof("Kubernetes version earlier than 1.17 must use CNI version <= %s", Pre117CNIVersion)
logrus.Infof("Setting CNI version to %s", Pre117CNIVersion)
return Pre117CNIVersion, nil
if cniSemVer.LT(minCNISemVer) {
return "", errors.Errorf("specified CNI version (%s) cannot be lower than %s", packageDef.CNIVersion, MinimumCNIVersion)
}

logrus.Infof("Setting CNI version to %s", packageDef.Version)
return packageDef.Version, nil
logrus.Infof("Setting CNI version to %s", packageDef.CNIVersion)
return packageDef.CNIVersion, nil
}

logrus.Infof("Setting CNI version to %s", MinimumCNIVersion)
Expand Down Expand Up @@ -583,13 +583,9 @@ func GetDependencies(packageDef *PackageDefinition) (map[string]string, error) {

deps := make(map[string]string)

switch packageDef.Name {
case "kubelet":
deps["kubernetes-cni"] = MinimumCNIVersion
case "kubeadm":
if packageDef.Name == "kubeadm" {
deps["kubelet"] = minimumKubernetesVersion
deps["kubectl"] = minimumKubernetesVersion
deps["kubernetes-cni"] = MinimumCNIVersion
deps["cri-tools"] = minimumCRIToolsVersion
}

Expand All @@ -600,24 +596,10 @@ func getBuildArch(goArch string, buildType options.BuildType) string {
return buildArchMap[goArch][buildType]
}

func GetCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}

sv, err := util.TagStringToSemver(packageDef.Version)
if err != nil {
return "", err
}

v075, err := semver.Make(Pre117CNIVersion)
if err != nil {
return "", err
}

if sv.LTE(v075) {
return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil
func GetCNIDownloadLink(version, arch string) (string, error) {
if _, err := util.TagStringToSemver(version); err != nil {
return "", errors.Wrap(err, "parsing CNI version")
}

return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-linux-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil
return fmt.Sprintf("https://storage.googleapis.com/k8s-artifacts-cni/release/v%s/cni-plugins-linux-%s-v%s.tgz", version, arch, version), nil
}
Loading