#!/bin/bash # Build images for Prometheus Operator and dependencies # Run on Linux AMD64 machine due to qemu image for rbac-proxy export DOCKER_CLI_EXPERIMENTAL=enabled REPO=carlosedp export AOR_VERSION=2.3 export PROM_ADAPTER_VERSION=v0.6.0 export KSM_VERSION=v1.9.5 export PROM_OP_VERSION=v0.37.0 export KUBE_RBAC_VERSION=v0.5.0 export PROM_CONFIG_RELOADER_VERSION=v0.37.0 export CONFIGMAP_RELOAD_VERSION=latest #------------------------------------------------------------------------------- # Kubernetes addon-resizer # Retag Addon-resizer google images to have unified manifest on DockerHub ALL_ARCH=(amd64 arm arm64 ppc64le) IMAGE=addon-resizer for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi docker pull gcr.io/google-containers/$IMAGE-$arch:$AOR_VERSION docker tag gcr.io/google-containers/$IMAGE-$arch:$AOR_VERSION $REPO/$IMAGE:$AOR_VERSION-$arch docker push $REPO/$IMAGE:$AOR_VERSION-$arch done docker manifest create --amend $REPO/$IMAGE:$AOR_VERSION `echo $ALL_ARCH | sed -e "s~[^ ]*~$REPO/$IMAGE:$AOR_VERSION\-&~g"` for arch in $ALL_ARCH; do docker manifest annotate --arch $arch $REPO/$IMAGE:$AOR_VERSION $REPO/$IMAGE:$AOR_VERSION-$arch; done docker manifest push --purge $REPO/$IMAGE:$AOR_VERSION for arch in $ALL_ARCH; do docker rmi gcr.io/google-containers/$IMAGE-$arch:$AOR_VERSION docker rmi $REPO/$IMAGE:$AOR_VERSION-$arch done #------------------------------------------------------------------------------- # Prometheus-adapter # Retag prometheus-adapter from directxman12 images to have unified manifest on DockerHub ALL_ARCH=(amd64 arm arm64 ppc64le) IMAGE=k8s-prometheus-adapter for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi docker pull directxman12/$IMAGE-$arch:$PROM_ADAPTER_VERSION docker tag directxman12/$IMAGE-$arch:$PROM_ADAPTER_VERSION $REPO/$IMAGE:$PROM_ADAPTER_VERSION-$arch docker push $REPO/$IMAGE:$PROM_ADAPTER_VERSION-$arch done docker manifest create --amend $REPO/$IMAGE:$PROM_ADAPTER_VERSION `echo $ALL_ARCH | sed -e "s~[^ ]*~$REPO/$IMAGE:$PROM_ADAPTER_VERSION\-&~g"` for arch in $ALL_ARCH; do docker manifest annotate --arch $arch $REPO/$IMAGE:$PROM_ADAPTER_VERSION $REPO/$IMAGE:$PROM_ADAPTER_VERSION-$arch; done docker manifest push --purge $REPO/$IMAGE:$PROM_ADAPTER_VERSION for arch in $ALL_ARCH; do docker rmi directxman12/$IMAGE-$arch:$PROM_ADAPTER_VERSION docker rmi $REPO/$IMAGE:$PROM_ADAPTER_VERSION-$arch done #------------------------------------------------------------------------------- # Kube-state-metrics IMAGE=carlosedp/kube-state-metrics ALL_ARCH=(amd64 arm arm64 ppc64le) rm -rf $GOPATH/src/k8s.io/kube-state-metrics mkdir $GOPATH/src/k8s.io/ pushd $GOPATH/src/k8s.io/ git clone https://github.com/kubernetes/kube-state-metrics -b $KSM_VERSION --depth=1 cd kube-state-metrics for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi CGO_ENABLED=0 GOOS=linux GOARCH=$arch go build -a -installsuffix cgo -ldflags '-s -w -extldflags "-static"' -o kube-state-metrics . docker build -t $REPO/kube-state-metrics:${KSM_VERSION}-$arch . docker push $REPO/kube-state-metrics:$KSM_VERSION-$arch done docker manifest create --amend $IMAGE:$KSM_VERSION `echo $ALL_ARCH | sed -e "s~[^ ]*~$IMAGE:$KSM_VERSION\-&~g"` for arch in $ALL_ARCH; do docker manifest annotate --arch $arch $IMAGE:$KSM_VERSION $IMAGE:$KSM_VERSION-$arch; done docker manifest push --purge $IMAGE:$KSM_VERSION for arch in $ALL_ARCH; do docker rmi $REPO/kube-state-metrics:$KSM_VERSION-$arch done popd #------------------------------------------------------------------------------- # Prometheus-operator IMAGE=carlosedp/prometheus-operator ALL_ARCH=(amd64 arm arm64 ppc64le) rm -rf $GOPATH/src/github.com/coreos/prometheus-operator mkdir -p $GOPATH/src/github.com/coreos/ pushd $GOPATH/src/github.com/coreos/ git clone https://github.com/coreos/prometheus-operator -b $PROM_OP_VERSION --depth=1 cd prometheus-operator for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi cat Dockerfile |sed -e 's/\.build\/linux-amd64\/operator/operator/' |sed -e "s/^FROM.*/FROM $archdocker\/busybox/" > Dockerfile.custom CGO_ENABLED=0 GOOS=linux GOARCH=$arch go build -ldflags="-s -X github.com/coreos/prometheus-operator/pkg/version.Version=$(cat VERSION | tr -d " \t\n\r")" -o operator cmd/operator/main.go rm -rf operator docker build -t $REPO/prometheus-operator:${PROM_OP_VERSION}-$arch -f Dockerfile.custom . docker push $REPO/prometheus-operator:$PROM_OP_VERSION-arm done docker manifest create --amend $IMAGE:$PROM_OP_VERSION `echo $ALL_ARCH | sed -e "s~[^ ]*~$IMAGE:$PROM_OP_VERSION\-&~g"` for arch in $ALL_ARCH; do docker manifest annotate --arch $arch $IMAGE:$PROM_OP_VERSION $IMAGE:$PROM_OP_VERSION-$arch; done docker manifest push --purge $IMAGE:$PROM_OP_VERSION for arch in $ALL_ARCH; do docker rmi $REPO/prometheus-operator:$PROM_OP_VERSION-$arch done rm -rf Dockerfile.custom popd #------------------------------------------------------------------------------- # kube-rbac-proxy IMAGE=carlosedp/kube-rbac-proxy ALL_ARCH=(amd64 arm arm64 ppc64le) rm -rf $GOPATH/src/github.com/brancz/ mkdir -p $GOPATH/src/github.com/brancz/ pushd $GOPATH/src/github.com/brancz/ git clone https://github.com/brancz/kube-rbac-proxy -b $KUBE_RBAC_VERSION --depth=1 cd kube-rbac-proxy for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi cat > Dockerfile.custom < Dockerfile.custom GOOS=linux GOARCH=$arch CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags '-s -w -extldflags "-static"' -o prometheus-config-reloader main.go docker build -t $IMAGE:$PROM_CONFIG_RELOADER_VERSION-$arch -f Dockerfile.custom . docker push $IMAGE:$PROM_CONFIG_RELOADER_VERSION-$arch done docker manifest create --amend $IMAGE:$PROM_CONFIG_RELOADER_VERSION `echo $ALL_ARCH | sed -e "s~[^ ]*~$IMAGE:$PROM_CONFIG_RELOADER_VERSION\-&~g"` for arch in $ALL_ARCH; do docker manifest annotate --arch $arch $IMAGE:$PROM_CONFIG_RELOADER_VERSION $IMAGE:$PROM_CONFIG_RELOADER_VERSION-$arch; done docker manifest push --purge $IMAGE:$PROM_CONFIG_RELOADER_VERSION for arch in $ALL_ARCH; do docker rmi $IMAGE:$PROM_CONFIG_RELOADER_VERSION-$arch done rm -rf Dockerfile.custom #------------------------------------------------------------------------------- # configmap-reload IMAGE=carlosedp/configmap-reload ALL_ARCH=(amd64 arm arm64 ppc64le) rm -rf $GOPATH/src/github.com/openshift/configmap-reload mkdir -p $GOPATH/src/github.com/openshift/ pushd $GOPATH/src/github.com/openshift/ git clone https://github.com/openshift/configmap-reload cd configmap-reload for arch in $ALL_ARCH; do if [[ $arch == "arm" ]]; then archdocker="arm32v7"; elif [[ $arch == "arm64" ]]; then archdocker="arm64v8"; else archdocker="$arch"; fi cat > Dockerfile.custom <