A unified operator deploying and controlling KubeVirt and several adjacent operators:
- Containerized Data Importer
- Scheduling, Scale and Performance
- Cluster Network Addons
- Node Maintenance
This operator is typically installed from the Operator Lifecycle Manager (OLM), and creates operator CustomResources (CRs) for its underlying operators as can be seen in the diagram below. Use it to obtain an opinionated deployment of KubeVirt and its helper operators.
To install the default community HyperConverged Cluster Operator, along with its underlying components, run:
$ curl -L https://api.github.com/repos/kubevirt/hyperconverged-cluster-operator/tarball/master | \
tar --strip-components=1 -xvzf - kubevirt-hyperconverged-cluster-operator-*/deploy/kustomize
$ ./deploy/kustomize/deploy_kustomize.sh
The deployment is completed when HCO custom resource reports its condition as Available
.
For more explanation and advanced options for HCO deployment using kustomize, refer to kustomize deployment documentation.
The hyperconverged cluster operator will publish the latest bundles to quay.io/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 -
# 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
, REGISTRY_NAMESPACE
, and CONTAINER_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.
# e.g. quay.io, docker.io
export IMAGE_REGISTRY=<image_registry>
export REGISTRY_NAMESPACE=<container_org>
export CONTAINER_TAG=example
# builds the registry image and pushes it to
# $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hco-container-registry:$CONTAINER_TAG
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
spec:
targetNamespaces:
- "kubevirt-hyperconverged"
EOF
Create a CatalogSource and a Subscription.
If OLM Operator and Catalog Operator run in a namespace different than
openshift-marketplace
, replaceopenshift-marketplace
with it in the CatalogSource and Subscription below.
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: hco-catalogsource
namespace: openshift-marketplace
spec:
sourceType: grpc
image: $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hco-container-registry:$CONTAINER_TAG
displayName: KubeVirt HyperConverged
publisher: Red Hat
EOF
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-subscription
namespace: kubevirt-hyperconverged
spec:
channel: "1.4.0"
name: community-kubevirt-hyperconverged
source: hco-catalogsource
sourceNamespace: openshift-marketplace
EOF
Create an HCO CustomResource, which creates the KubeVirt CR, launching KubeVirt, CDI, Network-addons, VM import and SSP.
kubectl create -f deploy/hco.cr.yaml -n kubevirt-hyperconverged
- Choose the provider
#For k8s cluster:
$ export KUBEVIRT_PROVIDER="k8s-1.17"
#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/kubectl.sh
as the command-line tool.
For example:
$ ./cluster/kubectl.sh get pods --all-namespaces