Knative Eventing Operator
The following will install Knative
Eventing and configure it
appropriately for your cluster in the knative-eventing
namespace:
kubectl apply -f deploy/crds/eventing_v1alpha1_knativeeventing_crd.yaml
kubectl apply -f deploy/
To be clear, the operator will be deployed in the default
namespace,
and then it will install Knative Serving in the knative-eventing
namespace.
Prerequisites
Operator SDK
This operator was created using the
operator-sdk.
It's not strictly required but does provide some handy tooling.
The KnativeEventing Custom Resource
The installation of Knative Eventing is triggered by the creation of
an KnativeEventing
custom
resource. When
it starts, the operator will automatically create one of these in
the knative-eventing
namespace if it doesn't already exist.
The operator will ignore all other KnativeEventing
resources. Only
the one in the knative-eventing
namespace will trigger the
installation, reconfiguration, or removal of the knative eventing
resources.
The following are all equivalent:
kubectl get -oyaml -n knative-eventing knativeeventings.eventing.knative.dev
kubectl get -oyaml -n knative-eventing knativeeventing
kubectl get -oyaml -n knative-eventing ke
To uninstall Knative Eventing, simply delete the KnativeEventing
resource.
kubectl delete ke -n knative-eventing --all
Development
It can be convenient to run the operator outside of the cluster to
test changes. The following command will build the operator and use
your current "kube config" to connect to the cluster:
operator-sdk up local --namespace=""
Pass --help
for further details on the various operator-sdk
subcommands, and pass --help
to the operator itself to see its
available options:
operator-sdk up local --operator-flags "--help"
Building the Operator Image
To build the operator,
operator-sdk build quay.io/$REPO/knative-eventing-operator:$VERSION
The image should match what's in
deploy/operator.yaml and the $VERSION
should
match version.go and correspond to the contents
of deploy/resources.
There is a handy script that will build and push an image to
quay.io
and tag the source:
./hack/release.sh
Operator Framework
The remaining sections only apply if you wish to create the metadata
required by the Operator Lifecycle
Manager
Create a ClusterServiceVersion
The OLM requires special manifests that the operator-sdk can help
generate.
Create a ClusterServiceVersion
for the version that corresponds to
the manifest[s] beneath deploy/resources. The
$PREVIOUS_VERSION
is the CSV yours will replace.
operator-sdk olm-catalog gen-csv \
--csv-version $VERSION \
--from-version $PREVIOUS_VERSION \
--update-crds
Most values should carry over, but if you're starting from scratch,
some post-editing of the file it generates may be required:
- Add fields to address any warnings it reports
- Verify
description
and displayName
fields for all owned CRD's
Create a CatalogSource
The catalog.sh script should yield a valid
ConfigMap
and CatalogSource
comprised of the
ClusterServiceVersions
, CustomResourceDefinitions
, and package
manifest in the bundle beneath
deploy/olm-catalog. You should apply its output
in the OLM namespace:
OLM_NS=$(kubectl get pods --all-namespaces | grep olm-operator | head -1 | awk '{print $1}')
./hack/catalog.sh | kubectl apply -n $OLM_NS -f -
Using OLM on Minikube
You can test the operator using
minikube after
installing OLM on it:
minikube start
kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.10.0/crds.yaml
kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.10.0/olm.yaml
Once all the pods in the olm
namespace are running, install the
operator like so:
./hack/catalog.sh | kubectl apply -n $OLM_NS -f -
Interacting with OLM is possible using kubectl
but the OKD console
is "friendlier". If you have docker installed, use this
script
to fire it up on http://localhost:9000.
Using kubectl
To install Knative Eventing into the knative-eventing
namespace,
simply subscribe to the operator by running this script:
OLM_NS=$(kubectl get og --all-namespaces | grep olm-operators | awk '{print $1}')
OPERATOR_NS=$(kubectl get og --all-namespaces | grep global-operators | awk '{print $1}')
cat <<-EOF | kubectl apply -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: knative-eventing-operator-sub
generateName: knative-eventing-operator-
namespace: $OPERATOR_NS
spec:
source: knative-eventing-operator
sourceNamespace: $OLM_NS
name: knative-eventing-operator
channel: alpha
EOF