{"id":13820220,"url":"https://github.com/kubevirt/hyperconverged-cluster-operator","last_synced_at":"2025-05-16T00:06:16.198Z","repository":{"id":37883306,"uuid":"173346239","full_name":"kubevirt/hyperconverged-cluster-operator","owner":"kubevirt","description":"Operator pattern for managing multi-operator products","archived":false,"fork":false,"pushed_at":"2025-05-06T08:37:47.000Z","size":177479,"stargazers_count":163,"open_issues_count":21,"forks_count":156,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-06T09:45:18.338Z","etag":null,"topics":["hco","hyperconverged","kubernetes","kubernetes-operator","openshift","operator","virtualization"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kubevirt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-03-01T17:59:51.000Z","updated_at":"2025-04-30T15:44:31.000Z","dependencies_parsed_at":"2024-02-11T16:39:55.638Z","dependency_job_id":"befc3600-b424-43b0-8d45-c7c5bb3d0540","html_url":"https://github.com/kubevirt/hyperconverged-cluster-operator","commit_stats":{"total_commits":1911,"total_committers":121,"mean_commits":"15.793388429752065","dds":0.7781266352694924,"last_synced_commit":"75527d097b089a31af3d703119f20d98eb89770d"},"previous_names":[],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubevirt%2Fhyperconverged-cluster-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubevirt%2Fhyperconverged-cluster-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubevirt%2Fhyperconverged-cluster-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubevirt%2Fhyperconverged-cluster-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kubevirt","download_url":"https://codeload.github.com/kubevirt/hyperconverged-cluster-operator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254442854,"owners_count":22071878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hco","hyperconverged","kubernetes","kubernetes-operator","openshift","operator","virtualization"],"created_at":"2024-08-04T08:00:59.658Z","updated_at":"2025-05-16T00:06:11.179Z","avatar_url":"https://github.com/kubevirt.png","language":"Go","funding_links":[],"categories":["kubernetes"],"sub_categories":[],"readme":"[![Nightly CI](https://prow.ci.openshift.org/badge.svg?jobs=periodic-ci-kubevirt-hyperconverged-cluster-operator-main-hco-e2e-deploy-nightly-main-aws)](https://prow.ci.openshift.org/job-history/gs/origin-ci-test/logs/periodic-ci-kubevirt-hyperconverged-cluster-operator-main-hco-e2e-deploy-nightly-main-aws)\n[![Nightly CI images](https://prow.ci.kubevirt.io/badge.svg?jobs=periodic-hco-push-nightly-build-main)](https://prow.ci.kubevirt.io/job-history/gs/kubevirt-prow/logs/periodic-hco-push-nightly-build-main)\n[![Go Report Card](https://goreportcard.com/badge/github.com/kubevirt/hyperconverged-cluster-operator)](https://goreportcard.com/report/github.com/kubevirt/hyperconverged-cluster-operator)\n[![Coverage Status](https://coveralls.io/repos/github/kubevirt/hyperconverged-cluster-operator/badge.svg?branch=main\u0026service=github)](https://coveralls.io/github/kubevirt/hyperconverged-cluster-operator?branch=main)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=kubevirt_hyperconverged-cluster-operator\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=kubevirt_hyperconverged-cluster-operator)\n\n# Hyperconverged Cluster Operator\n\nA unified operator deploying and controlling [KubeVirt](https://github.com/kubevirt/kubevirt) and several adjacent operators:\n\n- [Containerized Data Importer](https://github.com/kubevirt/containerized-data-importer)\n- [Scheduling, Scale and Performance](https://github.com/kubevirt/ssp-operator)\n- [Cluster Network Addons](https://github.com/kubevirt/cluster-network-addons-operator)\n- [Node Maintenance](https://github.com/kubevirt/node-maintenance-operator)\n\nThis operator is typically installed from the Operator Lifecycle Manager (OLM),\nand creates operator CustomResources (CRs) for its underlying operators as can be seen in the diagram below.\nUse it to obtain an opinionated deployment of KubeVirt and its helper operators.\n\n![](images/HCO-design.jpg)\n\nIn the [HCO components](docs/hco_components.md) doc you can get an up-to-date overview of the involved components.\n\n## Installing HCO using kustomize (Openshift OLM Only)\nTo install the default community HyperConverged Cluster Operator, along with its underlying components, run:\n```bash\n$ curl -L https://api.github.com/repos/kubevirt/hyperconverged-cluster-operator/tarball/main | \\\ntar --strip-components=1 -xvzf - kubevirt-hyperconverged-cluster-operator-*/deploy/kustomize\n\n$ ./deploy/kustomize/deploy_kustomize.sh\n```\nThe deployment is completed when HCO custom resource reports its condition as `Available`.\n\nFor more explanation and advanced options for HCO deployment using kustomize, refer to [kustomize deployment documentation](deploy/kustomize/README.md).\n\n## Installing Unreleased Bundle Using A Custom Catalog Source\n\nHyperconverged Cluster Operator is publishing the latest bundle to [quay.io/kubevirt](https://quay.io/repository/kubevirt)\nbefore publishing tagged, stable releases to [OperatorHub.io](https://operatorhub.io).\nThe latest bundle is `quay.io/kubevirt/hyperconverged-cluster-bundle:1.15.0-unstable`. It is built and pushed on every merge to\nmain branch, and contains the most up-to-date manifests, which are pointing to the most recent application images: `hyperconverged-cluster-operator`\nand `hyperconverged-cluster-webhook`, which are built together with the bundle from the current code at the main branch.\nThe unreleased bundle can be consumed on a cluster by creating a CatalogSource pointing to the index image that contains\nthat bundle: `quay.io/kubevirt/hyperconverged-cluster-index:1.15.0-unstable`.\n\nMake the bundle available in the cluster's packagemanifest by adding the following CatalogSource:\n```bash\ncat \u003c\u003cEOF | oc apply -f -\napiVersion: operators.coreos.com/v1alpha1\nkind: CatalogSource\nmetadata:\n  name: hco-unstable-catalog-source\n  namespace: openshift-marketplace\nspec:\n  sourceType: grpc\n  image: quay.io/kubevirt/hyperconverged-cluster-index:1.15.0-unstable\n  displayName: Kubevirt Hyperconverged Cluster Operator\n  publisher: Kubevirt Project\nEOF\n```\nThen, create a namespace, subscription and an OperatorGroup to deploy HCO via OLM:\n```bash\ncat \u003c\u003cEOF | oc apply -f -\napiVersion: v1\nkind: Namespace\nmetadata:\n    name: kubevirt-hyperconverged\n---\napiVersion: operators.coreos.com/v1\nkind: OperatorGroup\nmetadata:\n    name: kubevirt-hyperconverged-group\n    namespace: kubevirt-hyperconverged\n---\napiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n    name: hco-operatorhub\n    namespace: kubevirt-hyperconverged\nspec:\n    source: hco-unstable-catalog-source\n    sourceNamespace: openshift-marketplace\n    name: community-kubevirt-hyperconverged\n    channel: \"candidate-v1.15\"\nEOF\n```\nThen, create the HyperConverged custom resource to complete the installation.\nFurther information about the HyperConverged CR and its possible configuration options can be found\nin the [Cluster Configuration](docs/cluster-configuration.md) doc.\n## Using the HCO without OLM or Marketplace\n\nRun the following script to apply the HCO operator:\n\n```bash\n$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/main/deploy/deploy.sh | bash\n```\n\n## Developer Workflow (using [OLM](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/install/install.md#installing-olm))\n\nBuild the HCO container using the Makefile recipes `make container-build` and\n`make container-push` with vars `IMAGE_REGISTRY`, `REGISTRY_NAMESPACE`, and `IMAGE_TAG`\nto direct it's location.\n\nTo use the HCO's container, we'll use a registry image to serve metadata to OLM.\nBuild and push the HCO's registry image.\n```bash\n# e.g. quay.io, docker.io\nexport IMAGE_REGISTRY=\u003cimage_registry\u003e\nexport REGISTRY_NAMESPACE=\u003ccontainer_org\u003e\nexport IMAGE_TAG=example\n\n# build the container images and push them to registry\nmake container-build container-push\n\nexport HCO_OPERATOR_IMAGE=$IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-operator:$IMAGE_TAG\nexport HCO_WEBHOOK_IMAGE=$IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-webhook:$IMAGE_TAG\nexport ARTIFACTS_SERVER_IMAGE=$IMAGE_REGISTRY/$REGISTRY_NAMESPACE/virt-artifacts-server:$IMAGE_TAG\n\n# Image to be used in CSV manifests\nHCO_OPERATOR_IMAGE=$HCO_OPERATOR_IMAGE CSV_VERSION=$CSV_VERSION make build-manifests\nsed -i \"s|+WEBHOOK_IMAGE_TO_REPLACE+|${HCO_WEBHOOK_IMAGE}|g\" deploy/index-image/community-kubevirt-hyperconverged/1.12.0/manifests/kubevirt-hyperconverged-operator.v1.12.0.clusterserviceversion.yaml\nsed -i \"s|+ARTIFACTS_SERVER_IMAGE_TO_REPLACE+|${ARTIFACTS_SERVER_IMAGE}|g\" deploy/index-image/community-kubevirt-hyperconverged/1.12.0/manifests/kubevirt-hyperconverged-operator.v1.12.0.clusterserviceversion.yaml\n```\n\nCreate the namespace for the HCO.\n```bash\n$ kubectl create ns kubevirt-hyperconverged\n```\n\nFor the next set of commands, we will use the\n[`operator-sdk`](https://github.com/operator-framework/operator-sdk/releases) CLI tool. Below commands will create a\nbundle image, push this image, and finally use that bundle image to install the HyperConverged cluster\nOperator on the OLM-enabled cluster.\n\n```shell\noperator-sdk generate bundle --input-dir deploy/index-image/ --output-dir _out/bundle\noperator-sdk bundle validate _out/bundle  # optional\npodman build -f deploy/index-image/bundle.Dockerfile -t $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-index:$IMAGE_TAG\npodman push $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-index:$IMAGE_TAG\noperator-sdk bundle validate $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-index:$IMAGE_TAG\noperator-sdk run bundle -n kubevirt-hyperconverged $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hyperconverged-cluster-index:$IMAGE_TAG\n```\n\nCreate an HCO CustomResource, which creates the KubeVirt CR, launching KubeVirt,\nCDI (Containerized Data Importer), Network-addons, VM import, TTO (Tekton Tasks Operator) and SSP (Scheduling, Scale\nand Performance) Operator.\n```bash\n$ kubectl create -f deploy/hco.cr.yaml -n kubevirt-hyperconverged\n```\n\n## Create a Cluster \u0026 Launch the HCO\n1. Choose the provider\n```bash\n#For k8s cluster:\n$ export KUBEVIRT_PROVIDER=\"k8s-1.17\"\n```\n```bash\n#For okd cluster:\n$ export KUBEVIRT_PROVIDER=\"okd-4.1\"\n```\n2. Navigate to the project's directory\n```bash\n$ cd \u003cpath\u003e/hyperconverged-cluster-operator\n```\n3. Remove an old cluster\n```bash\n$ make cluster-down\n```\n4. Create a new cluster\n```bash\n$ make cluster-up\n```\n5. Clean previous HCO deployment and re-deploy HCO \\\n   (When making a change, execute only this command - no need to repeat steps 1-3)\n```bash\n$ make cluster-sync\n```\n### Command-Line Tool\nUse `./cluster/kubectl.sh` as the command-line tool.\n\nFor example:\n```bash\n$ ./cluster/kubectl.sh get pods --all-namespaces\n```\n\n## Deploying HCO on top of external provider\n\nIn order to use HCO on top of external provider, i.e CRC, use:\n```\nexport KUBEVIRT_PROVIDER=external\nexport IMAGE_REGISTRY=\u003ccontainer image repository, such as quay.io, default: quay.io\u003e\nexport REGISTRY_NAMESPACE=\u003cyour org under IMAGE_REGISTRY, i.e your_name if you use quay.io/your_name, default: kubevirt\u003e\nmake cluster-sync\n```\n`oc` binary should exist, and the cluster should be reachable via `oc` commands.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkubevirt%2Fhyperconverged-cluster-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkubevirt%2Fhyperconverged-cluster-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkubevirt%2Fhyperconverged-cluster-operator/lists"}