Skip to content

Commit

Permalink
operator sdk upgrade (cloud-bulldozer#598)
Browse files Browse the repository at this point in the history
* operator sdk upgrade

* changing ns

* changing ns to benchmark-operator and changing directory structure to make sure templates and group vars are picked up

* changing benchmark-operator wait command

* changing benchmark-operator deploy pull policy

* disabling auth proxy

* adding redis to kustomize

* adding redis to kustomize

* renaming benchmark names and changing cleanup step logic

* fixing cleanup logic

* fixing cleanup logic pt2

* testing rescue block

* delete ns before test

* skipping cleanup

* delete benchmarks before test

* fixing delete

* fixing byowl profile

* kube-burner test

* removing duplicate task in roles that already get called in the top level playbook and fixing sa

* fixing bad indent

* fixing bad file path

* fixing uuid logic

* refactoring test logic

* fixing hammerdb

* adding node selector

* adding kernel cache dropper

* adding kernel cache dropper

* adding bug fixes

* adding more bug fixes

* adding more bug fixes and deleting molecule files

* fixing uperf test logic

* adding fail fast logic on timeout and fixing some test logic

* increasing timeouts for log generator and uperf

* fixing backpack requirements to add scc to right sa

* removing old install docs and adding new to the README

* removing delete_operator clal

* changing default IMG

* fixing crd symlink in chart

* fix manager env

* fixing typo

* removing unused gitignore patterns and updating helm command in README
  • Loading branch information
Keith Whitley authored Jul 16, 2021
1 parent 7d1dcfd commit 59028c2
Show file tree
Hide file tree
Showing 201 changed files with 1,601 additions and 1,481 deletions.
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,12 @@
# Ignore

# Binaries for programs and plugins
*.dll
*.so
*.dylib
bin

# editor and IDE paraphernalia
.idea
*.swp
*.swo
*~
7 changes: 0 additions & 7 deletions .travis.yml

This file was deleted.

6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ apiVersion: ripsaw.cloudbulldozer.io/v1alpha1
kind: Benchmark
metadata:
name: example-benchmark
namespace: my-ripsaw
namespace: benchmark-operator
spec:
workload:
name: your_workload_name
Expand All @@ -95,14 +95,14 @@ spec:
my_key_3: my_value_3
```
Note: The Benchmark has to be created in the namespace `my-ripsaw`
Note: The Benchmark has to be created in the namespace `benchmark-operator`

### Additional guidance for adding a workload
* Please keep the [workload status](README.md#workloads-status) updated
* To help users understand how the workload can be run, please add a guide similar
to [uperf](docs/uperf.md)
* Add the link for your workload guide to [installation guide](docs/installation.md#running-workloads)
* Ensure all resources created are within the `my-ripsaw` namespace, this can be done by setting namespace
* Ensure all resources created are within the `benchmark-operator` namespace, this can be done by setting namespace
to use `operator_namespace` var. This is to ensure that the resources aren't defaulted to current active
namespace which is what `ansible_operator_meta.namespace` would default to.
* All resources created as part of your role should use `trunc_uuid` ansible var in their names and labels, so
Expand Down
11 changes: 4 additions & 7 deletions build/Dockerfile → Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM quay.io/operator-framework/ansible-operator:v1.5.0
FROM quay.io/operator-framework/ansible-operator:v1.9.0
USER root

COPY requirements.yml ${HOME}/requirements.yml
Expand All @@ -9,10 +9,7 @@ COPY image_resources/centos8-appstream.repo /etc/yum.repos.d/centos8-appstream.r
RUN dnf install -y --nodocs redis openssl --enablerepo=centos8-appstream && dnf clean all

COPY resources/kernel-cache-drop-daemonset.yaml /opt/kernel_cache_dropper/
COPY group_vars/ ${HOME}/group_vars/
COPY roles/ ${HOME}/roles/
COPY templates/ ${HOME}/templates/
COPY meta/ ${HOME}/meta/
COPY watches.yaml ${HOME}/watches.yaml
COPY playbook.yml ${HOME}/playbook.yml
USER 1001
COPY roles/ ${HOME}/roles/
COPY playbooks/ ${HOME}/playbooks/
USER 1001
179 changes: 179 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# VERSION defines the project version for the bundle.
# Update this value when you upgrade the version of your project.
# To re-generate a bundle for another specific version without changing the standard setup, you can:
# - use the VERSION as arg of the bundle target (e.g make bundle VERSION=0.0.2)
# - use environment variables to overwrite this value (e.g export VERSION=0.0.2)
VERSION ?= 0.0.1

# CHANNELS define the bundle channels used in the bundle.
# Add a new line here if you would like to change its default config. (E.g CHANNELS = "preview,fast,stable")
# To re-generate a bundle for other specific channels without changing the standard setup, you can:
# - use the CHANNELS as arg of the bundle target (e.g make bundle CHANNELS=preview,fast,stable)
# - use environment variables to overwrite this value (e.g export CHANNELS="preview,fast,stable")
ifneq ($(origin CHANNELS), undefined)
BUNDLE_CHANNELS := --channels=$(CHANNELS)
endif

# DEFAULT_CHANNEL defines the default channel used in the bundle.
# Add a new line here if you would like to change its default config. (E.g DEFAULT_CHANNEL = "stable")
# To re-generate a bundle for any other default channel without changing the default setup, you can:
# - use the DEFAULT_CHANNEL as arg of the bundle target (e.g make bundle DEFAULT_CHANNEL=stable)
# - use environment variables to overwrite this value (e.g export DEFAULT_CHANNEL="stable")
ifneq ($(origin DEFAULT_CHANNEL), undefined)
BUNDLE_DEFAULT_CHANNEL := --default-channel=$(DEFAULT_CHANNEL)
endif
BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)

# IMAGE_TAG_BASE defines the docker.io namespace and part of the image name for remote images.
# This variable is used to construct full image tags for bundle and catalog images.
#
# For example, running 'make bundle-build bundle-push catalog-build catalog-push' will build and push both
# cloudbulldozer.io/ripsaw-bundle:$VERSION and cloudbulldozer.io/ripsaw-catalog:$VERSION.
IMAGE_TAG_BASE ?= cloudbulldozer.io/ripsaw

# BUNDLE_IMG defines the image:tag used for the bundle.
# You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=<some-registry>/<project-name-bundle>:<tag>)
BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:v$(VERSION)

# Image URL to use all building/pushing image targets
IMG ?= quay.io/benchmark-operator/benchmark-operator:master

all: docker-build

##@ General

# The help target prints out all targets with their descriptions organized
# beneath their categories. The categories are represented by '##@' and the
# target descriptions by '##'. The awk commands is responsible for reading the
# entire set of makefiles included in this invocation, looking for lines of the
# file as xyz: ## something, and then pretty-format the target and help. Then,
# if there's a line with ##@ something, that gets pretty-printed as a category.
# More info on the usage of ANSI control characters for terminal formatting:
# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
# More info on the awk command:
# http://linuxcommand.org/lc3_adv_awk.php

help: ## Display this help.
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

##@ Build

run: ansible-operator ## Run against the configured Kubernetes cluster in ~/.kube/config
$(ANSIBLE_OPERATOR) run

docker-build: ## Build docker image with the manager.
docker build -t ${IMG} .

docker-push: ## Push docker image with the manager.
docker push ${IMG}

podman-build: ## Build docker image with the manager.
podman build -t ${IMG} .

podman-push: ## Push docker image with the manager.
podman push ${IMG}

##@ Deployment

install: kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config.
$(KUSTOMIZE) build config/crd | kubectl apply -f -

uninstall: kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
$(KUSTOMIZE) build config/crd | kubectl delete -f -

deploy: kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config.
cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
$(KUSTOMIZE) build config/default | kubectl apply -f -

undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config.
$(KUSTOMIZE) build config/default | kubectl delete -f -

OS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
ARCH := $(shell uname -m | sed 's/x86_64/amd64/')

.PHONY: kustomize
KUSTOMIZE = $(shell pwd)/bin/kustomize
kustomize: ## Download kustomize locally if necessary.
ifeq (,$(wildcard $(KUSTOMIZE)))
ifeq (,$(shell which kustomize 2>/dev/null))
@{ \
set -e ;\
mkdir -p $(dir $(KUSTOMIZE)) ;\
curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | \
tar xzf - -C bin/ ;\
}
else
KUSTOMIZE = $(shell which kustomize)
endif
endif

.PHONY: ansible-operator
ANSIBLE_OPERATOR = $(shell pwd)/bin/ansible-operator
ansible-operator: ## Download ansible-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist.
ifeq (,$(wildcard $(ANSIBLE_OPERATOR)))
ifeq (,$(shell which ansible-operator 2>/dev/null))
@{ \
set -e ;\
mkdir -p $(dir $(ANSIBLE_OPERATOR)) ;\
curl -sSLo $(ANSIBLE_OPERATOR) https://github.com/operator-framework/operator-sdk/releases/download/v1.7.2/ansible-operator_$(OS)_$(ARCH) ;\
chmod +x $(ANSIBLE_OPERATOR) ;\
}
else
ANSIBLE_OPERATOR = $(shell which ansible-operator)
endif
endif

.PHONY: bundle
bundle: kustomize ## Generate bundle manifests and metadata, then validate generated files.
operator-sdk generate kustomize manifests -q
cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG)
$(KUSTOMIZE) build config/manifests | operator-sdk generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS)
operator-sdk bundle validate ./bundle

.PHONY: bundle-build
bundle-build: ## Build the bundle image.
docker build -f bundle.Dockerfile -t $(BUNDLE_IMG) .

.PHONY: bundle-push
bundle-push: ## Push the bundle image.
$(MAKE) docker-push IMG=$(BUNDLE_IMG)

.PHONY: opm
OPM = ./bin/opm
opm: ## Download opm locally if necessary.
ifeq (,$(wildcard $(OPM)))
ifeq (,$(shell which opm 2>/dev/null))
@{ \
set -e ;\
mkdir -p $(dir $(OPM)) ;\
curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.15.1/$(OS)-$(ARCH)-opm ;\
chmod +x $(OPM) ;\
}
else
OPM = $(shell which opm)
endif
endif

# A comma-separated list of bundle images (e.g. make catalog-build BUNDLE_IMGS=example.com/operator-bundle:v0.1.0,example.com/operator-bundle:v0.2.0).
# These images MUST exist in a registry and be pull-able.
BUNDLE_IMGS ?= $(BUNDLE_IMG)

# The image tag given to the resulting catalog image (e.g. make catalog-build CATALOG_IMG=example.com/operator-catalog:v0.2.0).
CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(VERSION)

# Set CATALOG_BASE_IMG to an existing catalog image tag to add $BUNDLE_IMGS to that image.
ifneq ($(origin CATALOG_BASE_IMG), undefined)
FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG)
endif

# Build a catalog image by adding bundle images to an empty catalog using the operator package manager tool, 'opm'.
# This recipe invokes 'opm' in 'semver' bundle add mode. For more information on add modes, see:
# https://github.com/operator-framework/community-operators/blob/7f1438c/docs/packaging-operator.md#updating-your-existing-operator
.PHONY: catalog-build
catalog-build: opm ## Build a catalog image.
$(OPM) index add --container-tool docker --mode semver --tag $(CATALOG_IMG) --bundles $(BUNDLE_IMGS) $(FROM_INDEX_OPT)

# Push the catalog image.
.PHONY: catalog-push
catalog-push: ## Push a catalog image.
$(MAKE) docker-push IMG=$(CATALOG_IMG)
16 changes: 16 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
domain: cloudbulldozer.io
layout:
- ansible.sdk.operatorframework.io/v1
plugins:
manifests.sdk.operatorframework.io/v2: {}
scorecard.sdk.operatorframework.io/v2: {}
projectName: ripsaw
resources:
- api:
crdVersion: v1
namespaced: true
domain: cloudbulldozer.io
group: ripsaw
kind: Benchmark
version: v1alpha1
version: "3"
32 changes: 25 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,43 @@
The intent of this Operator is to deploy common workloads to establish
a performance baseline of Kubernetes cluster on your provider.

## Installation

## Installation (Default)
The easiest way to install the operator is through the operator-sdk methods provided in the `Makefile`.

```bash
git clone https://github.com/cloud-bulldozer/benchmark-operator
make deploy
```

If you wish to build a version of the operator from your local copy of the repo, you can run

```bash
git clone https://github.com/cloud-bulldozer/benchmark-operator
make podman-build podman-push deploy IMG=$YOUR_IMAGE
```

> Note: building the image requires podman
## Installation (Helm)

Installing the benchmark-operator is easiest by using the helm chart and can be done with the following commands. This requires
your machine to have Helm installed. [Install Helm](https://helm.sh/docs/intro/install/)

> Note: If running on openshift you'll need to run this command before installing the chart. `oc adm policy -n my-ripsaw add-scc-to-user privileged -z benchmark-operator`
> Note: If running on openshift you'll need to run this command before installing the chart. `oc adm policy -n benchmark-operator add-scc-to-user privileged -z benchmark-operator`


```bash
git clone https://github.com/cloud-bulldozer/benchmark-operator
cd benchmark-operator/charts/benchmark-operator
helm install benchmark-operator . -n my-ripsaw --create-namespace
helm install benchmark-operator . -n benchmark-operator --create-namespace
```

To delete this release, you can do so with the following command:

```bash
helm delete benchmark-operator -n my-ripsaw --purge
helm uninstall benchmark-operator -n benchmark-operator
```


Expand Down Expand Up @@ -75,7 +93,7 @@ apiVersion: ripsaw.cloudbulldozer.io/v1alpha1
kind: Benchmark
metadata:
name: example-benchmark
namespace: my-ripsaw
namespace: benchmark-operator
spec:
elasticsearch:
url: "http://my-es.foo.bar:80"
Expand All @@ -101,7 +119,7 @@ apiVersion: ripsaw.cloudbulldozer.io/v1alpha1
kind: Benchmark
metadata:
name: example-benchmark
namespace: my-ripsaw
namespace: benchmark-operator
spec:
elasticsearch:
url: "http://my-es.foo.bar:80"
Expand All @@ -126,7 +144,7 @@ apiVersion: ripsaw.cloudbulldozer.io/v1alpha1
kind: Benchmark
metadata:
name: example-benchmark
namespace: my-ripsaw
namespace: benchmark-operator
spec:
uuid: 6060004a-7515-424e-93bb-c49844600dde
elasticsearch:
Expand Down
10 changes: 0 additions & 10 deletions build/test-framework/Dockerfile

This file was deleted.

7 changes: 0 additions & 7 deletions build/test-framework/ansible-test.sh

This file was deleted.

1 change: 1 addition & 0 deletions charts/benchmark-operator/crds/crd.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ spec:
system_metrics:
type: string
default: Not collected
message:
type: string
default: None
additionalPrinterColumns:
- name: Type
type: string
Expand Down
6 changes: 6 additions & 0 deletions config/crd/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# This kustomization.yaml is not intended to be run by itself,
# since it depends on service name and namespace that are out of this kustomize package.
# It should be run by config/default
resources:
- bases/ripsaw.cloudbulldozer.io_benchmarks.yaml
#+kubebuilder:scaffold:crdkustomizeresource
Loading

0 comments on commit 59028c2

Please sign in to comment.