diff --git a/build/BUILD b/build/BUILD index 5c126d4fd03..2409fcf28a1 100644 --- a/build/BUILD +++ b/build/BUILD @@ -15,6 +15,7 @@ filegroup( ":package-srcs", "//build/debs:all-srcs", "//build/release-tars:all-srcs", + "//build/rpms:all-srcs", "//build/visible_to:all-srcs", ], tags = ["automanaged"], @@ -98,6 +99,18 @@ DOCKERIZED_BINARIES = { stamp = 1, ) for binary, meta in DOCKERIZED_BINARIES.items()] +genrule( + name = "os_package_version", + outs = ["version"], + cmd = """ +grep ^STABLE_BUILD_SCM_REVISION bazel-out/stable-status.txt \ + | awk '{print $$2}' \ + | sed -e 's/^v//' -e 's/[\+-]/_/g' \ + >$@ +""", + stamp = 1, +) + release_filegroup( name = "docker-artifacts", srcs = [":%s.tar" % binary for binary in DOCKERIZED_BINARIES.keys()] + diff --git a/build/debs/BUILD b/build/debs/BUILD index 0f3ffb46bf8..54acffcc50c 100644 --- a/build/debs/BUILD +++ b/build/debs/BUILD @@ -1,6 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load("@io_bazel//tools/build_defs/pkg:pkg.bzl", "pkg_tar", "pkg_deb") +load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") load("@io_kubernetes_build//defs:deb.bzl", "k8s_deb", "deb_data") load("@io_kubernetes_build//defs:build.bzl", "release_filegroup") diff --git a/build/rpms/10-kubeadm.conf b/build/rpms/10-kubeadm.conf new file mode 100644 index 00000000000..2dd9c9b1b90 --- /dev/null +++ b/build/rpms/10-kubeadm.conf @@ -0,0 +1,9 @@ +[Service] +Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true" +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_CGROUP_ARGS=--cgroup-driver=systemd" +ExecStart= +ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CGROUP_ARGS $KUBELET_EXTRA_ARGS diff --git a/build/rpms/BUILD b/build/rpms/BUILD new file mode 100644 index 00000000000..bb6a8252503 --- /dev/null +++ b/build/rpms/BUILD @@ -0,0 +1,58 @@ +package(default_visibility = ["//visibility:public"]) + +load("@bazel_tools//tools/build_defs/pkg:rpm.bzl", "pkg_rpm") + +pkg_rpm( + name = "kubectl", + changelog = "//:CHANGELOG.md", + data = [ + "//cmd/kubectl", + ], + spec_file = "kubectl.spec", + version_file = "//build:os_package_version", +) + +pkg_rpm( + name = "kubelet", + changelog = "//:CHANGELOG.md", + data = [ + "kubelet.service", + "//cmd/kubelet", + ], + spec_file = "kubelet.spec", + version_file = "//build:os_package_version", +) + +pkg_rpm( + name = "kubeadm", + changelog = "//:CHANGELOG.md", + data = [ + "10-kubeadm.conf", + "//cmd/kubeadm", + ], + spec_file = "kubeadm.spec", + version_file = "//build:os_package_version", +) + +pkg_rpm( + name = "kubernetes-cni", + changelog = "//:CHANGELOG.md", + data = [ + "@kubernetes_cni//file", + ], + spec_file = "kubernetes-cni.spec", + version_file = "//build:os_package_version", +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/build/rpms/kubeadm.spec b/build/rpms/kubeadm.spec new file mode 100644 index 00000000000..fa28736119f --- /dev/null +++ b/build/rpms/kubeadm.spec @@ -0,0 +1,24 @@ +Name: kubeadm +Version: OVERRIDE_THIS +Release: 00 +License: ASL 2.0 +Summary: Container Cluster Manager +Requires: kubelet >= %{version} +Requires: kubectl >= %{version} +Requires: kubernetes-cni + +URL: https://kubernetes.io + +%description +Command-line utility for administering a Kubernetes cluster. + +%install +install -m 755 -d %{buildroot}%{_bindir} +install -m 755 -d %{buildroot}%{_sysconfdir}/systemd/system/ +install -m 755 -d %{buildroot}%{_sysconfdir}/systemd/system/kubelet.service.d/ +install -p -m 755 -t %{buildroot}%{_bindir} kubeadm +install -p -m 755 -t %{buildroot}%{_sysconfdir}/systemd/system/kubelet.service.d/ 10-kubeadm.conf + +%files +%{_bindir}/kubeadm +%{_sysconfdir}/systemd/system/kubelet.service.d/10-kubeadm.conf diff --git a/build/rpms/kubectl.spec b/build/rpms/kubectl.spec new file mode 100644 index 00000000000..efb4743bbb7 --- /dev/null +++ b/build/rpms/kubectl.spec @@ -0,0 +1,18 @@ +Name: kubectl +Version: OVERRIDE_THIS +Release: 00 +License: ASL 2.0 +Summary: Container Cluster Manager + +URL: https://kubernetes.io + +%description +Command-line utility for interacting with a Kubernetes cluster. + +%install + +install -m 755 -d %{buildroot}%{_bindir} +install -p -m 755 -t %{buildroot}%{_bindir} kubectl + +%files +%{_bindir}/kubectl diff --git a/build/rpms/kubelet.service b/build/rpms/kubelet.service new file mode 100644 index 00000000000..9712664deaf --- /dev/null +++ b/build/rpms/kubelet.service @@ -0,0 +1,12 @@ +[Unit] +Description=kubelet: The Kubernetes Node Agent +Documentation=http://kubernetes.io/docs/ + +[Service] +ExecStart=/usr/bin/kubelet +Restart=always +StartLimitInterval=0 +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/build/rpms/kubelet.spec b/build/rpms/kubelet.spec new file mode 100644 index 00000000000..ea5f2d63d53 --- /dev/null +++ b/build/rpms/kubelet.spec @@ -0,0 +1,31 @@ +Name: kubelet +Version: OVERRIDE_THIS +Release: 00 +License: ASL 2.0 +Summary: Container Cluster Manager + +URL: https://kubernetes.io + +Requires: iptables >= 1.4.21 +Requires: kubernetes-cni >= 0.5.1 +Requires: socat +Requires: util-linux +Requires: ethtool +Requires: iproute +Requires: ebtables + +%description +The node agent of Kubernetes, the container cluster manager. + +%install + +install -m 755 -d %{buildroot}%{_bindir} +install -m 755 -d %{buildroot}%{_sysconfdir}/systemd/system/ +install -m 755 -d %{buildroot}%{_sysconfdir}/kubernetes/manifests/ +install -p -m 755 -t %{buildroot}%{_bindir} kubelet +install -p -m 755 -t %{buildroot}%{_sysconfdir}/systemd/system/ kubelet.service + +%files +%{_bindir}/kubelet +%{_sysconfdir}/systemd/system/kubelet.service +%{_sysconfdir}/kubernetes/manifests/ diff --git a/build/rpms/kubernetes-cni.spec b/build/rpms/kubernetes-cni.spec new file mode 100644 index 00000000000..8e0b7bc5194 --- /dev/null +++ b/build/rpms/kubernetes-cni.spec @@ -0,0 +1,23 @@ +Name: kubernetes-cni +Version: OVERRIDE_THIS +Release: 00 +License: ASL 2.0 +Summary: Container Cluster Manager + +URL: https://kubernetes.io + +%description +Binaries required to provision container networking. + +%prep +tar xzfv cni-*.tar.gz + +%install + +install -m 755 -d %{buildroot}%{_sysconfdir}/cni/net.d/ +install -m 755 -d %{buildroot}/opt/cni +mv bin/ %{buildroot}/opt/cni/ + +%files +/opt/cni +%{_sysconfdir}/cni/net.d/ diff --git a/build/visible_to/BUILD b/build/visible_to/BUILD index e11abe25dcf..7de7ce3d3de 100644 --- a/build/visible_to/BUILD +++ b/build/visible_to/BUILD @@ -40,6 +40,7 @@ package_group( packages = [ "//build", "//build/debs", + "//build/rpms", ], )