diff --git a/Makefile b/Makefile index 6c779e3..c77ee7d 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,18 @@ # note: call scripts from /scripts -.PHONY: default build builder-image binary-image test stop clean-images clean push apply deploy +.PHONY: default build builder-image binary-image test stop clean-images clean push apply deploy release release-all manifest push clean-image -BUILDER ?= reloader-builder +OS ?= linux +ARCH ?= ??? +ALL_ARCH ?= arm64 arm amd64 + +BUILDER ?= reloader-builder-${ARCH} BINARY ?= Reloader DOCKER_IMAGE ?= stakater/reloader # Default value "dev" -DOCKER_TAG ?= 1.0.0 -REPOSITORY = ${DOCKER_IMAGE}:${DOCKER_TAG} +TAG ?= v0.0.75.0 +REPOSITORY_GENERIC = ${DOCKER_IMAGE}:${TAG} +REPOSITORY_ARCH = ${DOCKER_IMAGE}:${TAG}-${ARCH} VERSION=$(shell cat .version) BUILD= @@ -25,10 +30,35 @@ build: "$(GOCMD)" build ${GOFLAGS} ${LDFLAGS} -o "${BINARY}" builder-image: - @docker build --network host -t "${BUILDER}" -f build/package/Dockerfile.build . + docker buildx build --platform ${OS}/${ARCH} --build-arg GOARCH=$(ARCH) -t "${BUILDER}" --load -f build/package/Dockerfile.build . + +reloader-${ARCH}.tar: + docker buildx build --platform ${OS}/${ARCH} --build-arg GOARCH=$(ARCH) -t "${BUILDER}" --load -f build/package/Dockerfile.build . + docker run --platform ${OS}/${ARCH} --rm "${BUILDER}" > reloader-${ARCH}.tar binary-image: builder-image - @docker run --network host --rm "${BUILDER}" | docker build --network host -t "${REPOSITORY}" -f Dockerfile.run - + cat reloader-${ARCH}.tar | docker buildx build --platform ${OS}/${ARCH} -t "${REPOSITORY_ARCH}" --load -f Dockerfile.run - + +push: + docker push ${REPOSITORY_ARCH} + +release: binary-image push manifest + +release-all: + -rm -rf ~/.docker/manifests/* + # Make arch-specific release + @for arch in $(ALL_ARCH) ; do \ + echo Make release: $$arch ; \ + make release ARCH=$$arch ; \ + done + + set -e + docker manifest push --purge $(REPOSITORY_GENERIC) + +manifest: + set -e + docker manifest create -a $(REPOSITORY_GENERIC) $(REPOSITORY_ARCH) + docker manifest annotate --arch $(ARCH) $(REPOSITORY_GENERIC) $(REPOSITORY_ARCH) test: "$(GOCMD)" test -timeout 1800s -v ./... @@ -37,13 +67,21 @@ stop: @docker stop "${BINARY}" clean-images: stop - @docker rmi "${BUILDER}" "${BINARY}" + -docker rmi "${BINARY}" + @for arch in $(ALL_ARCH) ; do \ + echo Clean image: $$arch ; \ + make clean-image ARCH=$$arch ; \ + done + -docker rmi "${REPOSITORY_GENERIC}" + +clean-image: + -docker rmi "${BUILDER}" + -docker rmi "${REPOSITORY_ARCH}" + -rm -rf ~/.docker/manifests/* clean: "$(GOCMD)" clean -i - -push: ## push the latest Docker image to DockerHub - docker push $(REPOSITORY) + -rm -rf reloader-*.tar apply: kubectl apply -f deployments/manifests/ -n temp-reloader diff --git a/README.md b/README.md index 7f7f6c0..84c153c 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ Reloader can watch changes in `ConfigMap` and `Secret` and do rolling upgrades o ## Compatibility Reloader is compatible with kubernetes >= 1.9 -The `apiVersion: rbac.authorization.k8s.io/v1beta1` is depreciated since kubernetes = 1.17. To run it with older versions, please use the chart parameter `reloader.legacy.rbac=true` ## How to use Reloader @@ -202,12 +201,6 @@ helm repo update helm install stakater/reloader # For helm3 add --generate-name flag or set the release name ``` -**Note:** The latest verion of reloader is using `apiVersion: rbac.authorization.k8s.io/v1` for rbac. The `apiVersion: rbac.authorization.k8s.io/v1beta1` is depreciated since kubernetes = 1.17. To run it with older versions, please use below command. - -```bash -helm install stakater/reloader --set reloader.legacy.rbac=true # For helm3 add --generate-name flag or set the release name -``` - **Note:** By default reloader watches in all namespaces. To watch in single namespace, please run following command. It will install reloader in `test` namespace which will only watch `Deployments`, `Daemonsets` and `Statefulsets` in `test` namespace. ```bash diff --git a/build/package/Dockerfile.build b/build/package/Dockerfile.build index 9406ea6..2162b66 100644 --- a/build/package/Dockerfile.build +++ b/build/package/Dockerfile.build @@ -1,6 +1,8 @@ FROM golang:1.15.2-alpine LABEL maintainer "Stakater Team" +ARG GOARCH=amd64 + RUN apk -v --update \ --no-cache \ add git build-base @@ -13,7 +15,7 @@ RUN go mod download COPY . . -ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64 +ENV CGO_ENABLED=0 GOOS=linux GOARCH=$GOARCH RUN go build -a --installsuffix cgo --ldflags="-s" -o /Reloader diff --git a/deployments/kubernetes/chart/reloader/Chart.yaml b/deployments/kubernetes/chart/reloader/Chart.yaml index 2696877..2265996 100644 --- a/deployments/kubernetes/chart/reloader/Chart.yaml +++ b/deployments/kubernetes/chart/reloader/Chart.yaml @@ -3,8 +3,8 @@ apiVersion: v1 name: reloader description: Reloader chart that runs on kubernetes -version: v0.0.76 -appVersion: v0.0.76 +version: v0.0.77 +appVersion: v0.0.77 keywords: - Reloader - kubernetes diff --git a/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml b/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml index c3f0817..b9e7206 100644 --- a/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml +++ b/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml @@ -1,8 +1,8 @@ {{- if and .Values.reloader.watchGlobally (.Values.reloader.rbac.enabled) }} -{{- if and .Values.reloader.legacy.rbac }} -apiVersion: rbac.authorization.k8s.io/v1beta1 -{{ else }} +{{- if (.Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1") }} apiVersion: rbac.authorization.k8s.io/v1 +{{ else }} +apiVersion: rbac.authorization.k8s.io/v1beta1 {{- end }} kind: ClusterRole metadata: diff --git a/deployments/kubernetes/chart/reloader/templates/clusterrolebinding.yaml b/deployments/kubernetes/chart/reloader/templates/clusterrolebinding.yaml index fd4e341..8488e3f 100644 --- a/deployments/kubernetes/chart/reloader/templates/clusterrolebinding.yaml +++ b/deployments/kubernetes/chart/reloader/templates/clusterrolebinding.yaml @@ -1,8 +1,8 @@ {{- if and .Values.reloader.watchGlobally (.Values.reloader.rbac.enabled) }} -{{- if and .Values.reloader.legacy.rbac }} -apiVersion: rbac.authorization.k8s.io/v1beta1 -{{ else }} +{{- if (.Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1") }} apiVersion: rbac.authorization.k8s.io/v1 +{{ else }} +apiVersion: rbac.authorization.k8s.io/v1beta1 {{- end }} kind: ClusterRoleBinding metadata: diff --git a/deployments/kubernetes/chart/reloader/templates/role.yaml b/deployments/kubernetes/chart/reloader/templates/role.yaml index 81d6c66..c7c8e2f 100644 --- a/deployments/kubernetes/chart/reloader/templates/role.yaml +++ b/deployments/kubernetes/chart/reloader/templates/role.yaml @@ -1,8 +1,8 @@ {{- if and (not (.Values.reloader.watchGlobally)) (.Values.reloader.rbac.enabled) }} -{{- if and .Values.reloader.legacy.rbac }} -apiVersion: rbac.authorization.k8s.io/v1beta1 -{{ else }} +{{- if (.Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1") }} apiVersion: rbac.authorization.k8s.io/v1 +{{ else }} +apiVersion: rbac.authorization.k8s.io/v1beta1 {{- end }} kind: Role metadata: diff --git a/deployments/kubernetes/chart/reloader/templates/rolebinding.yaml b/deployments/kubernetes/chart/reloader/templates/rolebinding.yaml index 0a1d074..dea3e8a 100644 --- a/deployments/kubernetes/chart/reloader/templates/rolebinding.yaml +++ b/deployments/kubernetes/chart/reloader/templates/rolebinding.yaml @@ -1,14 +1,14 @@ {{- if and (not (.Values.reloader.watchGlobally)) (.Values.reloader.rbac.enabled) }} -{{- if and .Values.reloader.legacy.rbac }} -apiVersion: rbac.authorization.k8s.io/v1beta1 -{{ else }} +{{- if (.Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1") }} apiVersion: rbac.authorization.k8s.io/v1 +{{ else }} +apiVersion: rbac.authorization.k8s.io/v1beta1 {{- end }} kind: RoleBinding metadata: annotations: {{ include "reloader-helm3.annotations" . | indent 4 }} - labels: + labels: {{ include "reloader-labels.chart" . | indent 4 }} {{- if .Values.reloader.rbac.labels }} {{ toYaml .Values.reloader.rbac.labels | indent 4 }} diff --git a/deployments/kubernetes/chart/reloader/values.yaml b/deployments/kubernetes/chart/reloader/values.yaml index 0f156d3..fa9859a 100644 --- a/deployments/kubernetes/chart/reloader/values.yaml +++ b/deployments/kubernetes/chart/reloader/values.yaml @@ -51,10 +51,10 @@ reloader: labels: provider: stakater group: com.stakater.platform - version: v0.0.76 + version: v0.0.77 image: name: stakater/reloader - tag: "v0.0.76" + tag: "v0.0.77" pullPolicy: IfNotPresent # Support for extra environment variables. env: diff --git a/deployments/kubernetes/manifests/clusterrole.yaml b/deployments/kubernetes/manifests/clusterrole.yaml index 516c421..11f38bb 100644 --- a/deployments/kubernetes/manifests/clusterrole.yaml +++ b/deployments/kubernetes/manifests/clusterrole.yaml @@ -1,7 +1,7 @@ --- # Source: reloader/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 +apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: annotations: @@ -9,7 +9,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" diff --git a/deployments/kubernetes/manifests/clusterrolebinding.yaml b/deployments/kubernetes/manifests/clusterrolebinding.yaml index 77795c9..678d537 100644 --- a/deployments/kubernetes/manifests/clusterrolebinding.yaml +++ b/deployments/kubernetes/manifests/clusterrolebinding.yaml @@ -1,7 +1,7 @@ --- # Source: reloader/templates/clusterrolebinding.yaml -apiVersion: rbac.authorization.k8s.io/v1 +apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: annotations: @@ -9,7 +9,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" diff --git a/deployments/kubernetes/manifests/deployment.yaml b/deployments/kubernetes/manifests/deployment.yaml index 8c0ac78..fd132a7 100644 --- a/deployments/kubernetes/manifests/deployment.yaml +++ b/deployments/kubernetes/manifests/deployment.yaml @@ -8,13 +8,13 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" group: com.stakater.platform provider: stakater - version: v0.0.76 + version: v0.0.77 name: reloader-reloader spec: @@ -28,17 +28,17 @@ spec: metadata: labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" group: com.stakater.platform provider: stakater - version: v0.0.76 + version: v0.0.77 spec: containers: - - image: "stakater/reloader:v0.0.76" + - image: "stakater/reloader:v0.0.77" imagePullPolicy: IfNotPresent name: reloader-reloader diff --git a/deployments/kubernetes/manifests/serviceaccount.yaml b/deployments/kubernetes/manifests/serviceaccount.yaml index 4497160..67215c2 100644 --- a/deployments/kubernetes/manifests/serviceaccount.yaml +++ b/deployments/kubernetes/manifests/serviceaccount.yaml @@ -9,7 +9,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" diff --git a/deployments/kubernetes/reloader.yaml b/deployments/kubernetes/reloader.yaml index 2517ce5..811290c 100644 --- a/deployments/kubernetes/reloader.yaml +++ b/deployments/kubernetes/reloader.yaml @@ -1,7 +1,7 @@ --- # Source: reloader/templates/clusterrole.yaml -apiVersion: rbac.authorization.k8s.io/v1 +apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: annotations: @@ -9,7 +9,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" @@ -50,7 +50,7 @@ rules: --- # Source: reloader/templates/clusterrolebinding.yaml -apiVersion: rbac.authorization.k8s.io/v1 +apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: annotations: @@ -58,7 +58,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" @@ -83,13 +83,13 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" group: com.stakater.platform provider: stakater - version: v0.0.76 + version: v0.0.77 name: reloader-reloader spec: @@ -103,17 +103,17 @@ spec: metadata: labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" group: com.stakater.platform provider: stakater - version: v0.0.76 + version: v0.0.77 spec: containers: - - image: "stakater/reloader:v0.0.76" + - image: "stakater/reloader:v0.0.77" imagePullPolicy: IfNotPresent name: reloader-reloader @@ -157,7 +157,7 @@ metadata: meta.helm.sh/release-name: "reloader" labels: app: reloader-reloader - chart: "reloader-v0.0.76" + chart: "reloader-v0.0.77" release: "reloader" heritage: "Tiller" app.kubernetes.io/managed-by: "Tiller" diff --git a/docs/Container Build.md b/docs/Container Build.md new file mode 100644 index 0000000..61344f8 --- /dev/null +++ b/docs/Container Build.md @@ -0,0 +1,41 @@ + +# Container Build +> **WARNING:** As a user of Reloader there is no need to build containers, these are freely available here: https://hub.docker.com/r/stakater/reloader/ + +Multi-architecture approach is based on original work by @mdh02038: https://github.com/mdh02038/Reloader + +Images tested on linux/arm, linux/arm64 and linux/amd64. + +# Install Pre-Reqs +The build environment requires the following packages (tested on Ubuntu 20.04): +* golang +* make +* qemu (for arm, arm64 etc. emulation) +* binfmt-support +* Docker engine + +## Docker +Follow instructions here: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository + +Once installed, enable the experimental CLI: +``` +export DOCKER_CLI_EXPERIMENTAL=enabled +``` +Login, to enable publishing of packages: +``` +sudo docker login +``` +## Remaining Pre-Reqs +Remaining Pre-Reqs can be installed via: +``` +sudo apt install golang make qemu-user-static binfmt-support -y +``` + +# Publish Multi-Architecture Image +To build/ publish multi-arch Docker images clone repository and execute from repository root: +``` +sudo make release-all +``` + +# Additional Links/ Info +* *https://medium.com/@artur.klauser/building-multi-architecture-docker-images-with-buildx-27d80f7e2408 \ No newline at end of file