{"id":15716542,"url":"https://github.com/cloudymax/kubevirt-community-stack","last_synced_at":"2026-03-12T09:31:49.852Z","repository":{"id":187893669,"uuid":"677743925","full_name":"cloudymax/kubevirt-community-stack","owner":"cloudymax","description":"Get started using Kubevirt with Helm3","archived":false,"fork":false,"pushed_at":"2025-11-15T18:05:58.000Z","size":2661,"stargazers_count":6,"open_issues_count":7,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-14T14:42:38.316Z","etag":null,"topics":["capi","cluster-api","helm","kubernetes","kubevirt","kubevirt-manager","qemu","qemu-kvm"],"latest_commit_sha":null,"homepage":"https://cloudymax.github.io/kubevirt-community-stack/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"jdambly/kubevirt-charts","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudymax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-12T13:48:08.000Z","updated_at":"2025-12-05T17:44:43.000Z","dependencies_parsed_at":"2023-08-12T16:27:34.226Z","dependency_job_id":"f8331709-c569-4bcf-9804-2a3b86b8cabf","html_url":"https://github.com/cloudymax/kubevirt-community-stack","commit_stats":{"total_commits":227,"total_committers":7,"mean_commits":32.42857142857143,"dds":0.1674008810572687,"last_synced_commit":"68260c0fe643427009cd1e26a0e50eb54d45d786"},"previous_names":["cloudymax/kubevirt-charts","cloudymax/kubevirt-community-stack"],"tags_count":142,"template":false,"template_full_name":null,"purl":"pkg:github/cloudymax/kubevirt-community-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudymax%2Fkubevirt-community-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudymax%2Fkubevirt-community-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudymax%2Fkubevirt-community-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudymax%2Fkubevirt-community-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudymax","download_url":"https://codeload.github.com/cloudymax/kubevirt-community-stack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudymax%2Fkubevirt-community-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29684329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T14:31:22.911Z","status":"ssl_error","status_checked_at":"2026-02-21T14:31:22.570Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["capi","cluster-api","helm","kubernetes","kubevirt","kubevirt-manager","qemu","qemu-kvm"],"created_at":"2024-10-03T21:46:03.546Z","updated_at":"2026-02-21T15:15:38.306Z","avatar_url":"https://github.com/cloudymax.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=center\u003e\nKubevirt Community Stack\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"64\" src=\"https://avatars.githubusercontent.com/u/18700703?s=200\u0026v=4\"\u003e\n\u003c/p\u003e\n\u003cp align=center\u003e\n  Create Kubevirt VMs via Helm \u003cbr\u003e\n  for use with \u003ca href=\"https://argoproj.github.io/cd/\"\u003eArgoCD\u003c/a\u003e, \u003ca href=\"https://argoproj.github.io/workflows/\"\u003eArgo Workflows\u003c/a\u003e, \u003ca href=\"https://keda.sh/\"\u003eKEDA\u003c/a\u003e, \u003ca href=\"https://cluster-api.sigs.k8s.io/\"\u003eClusterAPI\u003c/a\u003e, \u003ca href=\"https://github.com/kubevirt/kubevirt-tekton-tasks?tab=readme-ov-file\"\u003eTekton\u003c/a\u003e etc...\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"500\" src=\"https://github.com/user-attachments/assets/89a74735-52d9-43c3-ba90-25b3e1c2923d\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ci\u003eThis project is in an alpha state. It is functional but missing automated tests and is only partially documented. Some chart schemas may still change as more features are integrated.\u003c/i\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n## Who is this for:\n\nThe Kubevirt-Community-Stack may be of interest if you:\n- operate one or more physical computers which you would like to split into smaller virtual machines.\n- are already running kubernetes to orchestrate container workloads\n- are already in the \u003ca href=\"https://argoproj.github.io/cd/\"\u003eArgoCD\u003c/a\u003e or \u003ca href=\"https://github.com/kubevirt/kubevirt-tekton-tasks?tab=readme-ov-file\"\u003eTekton\u003c/a\u003e ecosystem and/or work primarily with some other Helm-based tooling.\n- want/need fully-featured VMs for things like hardware emulation, hardware-passthrough, Virtual Desktops, vGPU, etc... which are not suppoted by Micro-VMs such as \u003ca href=\"https://firecracker-microvm.github.io/\"\u003eFirecracker\u003c/a\u003e.\n- want to integrate Kubevirt into your existing infrastructure without needing to adopt a full platform like \u003ca href=\"https://www.redhat.com/en/technologies/cloud-computing/openshift/virtualization\"\u003eOpenShift Virtuazation\u003c/a\u003e, \u003ca href=\"https://harvesterhci.io/\"\u003eHarvesterHCI\u003c/a\u003e, \u003ca href=\"https://www.starlingx.io/\"\u003eStarlingX\u003c/a\u003e, or \u003ca href=\"\"\u003eKubeSphere\u003c/a\u003e etc...\n- want to install and operate Kubevirt on an existing system withhout needing to re-image it with an installer ISO.\n- desire tight integration with cloud-init while respecting git-ops best practices\n- prefer to use cloud-init for system configuration over ansible \u0026 packer based workflows\n\n## Component charts\n\n\u003cdetails\u003e\n  \u003csummary\u003eKubervirt\u003c/summary\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/kubevirt/kubevirt\"\u003eKubevirt\u003c/a\u003e is a Kubernetes Virtualization API and runtime which controls QEMU/KVM virtual machine instances and provides the CRDs that define them. It's distrubuted as a Kubernetes Operator which is install via the \u003ca href=\"https://github.com/kubevirt/kubevort\"\u003ekubevirt\u003c/a\u003e chart.\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eKubevirt CDI\u003c/summary\u003e\n  \u003cbr\u003e\n  The \u003ca href=\"https://github.com/kubevirt/containerized-data-importer\"\u003eContainerized Data Importer\u003c/a\u003e can pull virtual machine images, ISO files, and other types of bootable media from sources like S3, HTTP, or OCI images. This data is then written to PVCs which are mounted as disks. For examples of various ways to use the CDI, see the notes in \u003ca href=\"https://github.com/small-hack/argocd-apps/blob/main/kubevirt/examples/disks/Disks.md\"\u003eArgocd-Apps\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eCloud-Init\u003c/summary\u003e\n  \u003cbr\u003e\n  The \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/tree/main/charts/cloud-init\"\u003eCloud-init helm chart\u003c/a\u003e allows the user to define the specification of a linux-based vm's operating system as code. In addition to basec cloud-init functions, his chart provides some extra functionality via an initjob that makes cloud-init more GitOps friendly.\n  \u003cbr\u003e\n  \u003cbr\u003e\nAdditional Features:\n\n  - Regex values using existing secrets or environmental variables via envsubst\n  - Create random user passwords or use an existing secret\n  - Download files from a URL\n  - Base64 encode + gzip your `write_files` content\n  - Populate Wireguard configuration values from an existsing secret\n  - Track the total size of user-data and check file for valid syntax\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eKubevirt VM\u003c/summary\u003e\n  \u003cbr\u003e\n  The \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/tree/main/charts/kubevirt-vm\"\u003eKubevirt-VM Chart\u003c/a\u003e allows a user to easily template a Kubevirt VirtualMachine or VirtualMachinePool and its associated resources sudch as Disks, DataVolumes, Horizontal Pod Autoscaler, Network Policies, Service, Ingres, Probes, and Cloud-init data (via bundled cloud-init subchart).\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eKubevirt Manager\u003c/summary\u003e\n  \u003cbr\u003e\n      This is a community-developed web-ui which allows users to create, manage, and interact with virtual machines running in Kubevirt. See their official docs at \u003ca href=\"https://kubevirt-manager.io/\"\u003ekubevirt-manager.io\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\n  \u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/assets/84841307/eeb87969-4dd6-49ce-b25e-37404e05fa72\"\u003e\n      \u003cimg src=\"https://github.com/cloudymax/kubevirt-community-stack/assets/84841307/eeb87969-4dd6-49ce-b25e-37404e05fa72\" alt=\"Screenshot showing the default page of Kubevirt-manager. The screen is devided into 2 sections. On the left, there is a vertical navigation tab with a grey background. The options in this bar are Dashboard, Virtual Machines, VM Pools, Auto Scaling, Nodes, Data Volumes, Instance Types, and Load Balancers.  On the right, there is a grid of blue rectangular icons each representing one of the option in the navigation tab, but with an icon and text representing metrics about that option.\" width=500\u003e\n  \u003c/a\u003e\n  \u003c/p\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eCluster API Operator \u0026 Addons\u003c/summary\u003e\n  \u003cbr\u003e\n   \u003ca href=\"https://cluster-api.sigs.k8s.io/\"\u003eCluster API\u003c/a\u003e provides a standardised kubernetes-native interface for creating k8s clusters using a wide variety of providers. The combined chart can install the \u003ca href=\"https://cluster-api-operator.sigs.k8s.io/\"\u003eCluster API Operator\u003c/a\u003e as well as bootstrap the \u003ca href=\"https://github.com/kubernetes-sigs/cluster-api-provider-kubevirt\"\u003eCluster API Kubevirt Provider\u003c/a\u003e which allows creating k8s clusters from the CLI or as YAML using Kubevirt VMs. Cluster-api-provider-kubevirt also includes \u003ca href=\"https://github.com/kubevirt/cloud-provider-kubevirt\"\u003ecloud-provider-kubevirt\u003c/a\u003e which enables the exposeure of LoadBalancer type services within tenant clusters to the host cluster. This negates the need for a dedicated loadbalancer such as \u003ca href=\"https://metallb.io/\"\u003eMetalLB\u003c/a\u003e inside the tenant cluster.\n  \u003cbr\u003e\n  \u003cbr\u003e\nSee \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/blob/main/CAPI.md\"\u003eCAPI.md\u003c/a\u003e for a basic walkthrough of creating a CAPI-based tenant cluster.\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eCAPI Cluster\u003c/summary\u003e\n  \u003cbr\u003e\n  The CAPI Cluster helm chart provides a way to create workload clusters using the Kubevirt infrastructure, Kubeadm Bootstrap + ControlPlane, and Helm providers.\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/details\u003e\n\n\n## Dependencies\n\n\u003cdetails\u003e\n  \u003csummary\u003elibvirt-clients\u003c/summary\u003e\u003cbr\u003e\nThis utility will audit a host machine and report what virtualisation capabilities are available\n\n  - Installation\n      ```bash\n      sudo apt-get install -y libvirt-clients\n      ```\n\n  - Usage\n      ```console\n      $ virt-host-validate qemu\n      QEMU: Checking for hardware virtualization          : PASS\n      QEMU: Checking if device /dev/kvm exists            : PASS\n      QEMU: Checking if device /dev/kvm is accessible     : PASS\n      QEMU: Checking if device /dev/vhost-net exists      : PASS\n      QEMU: Checking if device /dev/net/tun exists        : PASS\n      ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003evirtctl\u003c/summary\u003e\u003cbr\u003e\n  virtctl is the command-line utility for managing Kubevirt resources. It can be installed as a standalone CLI or as a Kubectl plugin via krew.\n\n  - Standalone\n      ```bash\n      export VERSION=v0.41.0\n      wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64\n      ```\n\n  - Plugin\n      ```bash\n      kubectl krew install virt\n      ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eclusterctl\u003c/summary\u003e\u003cbr\u003e\n  The clusterctl CLI tool handles the lifecycle of a Cluster API management cluster.\n\n  ```bash\n  curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.7.2/clusterctl-linux-amd64 -o clusterctl\n  sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl\n  ```\n\u003c/details\u003e\n\n\n##  Install The Kubevirt-Community-Stack\n\n- Install the combined chart (\u003ca href=\"https://github.com/cloudymax/kubevirt-charts/blob/main/charts/kubevirt-stack\"\u003ekubevirt-stack\u003c/a\u003e).\n   ```bash\n    helm repo add kubevirt https://cloudymax.github.io/kubevirt-community-stack\n    helm install kubevirt-stack kubevirt/kubevirt-stack \\\n      --namespace kubevirt \\\n      --create-namespace\n    ```\n\n\u003cdetails\u003e\n  \u003csummary\u003eExpand to see individual chart installation\u003c/summary\u003e\n\u003cbr\u003e\n\n- \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/blob/main/charts/kubevirt\"\u003ekubevirt\u003c/a\u003e: Installs the Kubevirt Operator.\n\n    ```bash\n    helm repo add kubevirt https://cloudymax.github.io/kubevirt-community-stack\n    helm install kubevirt kubevirt/kubevirt \\\n      --namespace kubevirt \\\n      --create-namespace\n    ```\n\n- \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/blob/main/charts/cluster-api-operator\"\u003eCluster API Operator\u003c/a\u003e: Installs the Cluster API Operator.\n\n    ```bash\n    Work in progress.\n    ```\n\n- \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/blob/main/charts/kubevirt-cdi\"\u003ekubevirt-cdi\u003c/a\u003e: Install the Containerized Data Importer.\n\n    ```bash\n    helm repo add kubevirt https://cloudymax.github.io/kubevirt-community-stack\n    helm install kubevirt-cdi kubevirt/kubevirt-cdi \\\n      --namespace cdi \\\n      --create-namespace\n    ```\n\n- \u003ca href=\"https://github.com/cloudymax/kubevirt-community-stack/blob/main/charts/kubevirt-manager\"\u003ekubevirt-manager\u003c/a\u003e: Deploy the Kubevirt-Manager UI\n\n    ```bash\n    # Customize your own values.yaml before deploying\n    helm repo add kubevirt https://cloudymax.github.io/kubevirt-charts\n    helm install kubevirt-manager kubevirt/kubevirt-manager \\\n      --namespace kubevirt-manager \\\n      --create-namespace\n    ```\n\u003c/details\u003e\n\n## Examples\n\nExample documentation is a work in progress.\n\n- [Work with Disk Images via the CDI](https://github.com/cloudymax/kubevirt-community-stack/tree/main/examples/disks)\n- [Create your first linux VM](https://github.com/cloudymax/kubevirt-community-stack/blob/main/examples/basic-vm-example.md)\n- Deploy a VirtialMachinePool and scale it using KEDA (ToDo)\n- Add a GPU to your VM (ToDo)\n- [Deploy a CAPI Cluster](https://github.com/cloudymax/kubevirt-community-stack/blob/main/examples/capi-cluster.md)\n- Create a Windows VM (ToDo)\n- Capture and deploy system images using Clonezilla Live (ToDo)\n- [Deploying via ArgoCD](https://github.com/cloudymax/kubevirt-community-stack/tree/main/examples/argocd)\n- [Integrate with Argo Workflows/Events](https://github.com/cloudymax/kubevirt-community-stack/tree/main/examples/argo-workflows)\n\n## Uninstall\n\nIn the event that Kubevirt does not uninstall gracefully, you may need to perform the following steps:\n\n```bash\nexport RELEASE=v0.17.0\n\n# --wait=true should anyway be default\nkubectl delete -n kubevirt kubevirt kubevirt --wait=true\n\n# this needs to be deleted to avoid stuck terminating namespaces\nkubectl delete apiservices v1.subresources.kubevirt.io\n\n# not blocking but would be left over\nkubectl delete mutatingwebhookconfigurations virt-api-mutator\n\n# not blocking but would be left over\nkubectl delete validatingwebhookconfigurations virt-operator-validator\n\n# not blocking but would be left over\nkubectl delete validatingwebhookconfigurations virt-api-validator\n\nkubectl delete -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml --wait=false\n\n# Find hanging resources\nkubectl api-resources --verbs=list --namespaced -o name   | xargs -n 1 kubectl get --show-kind --ignore-not-found -n kubevirt\n\n# If namespace is stuck\nkubectl get namespace \"kubevirt\" -o json   | tr -d \"\\n\" | sed \"s/\\\"finalizers\\\": \\[[^]]\\+\\]/\\\"finalizers\\\": []/\"   | kubectl replace --raw /api/v1/namespaces/kubevirt/finalize -f -\n```\n\n\u003e [!NOTE]\n\u003e If by mistake you deleted the operator first, the KV custom resource will get stuck in the Terminating state, to fix it, delete manually finalizer from the resource.\n\u003e\n\u003e Note: The apiservice and the webhookconfigurations need to be deleted manually due to a bug.\n\u003e\n\u003e ```bash\n\u003e $ kubectl -n kubevirt patch kv kubevirt --type=json -p '[{ \"op\": \"remove\", \"path\": \"/metadata/finalizers\" }]'\n\u003e ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudymax%2Fkubevirt-community-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudymax%2Fkubevirt-community-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudymax%2Fkubevirt-community-stack/lists"}