From 2ec5a67fad5b7fd282beeb9100e058e80c61744c Mon Sep 17 00:00:00 2001 From: jackgr Date: Wed, 30 Mar 2016 15:57:52 -0700 Subject: [PATCH 1/4] Fix Makefile container build --- rootfs/include.mk | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rootfs/include.mk b/rootfs/include.mk index 7422e960c..5a5a535d8 100644 --- a/rootfs/include.mk +++ b/rootfs/include.mk @@ -20,10 +20,10 @@ DOCKER_REGISTRY ?= gcr.io DOCKER_PROJECT ?= $(PROJECT) # Support both local and remote repos, and support no project. -ifdef $(DOCKER_PROJECT) -PREFIX := $(DOCKER_REGISTRY)/$(DOCKER_PROJECT) -else +ifeq ($(DOCKER_PROJECT),) PREFIX := $(DOCKER_REGISTRY) +else +PREFIX := $(DOCKER_REGISTRY)/$(DOCKER_PROJECT) endif FULL_IMAGE := $(PREFIX)/$(IMAGE) @@ -52,13 +52,16 @@ info: push: container ifeq ($(DOCKER_REGISTRY),gcr.io) gcloud docker push $(FULL_IMAGE):$(TAG) + gcloud docker push $(FULL_IMAGE):latest else docker push $(FULL_IMAGE):$(TAG) + docker push $(FULL_IMAGE):latest endif .PHONY: container container: .project .docker binary extras docker build -t $(FULL_IMAGE):$(TAG) -f Dockerfile . + docker tag -f $(FULL_IMAGE):$(TAG) $(FULL_IMAGE):latest .project: ifeq ($(DOCKER_REGISTRY), gcr.io) From 0ea77e701bcb094dbd113c06ae3e1998ed0c69ac Mon Sep 17 00:00:00 2001 From: jackgr Date: Wed, 30 Mar 2016 15:58:19 -0700 Subject: [PATCH 2/4] Add redis chart example --- examples/charts/redis/Chart.yaml | 7 ++++ examples/charts/redis/templates/redis.jinja | 32 +++++++++++++++++++ .../charts/redis/templates/redis.jinja.schema | 10 ++++++ 3 files changed, 49 insertions(+) create mode 100644 examples/charts/redis/Chart.yaml create mode 100644 examples/charts/redis/templates/redis.jinja create mode 100644 examples/charts/redis/templates/redis.jinja.schema diff --git a/examples/charts/redis/Chart.yaml b/examples/charts/redis/Chart.yaml new file mode 100644 index 000000000..836bd9c4b --- /dev/null +++ b/examples/charts/redis/Chart.yaml @@ -0,0 +1,7 @@ +name: redis +description: Port of the replicatedservice template from kubernetes/charts +version: "2" +home: "" +expander: + name: Expandybird + entrypoint: templates/redis.jinja diff --git a/examples/charts/redis/templates/redis.jinja b/examples/charts/redis/templates/redis.jinja new file mode 100644 index 000000000..46cd615c3 --- /dev/null +++ b/examples/charts/redis/templates/redis.jinja @@ -0,0 +1,32 @@ +{% set REDIS_PORT = 6379 %} +{% set WORKERS = properties['workers'] if properties and properties['workers'] else 2 %} + +resources: +- name: redis-master + type: gs://kubernetes-charts-testing/replicatedservice-3.tgz + properties: + # This has to be overwritten since service names are hard coded in the code + service_name: redis-master + service_port: {{ REDIS_PORT }} + target_port: {{ REDIS_PORT }} + container_port: {{ REDIS_PORT }} + replicas: 1 + container_name: master + image: redis + +- name: redis-slave + type: gs://kubernetes-charts-testing/replicatedservice-3.tgz + properties: + # This has to be overwritten since service names are hard coded in the code + service_name: redis-slave + service_port: {{ REDIS_PORT }} + container_port: {{ REDIS_PORT }} + replicas: {{ WORKERS }} + container_name: worker + image: kubernetes/redis-slave:v2 + # An example of how to specify env variables. + env: + - name: GET_HOSTS_FROM + value: env + - name: REDIS_MASTER_SERVICE_HOST + value: redis-master diff --git a/examples/charts/redis/templates/redis.jinja.schema b/examples/charts/redis/templates/redis.jinja.schema new file mode 100644 index 000000000..cd550d65a --- /dev/null +++ b/examples/charts/redis/templates/redis.jinja.schema @@ -0,0 +1,10 @@ +info: + title: Redis cluster + description: Defines a redis cluster, using a single replica + replicatedservice for master and replicatedservice for workers. + +properties: + workers: + type: int + default: 2 + description: Number of worker replicas. From f47bb31605ffab53f01c514aae98b9db50dcd979 Mon Sep 17 00:00:00 2001 From: jackgr Date: Wed, 30 Mar 2016 20:44:12 -0700 Subject: [PATCH 3/4] Fix binary load failure in container --- Makefile | 15 +++++++++----- rootfs/Makefile | 2 +- rootfs/expandybird/Makefile | 2 +- rootfs/include.mk | 18 +++++++---------- scripts/common.sh | 40 ++++++++++++++++++++++++++++++------- 5 files changed, 52 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 163e108e3..6c023ffa5 100644 --- a/Makefile +++ b/Makefile @@ -24,19 +24,26 @@ endif GO_DIRS ?= $(shell glide nv -x ) GO_PKGS ?= $(shell glide nv) +ROOTFS := rootfs + .PHONY: build build: gocheck @scripts/build-go.sh +.PHONY: build-static +build-static: gocheck + @BUILD_TYPE=STATIC scripts/build-go.sh + .PHONY: build-cross build-cross: gocheck - @BUILD_CROSS=1 scripts/build-go.sh + @BUILD_TYPE=CROSS scripts/build-go.sh .PHONY: all all: build .PHONY: clean clean: + $(MAKE) -C $(ROOTFS) $@ go clean -v $(GO_PKGS) rm -rf bin @@ -47,14 +54,12 @@ test: build test-style test-unit test-flake8 quicktest: test-style go test $(GO_PKGS) -ROOTFS := rootfs - .PHONY: push -push: all +push: build-static $(MAKE) -C $(ROOTFS) $@ .PHONY: container -container: all +container: build-static $(MAKE) -C $(ROOTFS) $@ .PHONY: test-unit diff --git a/rootfs/Makefile b/rootfs/Makefile index 150bac8dd..b584a53d9 100644 --- a/rootfs/Makefile +++ b/rootfs/Makefile @@ -13,7 +13,7 @@ # limitations under the License. SUBDIRS := expandybird/. resourcifier/. manager/. -TARGETS := info push container +TARGETS := info push container clean SUBDIRS_TARGETS := \ $(foreach t,$(TARGETS),$(addsuffix $t,$(SUBDIRS))) diff --git a/rootfs/expandybird/Makefile b/rootfs/expandybird/Makefile index c87a43ac0..80c03a30c 100644 --- a/rootfs/expandybird/Makefile +++ b/rootfs/expandybird/Makefile @@ -21,4 +21,4 @@ extras: expansion .PHONY: expansion expansion: - cp -R ../../expansion ./opt + mkdir -p ./opt && cp -R ../../expansion ./opt diff --git a/rootfs/include.mk b/rootfs/include.mk index 5a5a535d8..deea4fe50 100644 --- a/rootfs/include.mk +++ b/rootfs/include.mk @@ -30,13 +30,17 @@ FULL_IMAGE := $(PREFIX)/$(IMAGE) TAG ?= git-$(shell git rev-parse --short HEAD) -DEFAULT_PLATFORM := $(shell uname | tr '[:upper:]' '[:lower:]') +DEFAULT_PLATFORM := linux PLATFORM ?= $(DEFAULT_PLATFORM) -DEFAULT_ARCH := $(shell uname -m) +DEFAULT_ARCH := amd64 ARCH ?= $(DEFAULT_ARCH) +.PHONY: clean +clean: + rm -rf bin opt + .PHONY: info info: @echo "Build tag: ${TAG}" @@ -73,17 +77,9 @@ endif .docker: @if [[ -z `which docker` ]] || ! docker --version &> /dev/null; then echo "docker is not installed correctly"; exit 1; fi -CROSS_IMAGE := $(PLATFORM)-$(ARCH)/$(IMAGE)/$(IMAGE) - .PHONY: binary binary: - @if [[ -z $(CROSS_IMAGE) ]]; then \ - echo cp ../../bin/$(CROSS_IMAGE) ./bin ; \ - cp ../../bin/$(CROSS_IMAGE) ./bin ; \ - else \ - echo cp ../../bin/$(IMAGE) ./bin ; \ - cp ../../bin/$(IMAGE) ./bin ; \ - fi + @if [[ ! -x "bin/$(IMAGE)" ]] ; then echo "binary bin/$(IMAGE) not found" ; exit 1 ; fi .PHONY: kubectl kubectl: diff --git a/scripts/common.sh b/scripts/common.sh index 3ca5afaaa..e6f92c960 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -16,7 +16,10 @@ set -o errexit set -o pipefail -readonly ALL_TARGETS=(cmd/expandybird cmd/helm cmd/manager cmd/resourcifier) +readonly ROOTFS="${DIR}/rootfs" + +readonly STATIC_TARGETS=(cmd/expandybird cmd/manager cmd/resourcifier) +readonly ALL_TARGETS=(${STATIC_TARGETS[@]} cmd/helm) error_exit() { # Display error message and exit @@ -42,6 +45,22 @@ version_from_git() { echo "${git_tag}+${git_commit}" } +build_binary_static() { + local target="$1" + local basename="${target##*/}" + local context="${ROOTFS}/${basename}" + + echo "Building ${target}" + CGO_ENABLED=0 \ + GOOS=linux \ + GOARCH=amd64 \ + go build \ + -ldflags="${LDFLAGS}" \ + -a -installsuffix cgo \ + -o "${context}/bin/${basename}" \ + "${REPO}/${target}" +} + build_binary_cross() { local target="$1" @@ -50,25 +69,32 @@ build_binary_cross() { -ldflags="${LDFLAGS}" \ -os="linux darwin" \ -arch="amd64 386" \ - -output="bin/{{.OS}}-{{.Arch}}/{{.Dir}}" "${REPO}/${target}" + -output="bin/{{.OS}}-{{.Arch}}/{{.Dir}}" \ + "${REPO}/${target}" } +#TODO: accept specific os/arch build_binaries() { local -a targets=($@) - #TODO: accept specific os/arch - local build_cross="${BUILD_CROSS:-}" + local build_type="${BUILD_TYPE:-}" if [[ ${#targets[@]} -eq 0 ]]; then - targets=("${ALL_TARGETS[@]}") + if [[ ${build_type} == STATIC ]]; then + targets=("${STATIC_TARGETS[@]}") + else + targets=("${ALL_TARGETS[@]}") + fi fi assign_version assign_ldflags for t in "${targets[@]}"; do - if [[ -n "$build_cross" ]]; then + if [[ ${build_type} == STATIC ]]; then + build_binary_static "$t" + elif [[ ${build_type} == CROSS ]]; then build_binary_cross "$t" - else + else build_binary "$t" fi done From 6f8849102e6c9ffb6bdbf4334b2ddb019aa90f50 Mon Sep 17 00:00:00 2001 From: jackgr Date: Thu, 31 Mar 2016 11:58:13 -0700 Subject: [PATCH 4/4] Install ca certs --- rootfs/manager/Dockerfile | 6 ++++++ rootfs/resourcifier/Dockerfile | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/rootfs/manager/Dockerfile b/rootfs/manager/Dockerfile index d991b83e3..600d5b8a5 100644 --- a/rootfs/manager/Dockerfile +++ b/rootfs/manager/Dockerfile @@ -15,5 +15,11 @@ FROM alpine:3.3 RUN apk --update add ca-certificates COPY . / + +# Install CA certs +RUN apk add --update-cache ca-certificates +RUN apk del --purge ca-certificates \ + && rm -rf /var/cache/apk/* + EXPOSE 8080 CMD ["/bin/manager", "--kubectl=/bin/kubectl"] diff --git a/rootfs/resourcifier/Dockerfile b/rootfs/resourcifier/Dockerfile index a359e7f9a..1757e0fbc 100644 --- a/rootfs/resourcifier/Dockerfile +++ b/rootfs/resourcifier/Dockerfile @@ -15,5 +15,11 @@ FROM alpine:3.3 RUN apk --update add ca-certificates COPY . / + +# Install CA certs +RUN apk add --update-cache ca-certificates +RUN apk del --purge ca-certificates \ + && rm -rf /var/cache/apk/* + EXPOSE 8080 CMD ["/bin/resourcifier", "--kubectl=/bin/kubectl"]