mirror of https://github.com/k3s-io/k3s
270 lines
11 KiB
Makefile
270 lines
11 KiB
Makefile
.PHONY: test e2e-test cover gofmt gofmt-fix header-check clean tar.gz docker-push release docker-push-all flannel-git
|
|
|
|
# Registry used for publishing images
|
|
REGISTRY?=quay.io/coreos/flannel
|
|
QEMU_VERSION=v3.0.0
|
|
|
|
# Default tag and architecture. Can be overridden
|
|
TAG?=$(shell git describe --tags --dirty)
|
|
ARCH?=amd64
|
|
# Only enable CGO (and build the UDP backend) on AMD64
|
|
ifeq ($(ARCH),amd64)
|
|
CGO_ENABLED=1
|
|
else
|
|
CGO_ENABLED=0
|
|
endif
|
|
|
|
# Go version to use for builds
|
|
GO_VERSION=1.10.3
|
|
|
|
# K8s version used for Makefile helpers
|
|
K8S_VERSION=v1.6.6
|
|
|
|
GOARM=7
|
|
|
|
# These variables can be overridden by setting an environment variable.
|
|
TEST_PACKAGES?=pkg/ip subnet subnet/etcdv2 network backend
|
|
TEST_PACKAGES_EXPANDED=$(TEST_PACKAGES:%=github.com/coreos/flannel/%)
|
|
PACKAGES?=$(TEST_PACKAGES) network
|
|
PACKAGES_EXPANDED=$(PACKAGES:%=github.com/coreos/flannel/%)
|
|
|
|
### BUILDING
|
|
clean:
|
|
rm -f dist/flanneld*
|
|
rm -f dist/*.aci
|
|
rm -f dist/*.docker
|
|
rm -f dist/*.tar.gz
|
|
rm -f dist/qemu-*
|
|
|
|
dist/flanneld: $(shell find . -type f -name '*.go')
|
|
go build -o dist/flanneld \
|
|
-ldflags '-s -w -X github.com/coreos/flannel/version.Version=$(TAG) -extldflags "-static"'
|
|
|
|
dist/flanneld.exe: $(shell find . -type f -name '*.go')
|
|
CXX=x86_64-w64-mingw32-g++ CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows go build -o dist/flanneld.exe \
|
|
-ldflags '-s -w -X github.com/coreos/flannel/version.Version=$(TAG) -extldflags "-static"'
|
|
|
|
# This will build flannel natively using golang image
|
|
dist/flanneld-$(ARCH): dist/qemu-$(ARCH)-static
|
|
# valid values for ARCH are [amd64 arm arm64 ppc64le s390x]
|
|
docker run -e CGO_ENABLED=$(CGO_ENABLED) -e GOARCH=$(ARCH) \
|
|
-u $(shell id -u):$(shell id -g) \
|
|
-v $(CURDIR)/dist/qemu-$(ARCH)-static:/usr/bin/qemu-$(ARCH)-static \
|
|
-v $(CURDIR):/go/src/github.com/coreos/flannel:ro \
|
|
-v $(CURDIR)/dist:/go/src/github.com/coreos/flannel/dist \
|
|
golang:$(GO_VERSION) /bin/bash -c '\
|
|
cd /go/src/github.com/coreos/flannel && \
|
|
make -e dist/flanneld && \
|
|
mv dist/flanneld dist/flanneld-$(ARCH)'
|
|
|
|
## Create a docker image on disk for a specific arch and tag
|
|
image: dist/flanneld-$(TAG)-$(ARCH).docker
|
|
dist/flanneld-$(TAG)-$(ARCH).docker: dist/flanneld-$(ARCH)
|
|
docker build -f Dockerfile.$(ARCH) -t $(REGISTRY):$(TAG)-$(ARCH) .
|
|
docker save -o dist/flanneld-$(TAG)-$(ARCH).docker $(REGISTRY):$(TAG)-$(ARCH)
|
|
|
|
# amd64 gets an image with the suffix too (i.e. it's the default)
|
|
ifeq ($(ARCH),amd64)
|
|
docker build -f Dockerfile.$(ARCH) -t $(REGISTRY):$(TAG) .
|
|
endif
|
|
|
|
### TESTING
|
|
test: header-check gofmt
|
|
# Run the unit tests
|
|
# NET_ADMIN capacity is required to do some network operation
|
|
# SYS_ADMIN capacity is required to create network namespace
|
|
docker run --cap-add=NET_ADMIN --cap-add=SYS_ADMIN --rm -v $(shell pwd):/go/src/github.com/coreos/flannel golang:1.8.3 go test -v -cover $(TEST_PACKAGES_EXPANDED)
|
|
|
|
# Test the docker-opts script
|
|
cd dist; ./mk-docker-opts_tests.sh
|
|
|
|
# Run the functional tests
|
|
make e2e-test
|
|
|
|
e2e-test: bash_unit dist/flanneld-e2e-$(TAG)-$(ARCH).docker
|
|
$(MAKE) -C images/iperf3 ARCH=$(ARCH)
|
|
FLANNEL_DOCKER_IMAGE=$(REGISTRY):$(TAG)-$(ARCH) ./bash_unit dist/functional-test.sh
|
|
FLANNEL_DOCKER_IMAGE=$(REGISTRY):$(TAG)-$(ARCH) ./bash_unit dist/functional-test-k8s.sh
|
|
|
|
cover:
|
|
# A single package must be given - e.g. 'PACKAGES=pkg/ip make cover'
|
|
go test -coverprofile cover.out $(PACKAGES_EXPANDED)
|
|
go tool cover -html=cover.out
|
|
|
|
header-check:
|
|
./header-check.sh
|
|
|
|
# Throw an error if gofmt finds problems.
|
|
# "read" will return a failure return code if there is no output. This is inverted wth the "!"
|
|
gofmt:
|
|
bash -c '! gofmt -d $(PACKAGES) 2>&1 | read'
|
|
|
|
gofmt-fix:
|
|
gofmt -w $(PACKAGES)
|
|
|
|
bash_unit:
|
|
wget https://raw.githubusercontent.com/pgrange/bash_unit/v1.6.0/bash_unit
|
|
chmod +x bash_unit
|
|
|
|
# This will build flannel natively using golang image
|
|
dist/flanneld-e2e-$(TAG)-$(ARCH).docker:
|
|
ifneq ($(ARCH),amd64)
|
|
$(MAKE) dist/qemu-$(ARCH)-static
|
|
endif
|
|
# valid values for ARCH are [amd64 arm arm64 ppc64le s390x]
|
|
docker run -e GOARM=$(GOARM) \
|
|
-u $(shell id -u):$(shell id -g) \
|
|
-v $(CURDIR):/go/src/github.com/coreos/flannel:ro \
|
|
-v $(CURDIR)/dist:/go/src/github.com/coreos/flannel/dist \
|
|
golang:1.8.3 /bin/bash -c '\
|
|
cd /go/src/github.com/coreos/flannel && \
|
|
CGO_ENABLED=1 make -e dist/flanneld && \
|
|
mv dist/flanneld dist/flanneld-$(ARCH)'
|
|
docker build -f Dockerfile.$(ARCH) -t $(REGISTRY):$(TAG)-$(ARCH) .
|
|
|
|
# Make a release after creating a tag
|
|
# To build cross platform Docker images, the qemu-static binaries are needed. On ubuntu "apt-get install qemu-user-static"
|
|
release: tar.gz dist/qemu-s390x-static dist/qemu-ppc64le-static dist/qemu-aarch64-static dist/qemu-arm-static #release-tests
|
|
ARCH=amd64 make dist/flanneld-$(TAG)-amd64.docker
|
|
ARCH=arm make dist/flanneld-$(TAG)-arm.docker
|
|
ARCH=arm64 make dist/flanneld-$(TAG)-arm64.docker
|
|
ARCH=ppc64le make dist/flanneld-$(TAG)-ppc64le.docker
|
|
ARCH=s390x make dist/flanneld-$(TAG)-s390x.docker
|
|
@echo "Everything should be built for $(TAG)"
|
|
@echo "Add all flanneld-* and *.tar.gz files from dist/ to the Github release"
|
|
@echo "Use make docker-push-all to push the images to a registry"
|
|
|
|
dist/qemu-%-static:
|
|
if [ "$(@F)" = "qemu-amd64-static" ]; then \
|
|
wget -O dist/qemu-amd64-static https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/qemu-x86_64-static; \
|
|
elif [ "$(@F)" = "qemu-arm64-static"]; then \
|
|
wget -O dist/qemu-arm64-static https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/qemu-aarch64-static; \
|
|
else \
|
|
wget -O dist/$(@F) https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/$(@F); \
|
|
fi
|
|
|
|
## Build a .tar.gz for the amd64 ppc64le arm arm64 flanneld binary
|
|
tar.gz:
|
|
ARCH=amd64 make dist/flanneld-amd64
|
|
tar --transform='flags=r;s|-amd64||' -zcvf dist/flannel-$(TAG)-linux-amd64.tar.gz -C dist flanneld-amd64 mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-linux-amd64.tar.gz
|
|
ARCH=amd64 make dist/flanneld.exe
|
|
tar --transform='flags=r;s|-amd64||' -zcvf dist/flannel-$(TAG)-windows-amd64.tar.gz -C dist flanneld.exe mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-windows-amd64.tar.gz
|
|
ARCH=ppc64le make dist/flanneld-ppc64le
|
|
tar --transform='flags=r;s|-ppc64le||' -zcvf dist/flannel-$(TAG)-linux-ppc64le.tar.gz -C dist flanneld-ppc64le mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-linux-ppc64le.tar.gz
|
|
ARCH=arm make dist/flanneld-arm
|
|
tar --transform='flags=r;s|-arm||' -zcvf dist/flannel-$(TAG)-linux-arm.tar.gz -C dist flanneld-arm mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-linux-arm.tar.gz
|
|
ARCH=arm64 make dist/flanneld-arm64
|
|
tar --transform='flags=r;s|-arm64||' -zcvf dist/flannel-$(TAG)-linux-arm64.tar.gz -C dist flanneld-arm64 mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-linux-arm64.tar.gz
|
|
ARCH=s390x make dist/flanneld-s390x
|
|
tar --transform='flags=r;s|-s390x||' -zcvf dist/flannel-$(TAG)-linux-s390x.tar.gz -C dist flanneld-s390x mk-docker-opts.sh ../README.md
|
|
tar -tvf dist/flannel-$(TAG)-linux-s390x.tar.gz
|
|
|
|
release-tests: bash_unit
|
|
# Run the functional tests with different etcd versions.
|
|
ETCD_IMG="quay.io/coreos/etcd:latest" ./bash_unit dist/functional-test.sh
|
|
ETCD_IMG="quay.io/coreos/etcd:v3.2.7" ./bash_unit dist/functional-test.sh
|
|
ETCD_IMG="quay.io/coreos/etcd:v3.1.10" ./bash_unit dist/functional-test.sh
|
|
ETCD_IMG="quay.io/coreos/etcd:v3.0.17" ./bash_unit dist/functional-test.sh
|
|
# Etcd v2 docker image format is different. Override the etcd binary location so it works.
|
|
ETCD_IMG="quay.io/coreos/etcd:v2.3.8" ETCD_LOCATION=" " ./bash_unit dist/functional-test.sh
|
|
|
|
# Run the functional tests with different k8s versions. Currently these are the latest point releases.
|
|
# This list should be updated during the release process.
|
|
K8S_VERSION="1.7.6" ./bash_unit dist/functional-test-k8s.sh
|
|
K8S_VERSION="1.6.10" ./bash_unit dist/functional-test-k8s.sh
|
|
# K8S_VERSION="1.5.7" ./bash_unit dist/functional-test-k8s.sh #kube-flannel.yml is incompatible
|
|
# K8S_VERSION="1.4.12" ./bash_unit dist/functional-test-k8s.sh #kube-flannel.yml is incompatible
|
|
# K8S_VERSION="1.3.10" ./bash_unit dist/functional-test-k8s.sh #kube-flannel.yml is incompatible
|
|
|
|
docker-push: dist/flanneld-$(TAG)-$(ARCH).docker
|
|
docker push $(REGISTRY):$(TAG)-$(ARCH)
|
|
|
|
# amd64 gets an image with the suffix too (i.e. it's the default)
|
|
ifeq ($(ARCH),amd64)
|
|
docker push $(REGISTRY):$(TAG)
|
|
endif
|
|
|
|
docker-push-all:
|
|
ARCH=amd64 make docker-push
|
|
ARCH=arm make docker-push
|
|
ARCH=arm64 make docker-push
|
|
ARCH=ppc64le make docker-push
|
|
ARCH=s390x make docker-push
|
|
|
|
flannel-git:
|
|
ARCH=amd64 REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-amd64.docker docker-push
|
|
docker build -f Dockerfile.amd64 -t quay.io/coreos/flannel-git .
|
|
docker push quay.io/coreos/flannel-git
|
|
ARCH=arm REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-arm.docker docker-push
|
|
ARCH=arm64 REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-arm64.docker docker-push
|
|
ARCH=ppc64le REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-ppc64le.docker docker-push
|
|
ARCH=s390x REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-s390x.docker docker-push
|
|
|
|
### DEVELOPING
|
|
update-glide:
|
|
# go get -d -u github.com/Masterminds/glide
|
|
glide update --strip-vendor
|
|
# go get -d -u github.com/sgotti/glide-vc
|
|
glide vc --only-code --no-tests
|
|
|
|
install:
|
|
# This is intended as just a developer convenience to help speed up non-containerized builds
|
|
# It is NOT how you install flannel
|
|
CGO_ENABLED=1 go install -v github.com/coreos/flannel
|
|
|
|
minikube-start:
|
|
minikube start --network-plugin cni
|
|
|
|
minikube-build-image:
|
|
CGO_ENABLED=1 go build -v -o dist/flanneld-amd64
|
|
# Make sure the minikube docker is being used "eval $(minikube docker-env)"
|
|
sh -c 'eval $$(minikube docker-env) && docker build -f Dockerfile.amd64 -t flannel/minikube .'
|
|
|
|
minikube-deploy-flannel:
|
|
kubectl apply -f Documentation/minikube.yml
|
|
|
|
minikube-remove-flannel:
|
|
kubectl delete -f Documentation/minikube.yml
|
|
|
|
minikube-restart-pod:
|
|
# Use this to pick up a new image
|
|
kubectl delete pods -l app=flannel --grace-period=0
|
|
|
|
kubernetes-logs:
|
|
kubectl logs `kubectl get po -l app=flannel -o=custom-columns=NAME:metadata.name --no-headers=true` -c kube-flannel -f
|
|
|
|
LOCAL_IP_ENV?=$(shell ip route get 8.8.8.8 | head -1 | awk '{print $$7}')
|
|
run-etcd: stop-etcd
|
|
docker run --detach \
|
|
-p 2379:2379 \
|
|
--name flannel-etcd quay.io/coreos/etcd \
|
|
etcd \
|
|
--advertise-client-urls "http://$(LOCAL_IP_ENV):2379,http://127.0.0.1:2379,http://$(LOCAL_IP_ENV):4001,http://127.0.0.1:4001" \
|
|
--listen-client-urls "http://0.0.0.0:2379,http://0.0.0.0:4001"
|
|
|
|
stop-etcd:
|
|
@-docker rm -f flannel-etcd
|
|
|
|
run-k8s-apiserver: stop-k8s-apiserver
|
|
docker run --detach --net=host \
|
|
--name calico-k8s-apiserver \
|
|
gcr.io/google_containers/hyperkube-amd64:$(K8S_VERSION) \
|
|
/hyperkube apiserver --etcd-servers=http://$(LOCAL_IP_ENV):2379 \
|
|
--service-cluster-ip-range=10.101.0.0/16
|
|
|
|
stop-k8s-apiserver:
|
|
@-docker rm -f calico-k8s-apiserver
|
|
|
|
run-local-kube-flannel-with-prereqs: run-etcd run-k8s-apiserver dist/flanneld
|
|
while ! kubectl apply -f dist/fake-node.yaml; do sleep 1; done
|
|
$(MAKE) run-local-kube-flannel
|
|
|
|
run-local-kube-flannel:
|
|
# Currently this requires the netconf to be in /etc/kube-flannel/net-conf.json
|
|
sudo NODE_NAME=test dist/flanneld --kube-subnet-mgr --kube-api-url http://127.0.0.1:8080
|