Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
dfdfc2e5
Commit
dfdfc2e5
authored
Feb 08, 2019
by
Jeff Grafton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make debs, rpms, and docker images multiarch
parent
7a938eb5
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
216 additions
and
88 deletions
+216
-88
BUILD
build/BUILD
+25
-8
BUILD
build/debs/BUILD
+101
-54
platforms.bzl
build/platforms.bzl
+36
-0
BUILD
build/rpms/BUILD
+54
-26
No files found.
build/BUILD
View file @
dfdfc2e5
...
@@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"])
...
@@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"])
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle", "container_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle", "container_image")
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
load(":code_generation_test.bzl", "code_generation_test_suite")
load(":code_generation_test.bzl", "code_generation_test_suite")
load(":platforms.bzl", "for_platforms")
code_generation_test_suite(
code_generation_test_suite(
name = "code_generation_tests",
name = "code_generation_tests",
...
@@ -30,23 +31,38 @@ filegroup(
...
@@ -30,23 +31,38 @@ filegroup(
# in build/common.sh.
# in build/common.sh.
DOCKERIZED_BINARIES = {
DOCKERIZED_BINARIES = {
"cloud-controller-manager": {
"cloud-controller-manager": {
"base": "@debian-base-amd64//image",
"base": select(for_platforms(
for_node = "@debian-base-{ARCH}//image",
only_os = "linux",
)),
"target": "//cmd/cloud-controller-manager:cloud-controller-manager",
"target": "//cmd/cloud-controller-manager:cloud-controller-manager",
},
},
"kube-apiserver": {
"kube-apiserver": {
"base": "@debian-base-amd64//image",
"base": select(for_platforms(
for_node = "@debian-base-{ARCH}//image",
only_os = "linux",
)),
"target": "//cmd/kube-apiserver:kube-apiserver",
"target": "//cmd/kube-apiserver:kube-apiserver",
},
},
"kube-controller-manager": {
"kube-controller-manager": {
"base": "@debian-base-amd64//image",
"base": select(for_platforms(
for_node = "@debian-base-{ARCH}//image",
only_os = "linux",
)),
"target": "//cmd/kube-controller-manager:kube-controller-manager",
"target": "//cmd/kube-controller-manager:kube-controller-manager",
},
},
"kube-scheduler": {
"kube-scheduler": {
"base": "@debian-base-amd64//image",
"base": select(for_platforms(
for_node = "@debian-base-{ARCH}//image",
only_os = "linux",
)),
"target": "//cmd/kube-scheduler:kube-scheduler",
"target": "//cmd/kube-scheduler:kube-scheduler",
},
},
"kube-proxy": {
"kube-proxy": {
"base": "@debian-iptables-amd64//image",
"base": select(for_platforms(
for_node = "@debian-iptables-{ARCH}//image",
only_os = "linux",
)),
"target": "//cmd/kube-proxy:kube-proxy",
"target": "//cmd/kube-proxy:kube-proxy",
},
},
}
}
...
@@ -55,9 +71,10 @@ DOCKERIZED_BINARIES = {
...
@@ -55,9 +71,10 @@ DOCKERIZED_BINARIES = {
name = binary + "-internal",
name = binary + "-internal",
base = meta["base"],
base = meta["base"],
cmd = ["/usr/bin/" + binary],
cmd = ["/usr/bin/" + binary],
debs = [
debs = select(for_platforms(
"//build/debs:%s.deb" % binary,
for_node = ["//build/debs:%s-{ARCH}.deb" % binary],
],
only_os = "linux",
)),
stamp = True,
stamp = True,
symlinks = {
symlinks = {
# Some cluster startup scripts expect to find the binaries in /usr/local/bin,
# Some cluster startup scripts expect to find the binaries in /usr/local/bin,
...
...
build/debs/BUILD
View file @
dfdfc2e5
package(default_visibility = ["//visibility:public"])
package(default_visibility = ["//visibility:public"])
load("@io_k8s_repo_infra//defs:deb.bzl", "
k8s_deb", "deb_data
")
load("@io_k8s_repo_infra//defs:deb.bzl", "
deb_data", "k8s_deb
")
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
load("@io_k8s_repo_infra//defs:pkg.bzl", "pkg_tar")
load("@io_k8s_repo_infra//defs:pkg.bzl", "pkg_tar")
load(
"//build:platforms.bzl",
"CLIENT_PLATFORMS",
"NODE_PLATFORMS",
"SERVER_PLATFORMS",
"for_platforms",
)
load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
# We do not include kube-scheduler, kube-controller-manager,
# We do not include kube-scheduler, kube-controller-manager,
...
@@ -12,44 +19,72 @@ load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
...
@@ -12,44 +19,72 @@ load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
# images.
# images.
release_filegroup(
release_filegroup(
name = "debs",
name = "debs",
srcs = [
conditioned_srcs = for_platforms(
":cri-tools.deb",
default = [],
":kubeadm.deb",
for_client = [":kubectl-{ARCH}.deb"],
":kubectl.deb",
for_node = [
":kubelet.deb",
":cri-tools-{ARCH}.deb",
":kubernetes-cni.deb",
":kubeadm-{ARCH}.deb",
],
":kubelet-{ARCH}.deb",
)
":kubernetes-cni-{ARCH}.deb",
],
only_os = "linux",
),
)
# Create aliases from the non-arch names to the arch-specific names for backwards compatibility
alias(
name = "kubectl",
actual = select(for_platforms(
for_client = ":kubectl-{ARCH}",
only_os = "linux",
)),
)
[alias(
name = pkg,
actual = select(for_platforms(
for_node = ":%s-{ARCH}" % pkg,
only_os = "linux",
)),
) for pkg in [
"cri-tools",
"kubeadm",
"kubelet",
"kubernetes-cni",
]]
[deb_data(
[deb_data(
name =
binary
,
name =
"kubectl"
,
data = [
data = [
{
{
"files": ["//cmd/
" + binary
],
"files": ["//cmd/
kubectl"
],
"mode": "0755",
"mode": "0755",
"dir": "/usr/bin",
"dir": "/usr/bin",
},
},
],
],
) for binary in [
goarch = arch,
"cloud-controller-manager",
) for arch in CLIENT_PLATFORMS["linux"]]
"kubectl",
"kube-apiserver",
"kube-controller-manager",
"kube-proxy",
]]
deb_data(
[[
deb_data(
name =
"kube-scheduler"
,
name =
binary
,
data = [
data = [
{
{
"files": ["//cmd/
kube-scheduler"
],
"files": ["//cmd/
" + binary
],
"mode": "0755",
"mode": "0755",
"dir": "/usr/bin",
"dir": "/usr/bin",
},
},
],
],
)
goarch = arch,
) for binary in [
"cloud-controller-manager",
"kube-apiserver",
"kube-controller-manager",
"kube-proxy",
"kube-scheduler",
]] for arch in SERVER_PLATFORMS["linux"]]
deb_data(
[
deb_data(
name = "kubelet",
name = "kubelet",
data = [
data = [
{
{
...
@@ -63,9 +98,10 @@ deb_data(
...
@@ -63,9 +98,10 @@ deb_data(
"dir": "/lib/systemd/system",
"dir": "/lib/systemd/system",
},
},
],
],
)
goarch = arch,
) for arch in NODE_PLATFORMS["linux"]]
deb_data(
[
deb_data(
name = "kubeadm",
name = "kubeadm",
data = [
data = [
{
{
...
@@ -89,63 +125,70 @@ deb_data(
...
@@ -89,63 +125,70 @@ deb_data(
"dir": "/etc/sysctl.d",
"dir": "/etc/sysctl.d",
},
},
],
],
)
goarch = arch,
) for arch in NODE_PLATFORMS["linux"]]
pkg_tar(
[
pkg_tar(
name = "kubernetes-cni-data
"
,
name = "kubernetes-cni-data
-%s" % goarch
,
package_dir = "/opt/cni/bin",
package_dir = "/opt/cni/bin",
deps = ["@kubernetes_cni
//file"
],
deps = ["@kubernetes_cni
_%s//file" % goarch
],
)
)
for goarch in NODE_PLATFORMS["linux"]]
pkg_tar(
[
pkg_tar(
name = "cri-tools-data
"
,
name = "cri-tools-data
-%s" % goarch
,
package_dir = "/usr/bin",
package_dir = "/usr/bin",
deps = ["@cri_tools
//file"
],
deps = ["@cri_tools
_%s//file" % goarch
],
)
)
for goarch in NODE_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "cloud-controller-manager",
name = "cloud-controller-manager",
description = "Kubernetes Cloud Controller Manager",
description = "Kubernetes Cloud Controller Manager",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in SERVER_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kubectl",
name = "kubectl",
description = """Kubernetes Command Line Tool
description = """Kubernetes Command Line Tool
The Kubernetes command line tool for interacting with the Kubernetes API.
The Kubernetes command line tool for interacting with the Kubernetes API.
""",
""",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in CLIENT_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kube-apiserver",
name = "kube-apiserver",
description = "Kubernetes API Server",
description = "Kubernetes API Server",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in SERVER_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kube-controller-manager",
name = "kube-controller-manager",
description = "Kubernetes Controller Manager",
description = "Kubernetes Controller Manager",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in SERVER_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kube-scheduler",
name = "kube-scheduler",
description = "Kubernetes Scheduler",
description = "Kubernetes Scheduler",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in SERVER_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kube-proxy",
name = "kube-proxy",
depends = [
depends = [
"iptables (>= 1.4.21)",
"iptables (>= 1.4.21)",
"iproute2",
"iproute2",
],
],
description = "Kubernetes Service Proxy",
description = "Kubernetes Service Proxy",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in NODE_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kubelet",
name = "kubelet",
depends = [
depends = [
"conntrack",
"conntrack",
...
@@ -161,10 +204,11 @@ k8s_deb(
...
@@ -161,10 +204,11 @@ k8s_deb(
description = """Kubernetes Node Agent
description = """Kubernetes Node Agent
The node agent of Kubernetes, the container cluster manager
The node agent of Kubernetes, the container cluster manager
""",
""",
goarch = arch,
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in NODE_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kubeadm",
name = "kubeadm",
depends = [
depends = [
"kubelet (>= 1.8.0)",
"kubelet (>= 1.8.0)",
...
@@ -175,23 +219,26 @@ k8s_deb(
...
@@ -175,23 +219,26 @@ k8s_deb(
description = """Kubernetes Cluster Bootstrapping Tool
description = """Kubernetes Cluster Bootstrapping Tool
The Kubernetes command line tool for bootstrapping a Kubernetes cluster.
The Kubernetes command line tool for bootstrapping a Kubernetes cluster.
""",
""",
goarch = arch,
postinst = "postinst",
postinst = "postinst",
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in NODE_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "kubernetes-cni",
name = "kubernetes-cni",
description = """Kubernetes Packaging of CNI
description = """Kubernetes Packaging of CNI
The Container Networking Interface tools for provisioning container networks.
The Container Networking Interface tools for provisioning container networks.
""",
""",
goarch = arch,
version = CNI_VERSION,
version = CNI_VERSION,
)
)
for arch in NODE_PLATFORMS["linux"]]
k8s_deb(
[
k8s_deb(
name = "cri-tools",
name = "cri-tools",
description = """Container Runtime Interface tools (crictl)""",
description = """Container Runtime Interface tools (crictl)""",
goarch = arch,
version = CRI_TOOLS_VERSION,
version = CRI_TOOLS_VERSION,
)
)
for arch in NODE_PLATFORMS["linux"]]
filegroup(
filegroup(
name = "package-srcs",
name = "package-srcs",
...
...
build/platforms.bzl
View file @
dfdfc2e5
...
@@ -73,3 +73,39 @@ TEST_PLATFORMS = {
...
@@ -73,3 +73,39 @@ TEST_PLATFORMS = {
"amd64",
"amd64",
],
],
}
}
def go_platform_constraint(os, arch):
return "@io_bazel_rules_go//go/platform:%s_%s" % (os, arch)
def _update_dict_for_platform_category(d, value, platforms, only_os = None):
if not value:
return
for os, arches in platforms.items():
if only_os and os != only_os:
continue
for arch in arches:
constraint = go_platform_constraint(os, arch)
if type(value) == "list":
d.setdefault(constraint, []).extend(
[v.format(OS = os, ARCH = arch) for v in value],
)
else:
if constraint in d:
fail("duplicate entry for constraint %s", constraint)
d[constraint] = value.format(OS = os, ARCH = arch)
def for_platforms(
for_client = None,
for_node = None,
for_server = None,
for_test = None,
default = None,
only_os = None):
d = {}
if default != None:
d["//conditions:default"] = default
_update_dict_for_platform_category(d, for_client, CLIENT_PLATFORMS, only_os)
_update_dict_for_platform_category(d, for_node, NODE_PLATFORMS, only_os)
_update_dict_for_platform_category(d, for_server, SERVER_PLATFORMS, only_os)
_update_dict_for_platform_category(d, for_test, TEST_PLATFORMS, only_os)
return d
build/rpms/BUILD
View file @
dfdfc2e5
package(default_visibility = ["//visibility:public"])
package(default_visibility = ["//visibility:public"])
load("
@bazel_tools//tools/build_defs/pkg:rpm.bzl", "pkg_rpm
")
load("
//build:platforms.bzl", "CLIENT_PLATFORMS", "NODE_PLATFORMS", "for_platforms
")
load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
load("//build:workspace.bzl", "CNI_VERSION", "CRI_TOOLS_VERSION")
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
load("@io_k8s_repo_infra//defs:rpm.bzl", "pkg_rpm_for_goarch")
filegroup(
release_
filegroup(
name = "rpms",
name = "rpms",
srcs = [
conditioned_srcs = for_platforms(
":cri-tools",
default = [],
":kubeadm",
for_client = [":kubectl-{ARCH}"],
":kubectl",
for_node = [
":kubelet",
":cri-tools-{ARCH}",
":kubernetes-cni",
":kubeadm-{ARCH}",
],
":kubelet-{ARCH}",
":kubernetes-cni-{ARCH}",
],
only_os = "linux",
),
tags = ["manual"],
tags = ["manual"],
visibility = ["//visibility:public"],
visibility = ["//visibility:public"],
)
)
pkg_rpm(
# Create aliases from the non-arch names to the arch-specific names for backwards compatibility
alias(
name = "kubectl",
actual = select(for_platforms(
for_client = ":kubectl-{ARCH}",
only_os = "linux",
)),
)
[alias(
name = pkg,
actual = select(for_platforms(
for_client = ":%s-{ARCH}" % pkg,
only_os = "linux",
)),
) for pkg in [
"cri-tools",
"kubeadm",
"kubelet",
"kubernetes-cni",
]]
[pkg_rpm_for_goarch(
name = "kubectl",
name = "kubectl",
architecture = "x86_64",
changelog = "//:CHANGELOG.md",
changelog = "//:CHANGELOG.md",
data = [
data = [
"//cmd/kubectl",
"//cmd/kubectl",
],
],
goarch = arch,
spec_file = "kubectl.spec",
spec_file = "kubectl.spec",
tags = ["manual"],
tags = ["manual"],
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in CLIENT_PLATFORMS["linux"]]
pkg_rpm
(
[pkg_rpm_for_goarch
(
name = "kubelet",
name = "kubelet",
architecture = "x86_64",
changelog = "//:CHANGELOG.md",
changelog = "//:CHANGELOG.md",
data = [
data = [
"kubelet.service",
"kubelet.service",
"//cmd/kubelet",
"//cmd/kubelet",
],
],
goarch = arch,
spec_file = "kubelet.spec",
spec_file = "kubelet.spec",
tags = ["manual"],
tags = ["manual"],
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in NODE_PLATFORMS["linux"]]
pkg_rpm
(
[pkg_rpm_for_goarch
(
name = "kubeadm",
name = "kubeadm",
architecture = "x86_64",
changelog = "//:CHANGELOG.md",
changelog = "//:CHANGELOG.md",
data = [
data = [
"10-kubeadm.conf",
"10-kubeadm.conf",
...
@@ -52,33 +79,34 @@ pkg_rpm(
...
@@ -52,33 +79,34 @@ pkg_rpm(
"kubelet.env",
"kubelet.env",
"//cmd/kubeadm",
"//cmd/kubeadm",
],
],
goarch = arch,
spec_file = "kubeadm.spec",
spec_file = "kubeadm.spec",
tags = ["manual"],
tags = ["manual"],
version_file = "//build:os_package_version",
version_file = "//build:os_package_version",
)
)
for arch in NODE_PLATFORMS["linux"]]
pkg_rpm
(
[pkg_rpm_for_goarch
(
name = "kubernetes-cni",
name = "kubernetes-cni",
architecture = "x86_64",
changelog = "//:CHANGELOG.md",
changelog = "//:CHANGELOG.md",
data = [
data = [
"@kubernetes_cni//file",
"@kubernetes_cni
_{GOARCH}
//file",
],
],
goarch = arch,
spec_file = "kubernetes-cni.spec",
spec_file = "kubernetes-cni.spec",
tags = ["manual"],
tags = ["manual"],
version = CNI_VERSION,
version = CNI_VERSION,
)
)
for arch in NODE_PLATFORMS["linux"]]
pkg_rpm
(
[pkg_rpm_for_goarch
(
name = "cri-tools",
name = "cri-tools",
architecture = "x86_64",
data = [
data = [
"@cri_tools//file",
"@cri_tools
_{GOARCH}
//file",
],
],
goarch = arch,
spec_file = "cri-tools.spec",
spec_file = "cri-tools.spec",
tags = ["manual"],
tags = ["manual"],
version = CRI_TOOLS_VERSION,
version = CRI_TOOLS_VERSION,
)
)
for arch in NODE_PLATFORMS["linux"]]
filegroup(
filegroup(
name = "package-srcs",
name = "package-srcs",
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment