Skip to content

Commit 0dc0a18

Browse files
committed
*/Dockerfile: generalize for multiple platforms
build/cloudbuild_tools.yaml: update with new Dockerfile args, prettify README.md: add new arches Signed-off-by: Eric Stroczynski <[email protected]>
1 parent 3147a65 commit 0dc0a18

File tree

4 files changed

+97
-51
lines changed

4 files changed

+97
-51
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ GCP Cloud Build watches this branch. On every push, it runs the pipeline define
1515

1616
- `_GOARCH=amd64 _GOOS=darwin`
1717
- `_GOARCH=amd64 _GOOS=linux`
18+
- `_GOARCH=arm64 _GOOS=linux`
19+
- `_GOARCH=ppc64le _GOOS=linux`
1820

1921
(we may add more the in the future).
2022

build/cloudbuild_tools.yaml

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,36 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
substitutions:
16+
_KUBERNETES_VERSION: v1.19.2
1517
steps:
1618
- name: "gcr.io/cloud-builders/docker"
17-
args: ["build", "-t", "gcr.io/kubebuilder/thirdparty-${_GOOS}:1.20.2", "./build/thirdparty/${_GOOS}"]
19+
args: [
20+
"build",
21+
"--build-arg", "OS=${_GOOS}",
22+
"--build-arg", "ARCH=${_GOARCH}",
23+
"--build-arg", "KUBERNETES_VERSION=${_KUBERNETES_VERSION}",
24+
"-t", "gcr.io/kubebuilder/thirdparty-${_GOOS}-${_GOARCH}:${_KUBERNETES_VERSION}",
25+
"./build/thirdparty/${_GOOS}",
26+
]
1827
# darwin takes forever
1928
timeout: 30m
2029

21-
- name: "gcr.io/kubebuilder/thirdparty-${_GOOS}:1.20.2"
22-
args: ["cp", "/kubebuilder_${_GOOS}_${_GOARCH}.tar.gz", "/workspace/kubebuilder-1.20.2-${_GOOS}-${_GOARCH}.tar.gz"]
23-
env:
24-
- 'GOOS=${_GOOS}'
25-
- 'GOARCH=${_GOARCH}'
26-
- name: 'gcr.io/cloud-builders/gsutil'
27-
args: ['-h', 'Content-Type:application/gzip', 'cp', '/workspace/kubebuilder-1.20.2-${_GOOS}-${_GOARCH}.tar.gz', 'gs://kubebuilder-tools/kubebuilder-tools-1.20.2-${_GOOS}-${_GOARCH}.tar.gz']
28-
env:
29-
- 'GOOS=${_GOOS}'
30-
- 'GOARCH=${_GOARCH}'
31-
images: ["gcr.io/kubebuilder/thirdparty-${_GOOS}:1.20.2"]
30+
- name: "gcr.io/kubebuilder/thirdparty-${_GOOS}-${_GOARCH}:${_KUBERNETES_VERSION}"
31+
args: [
32+
"cp",
33+
"/kubebuilder_${_GOOS}_${_GOARCH}.tar.gz",
34+
"/workspace/kubebuilder-tools-${_KUBERNETES_VERSION}-${_GOOS}-${_GOARCH}.tar.gz",
35+
]
36+
37+
- name: "gcr.io/cloud-builders/gsutil"
38+
args: [
39+
"-h", "Content-Type:application/gzip",
40+
"cp",
41+
"/workspace/kubebuilder-tools-${_KUBERNETES_VERSION}-${_GOOS}-${_GOARCH}.tar.gz",
42+
"gs://kubebuilder-tools/kubebuilder-tools-${_KUBERNETES_VERSION}-${_GOOS}-${_GOARCH}.tar.gz",
43+
]
44+
45+
images: ["gcr.io/kubebuilder/thirdparty-${_GOOS}-${_GOARCH}:${_KUBERNETES_VERSION}"]
3246
# darwin takes forever
3347
timeout: 30m

build/thirdparty/darwin/Dockerfile

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,45 +13,57 @@
1313
# limitations under the License.
1414

1515
# Build or fetch the following binaries for darwin and then host them in a tar.gz file in an alpine image
16-
# - apiserver (build)
16+
# - kube-apiserver (build)
1717
# - kubectl (fetch)
1818
# - etcd (fetch)
1919

20-
FROM golang:1.15 as darwin
21-
# Install tools
22-
ENV CGO 0
23-
ENV DEST /usr/local/kubebuilder/bin/
20+
FROM golang:1.15 as builder
2421

25-
RUN apt update && \
26-
apt install rsync -y && \
27-
apt-get install unzip && \
28-
go get github.com/jteeuwen/go-bindata/go-bindata && \
29-
( mkdir -p $DEST || echo "" )
22+
# Version and platform args.
23+
ARG KUBERNETES_VERSION
24+
ARG ETCD_VERSION=v3.4.9
25+
ARG OS=darwin
26+
ARG ARCH
3027

31-
RUN git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes --depth=1 -b v1.20.2
28+
# Tools path.
29+
ENV DEST /usr/local/kubebuilder/bin/
3230

33-
WORKDIR /go/src/k8s.io/kubernetes
31+
# Install dependencies.
32+
RUN apt update && \
33+
apt install unzip rsync -y && \
34+
mkdir -p $DEST
3435

36+
# kube-apiserver
37+
WORKDIR /kubernetes
38+
RUN git clone https://github.com/kubernetes/kubernetes . --depth=1 -b ${KUBERNETES_VERSION}
39+
ENV CGO 0
3540
# Build for linux first otherwise it won't work for darwin - :(
36-
ENV KUBE_BUILD_PLATFORMS linux/amd64
41+
ENV KUBE_BUILD_PLATFORMS=linux/amd64
3742
RUN make WHAT=cmd/kube-apiserver
38-
ENV KUBE_BUILD_PLATFORMS darwin/amd64
43+
ENV KUBE_BUILD_PLATFORMS=${OS}/${ARCH}
3944
RUN make WHAT=cmd/kube-apiserver && \
4045
cp _output/local/bin/$KUBE_BUILD_PLATFORMS/kube-apiserver $DEST
4146

42-
RUN curl -sLO https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/darwin/amd64/kubectl && \
47+
# kubectl
48+
RUN curl -sLO https://storage.googleapis.com/kubernetes-release/release/${KUBERNETES_VERSION}/bin/${OS}/${ARCH}/kubectl && \
4349
chmod +x kubectl && \
4450
cp kubectl $DEST
4551

46-
ENV ETCD_VERSION="3.4.9"
47-
ENV ETCD_DOWNLOAD_FILE="etcd-v${ETCD_VERSION}-darwin-amd64.zip"
48-
RUN curl -sLO https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-darwin-amd64.zip -o ${ETCD_DOWNLOAD_FILE} && \
49-
unzip -o ${ETCD_DOWNLOAD_FILE} && \
50-
cp etcd-v${ETCD_VERSION}-darwin-amd64/etcd $DEST
52+
# etcd
53+
ENV ETCD_BASE_NAME=etcd-${ETCD_VERSION}-${OS}-${ARCH}
54+
RUN curl -sLO https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/${ETCD_BASE_NAME}.zip && \
55+
unzip -o ${ETCD_BASE_NAME}.zip && \
56+
cp ${ETCD_BASE_NAME}/etcd $DEST
5157

58+
# Package into tarball.
5259
WORKDIR /usr/local
53-
RUN tar -czvf /kubebuilder_darwin_amd64.tar.gz kubebuilder/
60+
RUN tar -czvf /kubebuilder_${OS}_${ARCH}.tar.gz kubebuilder/
5461

55-
# Host the tar.gz file in a thin image
62+
# Copy tarball to final image.
5663
FROM alpine:3.8
57-
COPY --from=darwin /kubebuilder_darwin_amd64.tar.gz /kubebuilder_darwin_amd64.tar.gz
64+
65+
# Platform args.
66+
ARG OS=darwin
67+
ARG ARCH
68+
69+
COPY --from=builder /kubebuilder_${OS}_${ARCH}.tar.gz /

build/thirdparty/linux/Dockerfile

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,52 @@
1313
# limitations under the License.
1414

1515
# Fetch the following into binaries for linux and then host them in a tar.gz file in an alpine image
16-
# - apiserver (fetch)
16+
# - kube-apiserver (fetch)
1717
# - kubectl (fetch)
1818
# - etcd (fetch)
1919

2020
# no need for anything fancy
21-
FROM alpine:3.8 as linux
22-
# Install tools
21+
FROM alpine:3.8 as builder
22+
23+
# Version and platform args.
24+
ARG KUBERNETES_VERSION
25+
ARG ETCD_VERSION=v3.4.9
26+
ARG OS=linux
27+
ARG ARCH
28+
29+
# Tools path.
2330
ENV DEST /usr/local/kubebuilder/bin/
2431

32+
# Install dependencies.
2533
RUN apk add --no-cache curl && \
26-
mkdir -p $DEST || echo ""
34+
mkdir -p $DEST
35+
36+
# kube-apiserver
37+
ENV K8S_SERVER_BASE_NAME=kubernetes-server-${OS}-${ARCH}
38+
RUN curl -sLO https://dl.k8s.io/${KUBERNETES_VERSION}/${K8S_SERVER_BASE_NAME}.tar.gz && \
39+
tar xzf ${K8S_SERVER_BASE_NAME}.tar.gz && \
40+
cp kubernetes/server/bin/kube-apiserver $DEST
2741

28-
RUN curl -sLO https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl && \
42+
# kubectl
43+
RUN curl -sLO https://storage.googleapis.com/kubernetes-release/release/${KUBERNETES_VERSION}/bin/${OS}/${ARCH}/kubectl && \
2944
chmod +x kubectl && \
3045
cp kubectl $DEST
3146

32-
RUN curl -sLO https://dl.k8s.io/v1.20.2/kubernetes-server-linux-amd64.tar.gz && \
33-
tar xzf kubernetes-server-linux-amd64.tar.gz && \
34-
cp kubernetes/server/bin/kube-apiserver $DEST
35-
36-
ENV ETCD_VERSION="3.4.9"
37-
ENV ETCD_DOWNLOAD_FILE="etcd-v${ETCD_VERSION}-linux-amd64.tar.gz"
38-
RUN curl -sLO https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz -o ${ETCD_DOWNLOAD_FILE} && \
39-
tar xzf ${ETCD_DOWNLOAD_FILE} && \
40-
cp etcd-v${ETCD_VERSION}-linux-amd64/etcd $DEST
47+
# etcd
48+
ENV ETCD_BASE_NAME=etcd-${ETCD_VERSION}-${OS}-${ARCH}
49+
RUN curl -sLO https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/${ETCD_BASE_NAME}.tar.gz && \
50+
tar xzf ${ETCD_BASE_NAME}.tar.gz && \
51+
cp ${ETCD_BASE_NAME}/etcd $DEST
4152

53+
# Package into tarball.
4254
WORKDIR /usr/local
43-
RUN tar -czvf /kubebuilder_linux_amd64.tar.gz kubebuilder/
55+
RUN tar -czvf /kubebuilder_${OS}_${ARCH}.tar.gz kubebuilder/
4456

57+
# Copy tarball to final image.
4558
FROM alpine:3.8
46-
COPY --from=linux /kubebuilder_linux_amd64.tar.gz /kubebuilder_linux_amd64.tar.gz
59+
60+
# Platform args.
61+
ARG OS=linux
62+
ARG ARCH
63+
64+
COPY --from=builder /kubebuilder_${OS}_${ARCH}.tar.gz /

0 commit comments

Comments
 (0)