Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi master #47

Closed
wants to merge 55 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
8594a5a
v1alpha3 first cut
deitch May 4, 2020
22a200d
fix drone
deitch May 4, 2020
f3ff217
remove the projectID from PacketMachine crd
May 5, 2020
ec6b1ee
Merge pull request #13 from gianarb/fix/packet-machine-crd-spec-proje…
deitch May 5, 2020
536b3a0
v0.3.3
deitch May 5, 2020
c8f801e
update the cluster template with required fields
May 5, 2020
fd70e71
Merge pull request #15 from gianarb/fix/cluster-example-fields
deitch May 5, 2020
044c112
Merge pull request #16 from packethost/bump-versions
deitch May 5, 2020
4f08400
fix ci installing kubebuilder
May 5, 2020
360a60a
Merge pull request #17 from gianarb/fix/kubebuilder-in-ci
deitch May 5, 2020
20ed1ce
fix ci image build test
May 5, 2020
ca0fb08
Merge pull request #18 from gianarb/fix/ci-image-build
deitch May 5, 2020
dd07139
Fix image build
deitch May 5, 2020
7771d02
Merge pull request #20 from packethost/align-dockerfile
deitch May 5, 2020
ab06c61
fix manager adding custerv1 schema types
May 5, 2020
60483cd
Merge pull request #21 from gianarb/fix/register-cluterv1-schema
deitch May 5, 2020
c237615
fix annotations so the CRDs are correct
deitch May 6, 2020
99f68e8
Merge pull request #23 from packethost/fix-kubebuilder-annotations
gianarb May 6, 2020
8001489
set correct provider ID
deitch May 6, 2020
9f2a056
Merge pull request #24 from packethost/set-provider-id
gianarb May 6, 2020
fd5a224
proper cluster reconcile loop, remove finalizers on delete
deitch May 6, 2020
5134d42
Merge pull request #26 from packethost/proper-packetcluster-status
gianarb May 6, 2020
a293edd
trigger finalizer even if the machine is already deleted from packet
May 6, 2020
49ef02f
bootstrap data secret must be set
May 6, 2020
b0bbc4b
handle no ID on creation
deitch May 6, 2020
2cd36af
Merge pull request #25 from gianarb/feature/skip-device-delete-if-not…
deitch May 6, 2020
b430e34
Merge pull request #28 from gianarb/fix/bootstrap-data-secret-check
deitch May 6, 2020
e59d076
Merge pull request #29 from packethost/creation-id
deitch May 6, 2020
6ab5908
fix packet go client wrong import
May 6, 2020
0be9274
Merge pull request #30 from gianarb/fix/packet-client-wrong-import
deitch May 6, 2020
da73f9d
fix device tags
May 7, 2020
330baca
get ip from control plan during cluster reconciliation
May 7, 2020
aa900b3
Merge pull request #31 from gianarb/fix/merge-basetags
gianarb May 7, 2020
8b6f4e7
handle more status coming from packet device api
May 7, 2020
8c78b08
Merge pull request #32 from gianarb/feature/get-master-ip
deitch May 7, 2020
e8f4f46
simplify manual install of a new cluster with make target
deitch May 8, 2020
deeab30
add requeue timeouts for when machine cannot start because cluster or…
deitch May 8, 2020
c29e9b9
Merge pull request #35 from packethost/requeue-workers
gianarb May 8, 2020
5ffcc3c
Merge pull request #34 from packethost/simplify-build
deitch May 8, 2020
d6a4cad
handle device in provisioning state
May 8, 2020
a3814d1
bump cluster api to 0.3.5
May 8, 2020
e14ee34
Merge pull request #38 from gianarb/handle-provisioning-state
gianarb May 8, 2020
7f9b54d
Merge pull request #39 from gianarb/chore/bump-cluster-api-0.3.5
deitch May 11, 2020
7858ace
ensure controller-gen exists and is minimum right version
deitch May 11, 2020
3931dd1
Merge pull request #42 from packethost/update-controller-gen
gianarb May 11, 2020
dfbdc7c
move from APIEndpoint to control plane endpoint
May 11, 2020
9bc9b20
Merge pull request #40 from gianarb/feature/from-apiendpoint-to-contr…
gianarb May 11, 2020
ece43f8
kubelet runs on master
May 11, 2020
c082c7e
make kubelet Status=Ready on master
May 12, 2020
6dff23a
Merge pull request #44 from gianarb/feature/kubelet-works-on-mater
gianarb May 12, 2020
eebc6d8
add support for packetmachinetemplate types
May 12, 2020
6b15da6
Merge pull request #45 from gianarb/feature/add-machinetemplates-types
gianarb May 12, 2020
4ee1adf
update example to use MachineDeployment
May 12, 2020
f82fe55
Merge pull request #46 from gianarb/example/machine-deployment
gianarb May 12, 2020
ee6954c
template for multi master support via kubeadmcontrolplane
May 13, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
9 changes: 7 additions & 2 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ workspace:
steps:
- name: test
pull: always
image: golang:1.12.7-alpine
image: golang:1.14.2-alpine3.11
environment:
CGO_ENABLED: 0
commands:
- apk --update add make git bash jq curl
- make ci-test
- make kubebuilder
- make test

- name: image
pull: always
Expand All @@ -28,6 +31,8 @@ steps:
repo: packethost/cluster-api-provider-packet
tags:
- latest
build_args:
- GOVER=1.14.2-alpine3.11

- name: publish
pull: always
Expand Down
31 changes: 18 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
# Build the manager binary
FROM golang:1.12.7-alpine as builder
ARG GOVER=1.14
FROM golang:${GOVER} as builder

# Copy in the go src
WORKDIR /go/src/github.com/packethost/cluster-api-provider-packet
COPY pkg/ pkg/
COPY cmd/ cmd/
COPY vendor/ vendor/
COPY go.* ./
COPY tools.go ./
WORKDIR /workspace
# Copy the Go Modules manifests
COPY go.mod go.mod
COPY go.sum go.sum
# cache deps before building and copying source so that we don't need to re-download as much
# and so that source changes don't invalidate our downloaded layer
RUN go mod download

# Copy the go source
COPY . .

# Build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -mod=vendor -a -o manager github.com/packethost/cluster-api-provider-packet/cmd/manager
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go

# Copy the controller-manager into a thin image
FROM alpine:3.10
# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot
WORKDIR /
RUN apk --update add ca-certificates
COPY --from=builder /go/src/github.com/packethost/cluster-api-provider-packet/manager .
COPY --from=builder /workspace/manager .
USER nonroot:nonroot

ENTRYPOINT ["/manager"]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright 2019 Packet Inc
Copyright 2019-2020 Packet Inc

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
201 changes: 143 additions & 58 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
.PHONY: vendor test manager clusterctl run install deploy manifests generate fmt vet run kubebuilder ci cd

KUBEBUILDER_VERSION ?= 2.0.0-beta.0
KUBEBUILDER_VERSION ?= 2.3.1
KUBEBUILDER ?= /usr/local/kubebuilder/bin/kubebuilder
CONTROLLER_GEN_VERSION ?= v0.3.0
CONTROLLER_GEN=$(GOBIN)/controller-gen

CERTMANAGER_URL ?= https://github.com/jetstack/cert-manager/releases/download/v0.14.1/cert-manager.yaml

GIT_VERSION?=$(shell git log -1 --format="%h")
RELEASE_TAG ?= $(shell git tag --points-at HEAD)
Expand Down Expand Up @@ -34,28 +38,71 @@ endif
# unless otherwise set, I am building for my own OS, i.e. not cross-compiling
OS ?= $(BUILDOS)


# Image URL to use all building/pushing image targets
BUILD_IMAGE ?= packethost/cluster-api-provider-packet
BUILD_IMAGE_TAG ?= $(BUILD_IMAGE):latest
PUSH_IMAGE_TAG ?= $(BUILD_IMAGE):$(IMAGETAG)
PROVIDERYAML ?= provider-components.yaml.template
CLUSTERCTL ?= bin/clusterctl-$(OS)-$(ARCH)
MANAGER ?= bin/manager-$(OS)-$(ARCH)
KUBECTL ?= kubectl

GO ?= GO111MODULE=on CGO_ENABLED=0 go

all: test manager clusterctl

# vendor
vendor:
$(GO) mod vendor
./hack/update-vendor.sh
# Image URL to use all building/pushing image targets
IMG ?= controller:latest
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd:trivialVersions=true"

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
else
GOBIN=$(shell go env GOBIN)
endif

# where we store downloaded core
COREPATH ?= out/core
CORE_VERSION ?= v0.3.5
CORE_API ?= https://api.github.com/repos/kubernetes-sigs/cluster-api/releases
CORE_URL ?= https://github.com/kubernetes-sigs/cluster-api/releases/download/$(CORE_VERSION)

# useful function
word-dot = $(word $2,$(subst ., ,$1))

VERSION ?= 0.3.0
VERSION_CONTRACT ?= v1alpha3
VERSION_MAJOR ?= $(call word-dot,$(VERSION),1)
VERSION_MINOR ?= $(call word-dot,$(VERSION),2)

# actual releases
RELEASE_VERSION ?= $(VERSION)
RELEASE_BASE := out/release/infrastructure-packet
RELEASE_DIR := $(RELEASE_BASE)/$(RELEASE_VERSION)
FULL_RELEASE_DIR := $(realpath .)/$(RELEASE_DIR)
RELEASE_MANIFEST := $(RELEASE_DIR)/infrastructure-components.yaml
RELEASE_METADATA := $(RELEASE_DIR)/metadata.yaml
FULL_RELEASE_MANIFEST := $(FULL_RELEASE_DIR)/infrastructure-components.yaml
RELEASE_CLUSTERCTLYAML := $(RELEASE_BASE)/clusterctl-$(RELEASE_VERSION).yaml

# managerless - for running manager locally for testing
MANAGERLESS_VERSION ?= $(RELEASE_VERSION)
MANAGERLESS_BASE := out/managerless/infrastructure-packet
MANAGERLESS_DIR := $(MANAGERLESS_BASE)/$(RELEASE_VERSION)
FULL_MANAGERLESS_DIR := $(realpath .)/$(MANAGERLESS_DIR)
MANAGERLESS_MANIFEST := $(MANAGERLESS_DIR)/infrastructure-components.yaml
MANAGERLESS_METADATA := $(MANAGERLESS_DIR)/metadata.yaml
FULL_MANAGERLESS_MANIFEST := $(FULL_MANAGERLESS_DIR)/infrastructure-components.yaml
MANAGERLESS_CLUSTERCTLYAML := $(MANAGERLESS_BASE)/clusterctl-$(MANAGERLESS_VERSION).yaml

# templates
METADATA_TEMPLATE ?= templates/metadata-template.yaml
CLUSTERCTL_TEMPLATE ?= templates/clusterctl-template.yaml


all: manager

# 2 separate targets: ci-test does everything locally, does not need docker; ci includes ci-test and building the image
ci-test: fmt vet test
ci: ci-test image
ci: test image

imagetag:
ifndef IMAGETAG
Expand Down Expand Up @@ -83,75 +130,113 @@ $(KUBEBUILDER):


# Run tests
test: vendor generate fmt vet manifests $(KUBEBUILDER)
$(GO) test -mod=vendor ./pkg/... ./cmd/... -coverprofile cover.out
test: generate fmt vet manifests
go test ./... -coverprofile cover.out

# Build manager binary
manager: $(MANAGER)
$(MANAGER): vendor generate fmt vet
GOOS=$(OS) GOARCH=$(ARCH) $(GO) build -mod=vendor -o $@ github.com/packethost/cluster-api-provider-packet/cmd/manager

# Build clusterctl binary
clusterctl: $(CLUSTERCTL)
$(CLUSTERCTL): vendor generate fmt vet
GOOS=$(OS) GOARCH=$(ARCH) $(GO) build -mod=vendor -o $@ github.com/packethost/cluster-api-provider-packet/cmd/clusterctl
$(MANAGER): generate fmt vet
GOOS=$(OS) GOARCH=$(ARCH) $(GO) build -o $@ .

# Run against the configured Kubernetes cluster in ~/.kube/config
run: vendor generate fmt vet
$(GO) run -mod=vendor ./cmd/manager/main.go
run: generate fmt vet manifests
go run ./main.go

# Install CRDs into a cluster
install: manifests
kubectl apply -f config/crds
kustomize build config/crd | kubectl apply -f -

# Uninstall CRDs from a cluster
uninstall: manifests
kustomize build config/crd | kubectl delete -f -

# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
deploy: manifests $(CLUSTERCTL)
generate-yaml.sh
$(CLUSTERCTL) create cluster --provider packet --bootstrap-type kind -c out/packet/cluster.yaml -m out/packet/machines.yaml -a out/packet/addons.yaml -p out/packet/provider-components.yaml --v=10
deploy: manifests
cd config/manager && kustomize edit set image controller=${IMG}
kustomize build config/default | kubectl apply -f -

# Generate manifests e.g. CRD, RBAC etc.
manifests: $(PROVIDERYAML)
$(PROVIDERYAML):
# which image do we patch in? BUILD_IMAGE_TAG or PUSH_IMAGE_TAG? Depends on if it is set
ifdef IMAGETAG
$(eval PATCH_IMAGE_TAG := $(PUSH_IMAGE_TAG))
else
$(eval PATCH_IMAGE_TAG := $(BUILD_IMAGE_TAG))
endif
# generate
$(GO) run -mod=vendor vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go all
# patch the particular image tag we will want to deploy
@echo "updating kustomize image patch file for manager resource"
sed -i'' -e 's@PATCH_ME_IMAGE@'"$(PATCH_IMAGE_TAG)"'@' ./config/default/manager_image_patch.yaml
# create the manifests
$(KUBECTL) kustomize vendor/sigs.k8s.io/cluster-api/config/default/ > $(PROVIDERYAML)
echo "---" >> $(PROVIDERYAML)
$(KUBECTL) kustomize config/ >> $(PROVIDERYAML)

manifests: controller-gen
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases

# Run go fmt against code
fmt:
$(GO) fmt ./pkg/... ./cmd/...
go fmt ./...

# Run go vet against code
vet:
$(GO) vet -mod=vendor ./pkg/... ./cmd/...
go vet ./...

# Generate code
generate:
ifndef GOPATH
$(error GOPATH not defined, please define GOPATH. Run "go help gopath" to learn more about GOPATH)
endif
$(GO) generate -mod=vendor ./pkg/... ./cmd/...
generate: controller-gen
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."

# Build the docker image
image: docker-build
docker-build:
docker build -t $(BUILD_IMAGE_TAG) .
image: test
docker build . -t ${IMG}

# Push the docker image
push:
docker push $(PUSH_IMAGE_TAG)

image-tag:
@echo $(PUSH_IMAGE_TAG)
docker push ${IMG}

# find or download controller-gen
# download controller-gen if necessary
# version must be at least the given version
.PHONY: $(CONTROLLER_GEN)
controller-gen: $(CONTROLLER_GEN)
$(CONTROLLER_GEN):
scripts/controller-gen.sh $@ $(CONTROLLER_GEN_VERSION)

examples:
./generate-examples.sh

$(RELEASE_DIR) $(RELEASE_BASE):
mkdir -p $@

$(MANAGERLESS_DIR) $(MANAGERLESS_BASE):
mkdir -p $@

.PHONY: release-clusterctl release-manifests release $(RELEASE_CLUSTERCTLYAML) $(RELEASE_MANIFEST)
release: release-manifests release-clusterctl
release-manifests: $(RELEASE_MANIFEST) $(RELEASE_METADATA)
$(RELEASE_MANIFEST): $(RELEASE_DIR) ## Builds the manifests to publish with a release
kustomize build config/default > $@

$(RELEASE_METADATA): $(RELEASE_DIR) $(METADATA_TEMPLATE)
cat $(METADATA_TEMPLATE) | sed 's/MAJOR/$(VERSION_MAJOR)/g' | sed 's/MINOR/$(VERSION_MINOR)g' | sed 's/CONTRACT/$(VERSION_CONTRACT)/g' > $@

release-clusterctl: $(RELEASE_CLUSTERCTLYAML)
$(RELEASE_CLUSTERCTLYAML): $(RELEASE_BASE)
cat $(CLUSTERCTL_TEMPLATE) | sed 's%URL%$(FULL_RELEASE_MANIFEST)%g' > $@

.PHONY: managerless-clusterctl managerless-manifests managerless $(MANAGERLESS_CLUSTERCTLYAML) $(MANAGERLESS_MANIFEST)
managerless: managerless-manifests managerless-clusterctl
managerless-manifests: $(MANAGERLESS_MANIFEST) $(MANAGERLESS_METADATA)
$(MANAGERLESS_MANIFEST): $(MANAGERLESS_DIR)
kustomize build config/managerless > $@

$(MANAGERLESS_METADATA): $(MANAGERLESS_DIR) $(METADATA_TEMPLATE)
cat $(METADATA_TEMPLATE) | sed 's/MAJOR/$(VERSION_MAJOR)/g' | sed 's/MINOR/$(VERSION_MINOR)/g' | sed 's/CONTRACT/$(VERSION_CONTRACT)/g' > $@

managerless-clusterctl: $(MANAGERLESS_CLUSTERCTLYAML)
$(MANAGERLESS_CLUSTERCTLYAML): $(MANAGERLESS_BASE)
@cat $(CLUSTERCTL_TEMPLATE) | sed 's%URL%$(FULL_MANAGERLESS_MANIFEST)%g' > $@
@echo "managerless ready, command-line is:"
@echo " clusterctl --config=$@ <commands>"

$(COREPATH):
mkdir -p $@

$(COREPATH)/%:
curl -s -L -o $@ $(CORE_URL)/$*

core: $(COREPATH)
# download from core
@$(eval YAMLS := $(shell curl -s -L $(CORE_API) | jq -r '[.[] | select(.tag_name == "$(CORE_VERSION)").assets[] | select(.name | contains("yaml")) | .name] | join(" ")'))
@if [ -n "$(YAMLS)" ]; then $(MAKE) $(addprefix $(COREPATH)/,$(YAMLS)); fi

cluster-init: core managerless
kubectl apply --validate=false -f $(CERTMANAGER_URL)
# because of dependencies, this is allowed to fail once or twice
kubectl apply -f $(COREPATH) || kubectl apply -f $(COREPATH) || kubectl apply -f $(COREPATH)
kubectl apply -f $(FULL_MANAGERLESS_MANIFEST)
11 changes: 9 additions & 2 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
version: "1"
domain: k8s.io
domain: cluster.x-k8s.io
repo: github.com/packethost/cluster-api-provider-packet
resources:
- group: infrastructure
kind: PacketCluster
version: v1alpha3
- group: infrastructure
kind: PacketMachine
version: v1alpha3
version: "2"
Loading