VirtualMachine: Implement virtual machines using KubeVirt
Auto adds new VM into given user's Tailscale network
Change-Id: I16847a0b9eacc17b0e794d3b4913eb1d80a93f0a
diff --git a/charts/virtual-machine/Chart.yaml b/charts/virtual-machine/Chart.yaml
new file mode 100644
index 0000000..3f9d5b6
--- /dev/null
+++ b/charts/virtual-machine/Chart.yaml
@@ -0,0 +1,6 @@
+apiVersion: v2
+name: virtual-machine
+description: A Helm chart for virtual-machine
+type: application
+version: 0.0.1
+appVersion: "0.0.1"
diff --git a/charts/virtual-machine/templates/data-volume.yaml b/charts/virtual-machine/templates/data-volume.yaml
new file mode 100644
index 0000000..f9d1890
--- /dev/null
+++ b/charts/virtual-machine/templates/data-volume.yaml
@@ -0,0 +1,14 @@
+apiVersion: cdi.kubevirt.io/v1beta1
+kind: DataVolume
+metadata:
+ name: dv-{{ .Values.name }}
+spec:
+ source:
+ http:
+ url: {{ .Values.disk.source }}
+ pvc:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: {{ .Values.disk.size }}
diff --git a/charts/virtual-machine/templates/service-code-server.yaml b/charts/virtual-machine/templates/service-code-server.yaml
new file mode 100644
index 0000000..3be8855
--- /dev/null
+++ b/charts/virtual-machine/templates/service-code-server.yaml
@@ -0,0 +1,14 @@
+# TODO(gio): enable
+# apiVersion: v1
+# kind: Service
+# metadata:
+# name: {{ .Values.name }}-code-server
+# spec:
+# type: ClusterIP
+# selector:
+# app: {{ .Values.name }}
+# ports:
+# - name: http
+# port: 80
+# targetPort: 8080 # TODO(gio): add to values.yaml
+# protocol: TCP
diff --git a/charts/virtual-machine/templates/vm.yaml b/charts/virtual-machine/templates/vm.yaml
new file mode 100644
index 0000000..d66da80
--- /dev/null
+++ b/charts/virtual-machine/templates/vm.yaml
@@ -0,0 +1,49 @@
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+ labels:
+ kubevirt.io/os: linux
+ name: {{ .Values.name }}
+spec:
+ running: true
+ template:
+ metadata:
+ creationTimestamp: null
+ labels:
+ kubevirt.io/domain: debian
+ app: {{ .Values.name }}
+ spec:
+ domain:
+ cpu:
+ cores: {{ .Values.cpuCores }}
+ resources:
+ limits:
+ memory: {{ .Values.memory }}
+ devices:
+ interfaces:
+ - name: default
+ masquerade: {}
+ ports:
+ {{- range .Values.ports }}
+ - port: {{ . }}
+ {{- end }}
+ disks:
+ - name: disk0
+ disk:
+ bus: virtio
+ - name: cloudinitdisk
+ disk:
+ bus: virtio
+ readonly: true
+ networks:
+ - name: default
+ pod: {}
+ volumes:
+ - name: disk0
+ persistentVolumeClaim:
+ claimName: dv-{{ .Values.name }}
+ - name: cloudinitdisk
+ cloudInitNoCloud:
+ userData: |
+ #cloud-config
+ {{- toYaml .Values.cloudInit.userData | nindent 14 }}
diff --git a/charts/virtual-machine/values.yaml b/charts/virtual-machine/values.yaml
new file mode 100644
index 0000000..6c8b642
--- /dev/null
+++ b/charts/virtual-machine/values.yaml
@@ -0,0 +1,9 @@
+name: ""
+cpuCores: 1
+memory: "1Gi"
+disk:
+ source: "https://cloud.debian.org/images/cloud/bookworm-backports/latest/debian-12-backports-generic-amd64.qcow2"
+ size: 64Gi
+ports: []
+cloudInit:
+ userData: {}