The goal of the hyperconverged-cluster-operator (HCO) is to provide a single entrypoint for multiple operators - kubevirt, cdi, networking, ect... - where users can deploy and configure them in a single object. This operator is sometimes referred to as a "meta operator" or an "operator for operators". Most importantly, this operator doesn't replace or interfere with OLM. It only creates operator CRs, which is the user's prerogative.
The Hyperconverged Cluster Operator is published as a Community Operator in Operatorhub.io. In the UI, you can search for it under the "OperatorHub" tab or deploy from the commandline:
$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/master/deploy/hco.yaml | kubectl create -f -
The hyperconverged cluster operator will publish the lastest bundles to quay/kubevirt-hyperconvered/hco-operatohub before publishing to operatorhub.io.
Make the unreleased bundles available in Marketplace by adding the app registry:
# Remove the hco-bundle from the community-operators sources
$ kubectl get operatorsource -n openshift-marketplace community-operators -o yaml | sed "s/hco-operatorhub,//" | kubectl apply -f -
$ kubectl get catalogsourceconfig -n openshift-marketplace community-operators -o yaml | sed "s/hco-operatorhub,//" | sed "s/hco-operatorhub\:*,//" | kubectl apply -f -
# Add the unreleases bundle source
$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/master/tools/quay-registry.sh | bash -s $QUAY_USERNAME $QUAY_PASSWORD
Run the following script to apply the HCO operator:
$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/master/deploy/deploy.sh | bash
If you want to make changes to the HCO, here's how you can test your changes through OLM.
Build the HCO container using the Makefile recipes make container-build
and
make container-push
with vars IMAGE_REGISTRY
, OPERATOR_IMAGE
, and IMAGE_TAG
to direct it's location.
To use the HCO's container, we'll use a registry image to serve metadata to OLM. Build and push the HCO's registry image.
export REGISTRY_NAMESPACE=<container_org>
make bundleRegistry CONTAINER_TAG=example
Create the namespace for the HCO.
kubectl create ns kubevirt-hyperconverged
Create an OperatorGroup.
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha2
kind: OperatorGroup
metadata:
name: hco-operatorgroup
namespace: kubevirt-hyperconverged
EOF
Create a Catalog Source.
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: hco-catalogsource
namespace: openshift-marketplace
spec:
sourceType: grpc
image: docker.io/$REGISTRY_NAMESPACE/hco-registry:example
displayName: KubeVirt HyperConverged
publisher: Red Hat
EOF
Create a subscription.
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-subscription
namespace: kubevirt-hyperconverged
spec:
channel: alpha
name: kubevirt-hyperconverged
source: hco-catalogsource
sourceNamespace: openshift-marketplace
EOF
Create an HCO CustomResource, which creates the KubeVirt CR, launching KubeVirt, CDI, Network-addons, and SSP.
kubectl create -f deploy/hco.cr.yaml -n kubevirt-hyperconverged
- Navigate to the project's directory
$ cd <path>/hyperconverged-cluster-opertor
- Remove an old cluster
$ make cluster-down
- Create a new cluster
$ make cluster-up
- Clean previous HCO deployment and re-deploy HCO
(When making a change, execute only this command - no need to repeat steps 1-3)
$ make cluster-sync
Use ./cluster-up/kubectl.sh
as the command-line tool. for example:
$ ./cluster-up/kubectl.sh get pods --all-namespaces