A unified operator combining the following projects:
- KubeVirt
- Containerized Data Importer
- Scheduling, Scale and Performance
- Cluster Network Addons
- Node Maintenance
This operator doesn't replace or interfere with Operator Lifecycle Manager (OLM).
It only creates operator CustomResources (CRs), which is a user functionality.
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>
export TAG=example
make bundleRegistry
Create the namespace for the HCO.
kubectl create ns kubevirt-hyperconverged
Create an OperatorGroup.
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1
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-container-registry:$TAG
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: "1.0.0"
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
- Choose the provider
#For k8s cluster:
$ export KUBEVIRT_PROVIDER="k8s-1.15.1"
#For okd cluster:
$ export KUBEVIRT_PROVIDER="okd-4.1"
- Navigate to the project's directory
$ cd <path>/hyperconverged-cluster-operator
- 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