Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/smartxworks/virtink
Lightweight Virtualization Add-on for Kubernetes
https://github.com/smartxworks/virtink
cloud-hypervisor kubernetes kvm rust-vmm virtualization
Last synced: 10 days ago
JSON representation
Lightweight Virtualization Add-on for Kubernetes
- Host: GitHub
- URL: https://github.com/smartxworks/virtink
- Owner: smartxworks
- License: apache-2.0
- Created: 2022-05-31T03:22:47.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-01-11T02:38:55.000Z (10 months ago)
- Last Synced: 2024-08-02T02:13:31.034Z (3 months ago)
- Topics: cloud-hypervisor, kubernetes, kvm, rust-vmm, virtualization
- Language: Go
- Homepage:
- Size: 761 KB
- Stars: 484
- Watchers: 15
- Forks: 38
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Virtink: Lightweight Virtualization Add-on for Kubernetes
[![build](https://github.com/smartxworks/virtink/actions/workflows/build.yml/badge.svg)](https://github.com/smartxworks/virtink/actions/workflows/build.yml)
[![Go Report Card](https://goreportcard.com/badge/github.com/smartxworks/virtink)](https://goreportcard.com/report/github.com/smartxworks/virtink)
[![codecov](https://codecov.io/gh/smartxworks/virtink/branch/main/graph/badge.svg?token=6GXYM2BFLT)](https://codecov.io/gh/smartxworks/virtink)Virtink is a [Kubernetes](https://github.com/kubernetes/kubernetes) add-on for running [Cloud Hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor) virtual machines. By using Cloud Hypervisor as the underlying hypervisor, Virtink enables a lightweight and secure way to run fully virtualized workloads in a canonical Kubernetes cluster.
Compared to [KubeVirt](https://github.com/kubevirt/kubevirt), Virtink:
- does not use libvirt or QEMU. By leveraging Cloud Hypervisor, VMs has lower memory (≈30MB) footprints, higher performance and smaller attack surface.
- does not require a long-running per-Pod launcher process, which further reduces runtime memory overhead (≈80MB).
- is an especially good fit for running fully isolated Kubernetes clusters in an existing Kubernetes cluster. See our [Cluster API provider](https://github.com/smartxworks/cluster-api-provider-virtink) and the [knest](https://github.com/smartxworks/knest) tool for more details.Virtink consists of 3 components:
- `virt-controller` is the cluster-wide controller, responsible for creating Pods to run Cloud Hypervisor VMs.
- `virt-daemon` is the per-Node daemon, responsible for further controlling Cloud Hypervisor VMs on Node bases.
- `virt-prerunner` is the per-Pod pre-runner, responsible for preparing VM networks and building Cloud Hypervisor VM configuration.**NOTE**: Virtink is still a work in progress, its API may change without prior notice.
## Installation
### Requirements
A few requirements need to be met before you can begin:
- Kubernetes cluster v1.16 ~ v1.25
- Kubernetes apiserver must have `--allow-privileged=true` in order to run Virtink's privileged DaemonSet. It's usually set by default.
- [cert-manager](https://cert-manager.io/) v1.0 ~ v1.8 installed in Kubernetes cluster. You can install it with `kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml`.#### Container Runtime Support
Virtink currently supports the following container runtimes:
- Docker
- containerdOther container runtimes, which do not use virtualization features, should work too. However, they are not tested officially.
#### Hardware Virtualization Support
Hardware with virtualization support is required. You should check if `/dev/kvm` exists on each Kubernetes nodes.
#### Host Kernel Version
- Minimum: v4.11
- Recommended: v5.6 or above### Install Virtink
Install all Virtink components:
```bash
kubectl apply -f https://github.com/smartxworks/virtink/releases/download/v0.13.0/virtink.yaml
```Once you have deployed Virtink, you can [create your virtual machines](#create-a-vm).
## Getting Started
### Create a VM
Apply the following manifest to Kubernetes. Note it uses a [container rootfs](samples/Dockerfile.container-rootfs-ubuntu) and as such doesn’t persist data.
```bash
cat <