-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Virtual Machine (simple) #430
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.helmignore | ||
/logos | ||
/Makefile |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
apiVersion: v2 | ||
#name: Virtual Machine | ||
name: virtual-machine | ||
description: Virtual Machine (simple) | ||
icon: /logos/vm.svg | ||
|
||
# A chart can be either an 'application' or a 'library' chart. | ||
# | ||
# Application charts are a collection of templates that can be packaged into versioned archives | ||
# to be deployed. | ||
# | ||
# Library charts provide useful utilities or functions for the chart developer. They're included as | ||
# a dependency of application charts to inject those utilities and functions into the rendering | ||
# pipeline. Library charts do not define any templates and therefore cannot be deployed. | ||
type: application | ||
|
||
# This is the chart version. This version number should be incremented each time you make changes | ||
# to the chart and its templates, including the app version. | ||
# Versions are expected to follow Semantic Versioning (https://semver.org/) | ||
version: 0.5.0 | ||
|
||
# This is the version number of the application being deployed. This version number should be | ||
# incremented each time you make changes to the application. Versions are not expected to | ||
# follow Semantic Versioning. They should reflect the version the application is using. | ||
# It is recommended to use it with quotes. | ||
appVersion: "1.16.1" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
include ../../../scripts/package.mk | ||
|
||
generate: | ||
readme-generator -v values.yaml -s values.schema.json -r README.md | ||
INSTANCE_TYPES=$$(yq e '.metadata.name' -o=json -r ../../system/kubevirt-instancetypes/templates/instancetypes.yaml | yq 'split(" ") | . + [""]' -o json) \ | ||
&& yq -i -o json ".properties.instanceType.optional=true | .properties.instanceType.enum = $${INSTANCE_TYPES}" values.schema.json | ||
PREFERENCES=$$(yq e '.metadata.name' -o=json -r ../../system/kubevirt-instancetypes/templates/preferences.yaml | yq 'split(" ") | . + [""]' -o json) \ | ||
&& yq -i -o json ".properties.instanceProfile.optional=true | .properties.instanceProfile.enum = $${PREFERENCES}" values.schema.json | ||
yq -i -o json '.properties.externalPorts.items.type = "integer"' values.schema.json | ||
yq -i -o json '.properties.systemDisk.properties.image.enum = ["ubuntu", "cirros", "alpine", "fedora", "talos"]' values.schema.json |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
# Virtual Machine (simple) | ||
|
||
A Virtual Machine (VM) simulates computer hardware, enabling various operating systems and applications to run in an isolated environment. | ||
|
||
## Deployment Details | ||
|
||
The virtual machine is managed and hosted through KubeVirt, allowing you to harness the benefits of virtualization within your Kubernetes ecosystem. | ||
|
||
- Docs: [KubeVirt User Guide](https://kubevirt.io/user-guide/) | ||
- GitHub: [KubeVirt Repository](https://github.com/kubevirt/kubevirt) | ||
|
||
## Accessing virtual machine | ||
|
||
You can access the virtual machine using the virtctl tool: | ||
- [KubeVirt User Guide - Virtctl Client Tool](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) | ||
|
||
To access the serial console: | ||
|
||
``` | ||
virtctl console <vm> | ||
``` | ||
|
||
To access the VM using VNC: | ||
|
||
``` | ||
virtctl vnc <vm> | ||
``` | ||
|
||
To SSH into the VM: | ||
|
||
``` | ||
virtctl ssh <user>@<vm> | ||
``` | ||
|
||
## Parameters | ||
|
||
### Common parameters | ||
|
||
| Name | Description | Value | | ||
| ------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------- | | ||
| `external` | Enable external access from outside the cluster | `false` | | ||
| `externalPorts` | Specify ports to forward from outside the cluster | `[]` | | ||
| `running` | Determines if the virtual machine should be running | `true` | | ||
| `instanceType` | Virtual Machine instance type | `u1.medium` | | ||
| `instanceProfile` | Virtual Machine prefferences profile | `ubuntu` | | ||
| `systemDisk.image` | The base image for the virtual machine. Allowed values: `ubuntu`, `cirros`, `alpine`, `fedora` and `talos` | `ubuntu` | | ||
| `systemDisk.storage` | The size of the disk allocated for the virtual machine | `5Gi` | | ||
| `systemDisk.storageClass` | StorageClass used to store the data | `replicated` | | ||
| `resources.cpu` | The number of CPU cores allocated to the virtual machine | `""` | | ||
| `resources.memory` | The amount of memory allocated to the virtual machine | `""` | | ||
| `sshKeys` | List of SSH public keys for authentication. Can be a single key or a list of keys. | `[]` | | ||
| `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | `#cloud-config | ||
` | | ||
Comment on lines
+35
to
+53
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix table formatting and adjust The parameters table provides valuable information about common configuration options. However, there are some formatting issues that need to be addressed:
Here's an example of how the corrected table header and separator should look: | Name | Description | Value |
|------|-------------|-------| Apply this format to the entire table. For the | `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | `#cloud-config` | or | `cloudInit` | cloud-init user data config. See cloud-init documentation for more details. | ```yaml
#cloud-config
``` | Choose the format that best fits your needs and maintains readability. 🧰 Tools🪛 LanguageTool
🪛 Markdownlint
|
||
|
||
## U Series | ||
|
||
The U Series is quite neutral and provides resources for | ||
general purpose applications. | ||
|
||
*U* is the abbreviation for "Universal", hinting at the universal | ||
attitude towards workloads. | ||
|
||
VMs of instance types will share physical CPU cores on a | ||
time-slice basis with other VMs. | ||
|
||
### U Series Characteristics | ||
|
||
Specific characteristics of this series are: | ||
- *Burstable CPU performance* - The workload has a baseline compute | ||
performance but is permitted to burst beyond this baseline, if | ||
excess compute resources are available. | ||
- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less | ||
noise per node. | ||
|
||
## O Series | ||
|
||
The O Series is based on the U Series, with the only difference | ||
being that memory is overcommitted. | ||
|
||
*O* is the abbreviation for "Overcommitted". | ||
|
||
### UO Series Characteristics | ||
|
||
Specific characteristics of this series are: | ||
- *Burstable CPU performance* - The workload has a baseline compute | ||
performance but is permitted to burst beyond this baseline, if | ||
excess compute resources are available. | ||
- *Overcommitted Memory* - Memory is over-committed in order to achieve | ||
a higher workload density. | ||
- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4, for less | ||
noise per node. | ||
|
||
## CX Series | ||
|
||
The CX Series provides exclusive compute resources for compute | ||
intensive applications. | ||
|
||
*CX* is the abbreviation of "Compute Exclusive". | ||
|
||
The exclusive resources are given to the compute threads of the | ||
VM. In order to ensure this, some additional cores (depending | ||
on the number of disks and NICs) will be requested to offload | ||
the IO threading from cores dedicated to the workload. | ||
In addition, in this series, the NUMA topology of the used | ||
cores is provided to the VM. | ||
|
||
### CX Series Characteristics | ||
|
||
Specific characteristics of this series are: | ||
- *Hugepages* - Hugepages are used in order to improve memory | ||
performance. | ||
- *Dedicated CPU* - Physical cores are exclusively assigned to every | ||
vCPU in order to provide fixed and high compute guarantees to the | ||
workload. | ||
- *Isolated emulator threads* - Hypervisor emulator threads are isolated | ||
from the vCPUs in order to reduce emaulation related impact on the | ||
workload. | ||
- *vNUMA* - Physical NUMA topology is reflected in the guest in order to | ||
optimize guest sided cache utilization. | ||
- *vCPU-To-Memory Ratio (1:2)* - A vCPU-to-Memory ratio of 1:2. | ||
|
||
## M Series | ||
|
||
The M Series provides resources for memory intensive | ||
applications. | ||
|
||
*M* is the abbreviation of "Memory". | ||
|
||
### M Series Characteristics | ||
|
||
Specific characteristics of this series are: | ||
- *Hugepages* - Hugepages are used in order to improve memory | ||
performance. | ||
- *Burstable CPU performance* - The workload has a baseline compute | ||
performance but is permitted to burst beyond this baseline, if | ||
excess compute resources are available. | ||
- *vCPU-To-Memory Ratio (1:8)* - A vCPU-to-Memory ratio of 1:8, for much | ||
less noise per node. | ||
|
||
## RT Series | ||
|
||
The RT Series provides resources for realtime applications, like Oslat. | ||
|
||
*RT* is the abbreviation for "realtime". | ||
|
||
This series of instance types requires nodes capable of running | ||
realtime applications. | ||
|
||
### RT Series Characteristics | ||
|
||
Specific characteristics of this series are: | ||
- *Hugepages* - Hugepages are used in order to improve memory | ||
performance. | ||
- *Dedicated CPU* - Physical cores are exclusively assigned to every | ||
vCPU in order to provide fixed and high compute guarantees to the | ||
workload. | ||
- *Isolated emulator threads* - Hypervisor emulator threads are isolated | ||
from the vCPUs in order to reduce emaulation related impact on the | ||
workload. | ||
- *vCPU-To-Memory Ratio (1:4)* - A vCPU-to-Memory ratio of 1:4 starting from | ||
the medium size. | ||
|
||
## Development | ||
|
||
To get started with customizing or creating your own instancetypes and preferences | ||
see [DEVELOPMENT.md](./DEVELOPMENT.md). | ||
Comment on lines
+163
to
+166
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Update the DEVELOPMENT.md reference or create the file. The Development section refers to a non-existent DEVELOPMENT.md file. Please either:
This will ensure that users can find the information they need for customization. 🔗 Analysis chainVerify the existence of DEVELOPMENT.md file. The Development section provides a helpful reference for customizing instancetypes and preferences. However, we need to ensure that the referenced DEVELOPMENT.md file exists in the repository. If the DEVELOPMENT.md file doesn't exist, please take one of the following actions:
This will ensure that users can find the information they need for customization. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check if DEVELOPMENT.md exists in the same directory as README.md
if [ -f "$(dirname "$0")/DEVELOPMENT.md" ]; then
echo "DEVELOPMENT.md file exists."
else
echo "DEVELOPMENT.md file not found. Please create this file or update the reference in README.md."
fi
Length of output: 274 |
||
|
||
## Resources | ||
|
||
The following instancetype resources are provided by Cozystack: | ||
|
||
Name | vCPUs | Memory | ||
-----|-------|------- | ||
cx1.2xlarge | 8 | 16Gi | ||
cx1.4xlarge | 16 | 32Gi | ||
cx1.8xlarge | 32 | 64Gi | ||
cx1.large | 2 | 4Gi | ||
cx1.medium | 1 | 2Gi | ||
cx1.xlarge | 4 | 8Gi | ||
gn1.2xlarge | 8 | 32Gi | ||
gn1.4xlarge | 16 | 64Gi | ||
gn1.8xlarge | 32 | 128Gi | ||
gn1.xlarge | 4 | 16Gi | ||
m1.2xlarge | 8 | 64Gi | ||
m1.4xlarge | 16 | 128Gi | ||
m1.8xlarge | 32 | 256Gi | ||
m1.large | 2 | 16Gi | ||
m1.xlarge | 4 | 32Gi | ||
n1.2xlarge | 16 | 32Gi | ||
n1.4xlarge | 32 | 64Gi | ||
n1.8xlarge | 64 | 128Gi | ||
n1.large | 4 | 8Gi | ||
n1.medium | 4 | 4Gi | ||
n1.xlarge | 8 | 16Gi | ||
o1.2xlarge | 8 | 32Gi | ||
o1.4xlarge | 16 | 64Gi | ||
o1.8xlarge | 32 | 128Gi | ||
o1.large | 2 | 8Gi | ||
o1.medium | 1 | 4Gi | ||
o1.micro | 1 | 1Gi | ||
o1.nano | 1 | 512Mi | ||
o1.small | 1 | 2Gi | ||
o1.xlarge | 4 | 16Gi | ||
rt1.2xlarge | 8 | 32Gi | ||
rt1.4xlarge | 16 | 64Gi | ||
rt1.8xlarge | 32 | 128Gi | ||
rt1.large | 2 | 8Gi | ||
rt1.medium | 1 | 4Gi | ||
rt1.micro | 1 | 1Gi | ||
rt1.small | 1 | 2Gi | ||
rt1.xlarge | 4 | 16Gi | ||
u1.2xlarge | 8 | 32Gi | ||
u1.2xmedium | 2 | 4Gi | ||
u1.4xlarge | 16 | 64Gi | ||
u1.8xlarge | 32 | 128Gi | ||
u1.large | 2 | 8Gi | ||
u1.medium | 1 | 4Gi | ||
u1.micro | 1 | 1Gi | ||
u1.nano | 1 | 512Mi | ||
u1.small | 1 | 2Gi | ||
u1.xlarge | 4 | 16Gi | ||
Comment on lines
+168
to
+221
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix table formatting for instancetype resources. The instancetype resources table provides valuable information about the available VM configurations. However, the table formatting needs to be adjusted to ensure proper rendering in Markdown:
Here's an example of how the corrected table header and separator should look: | Name | vCPUs | Memory |
|------|-------|--------| Apply this format to the entire table. This will improve readability and ensure proper rendering across different Markdown viewers. 🧰 Tools🪛 Markdownlint
|
||
|
||
The following preference resources are provided by Cozystack: | ||
|
||
Name | Guest OS | ||
-----|--------- | ||
alpine | Alpine | ||
centos.7 | CentOS 7 | ||
centos.7.desktop | CentOS 7 | ||
centos.stream10 | CentOS Stream 10 | ||
centos.stream10.desktop | CentOS Stream 10 | ||
centos.stream8 | CentOS Stream 8 | ||
centos.stream8.desktop | CentOS Stream 8 | ||
centos.stream8.dpdk | CentOS Stream 8 | ||
centos.stream9 | CentOS Stream 9 | ||
centos.stream9.desktop | CentOS Stream 9 | ||
centos.stream9.dpdk | CentOS Stream 9 | ||
cirros | Cirros | ||
fedora | Fedora (amd64) | ||
fedora.arm64 | Fedora (arm64) | ||
opensuse.leap | OpenSUSE Leap | ||
opensuse.tumbleweed | OpenSUSE Tumbleweed | ||
rhel.10 | Red Hat Enterprise Linux 10 Beta (amd64) | ||
rhel.10.arm64 | Red Hat Enterprise Linux 10 Beta (arm64) | ||
rhel.7 | Red Hat Enterprise Linux 7 | ||
rhel.7.desktop | Red Hat Enterprise Linux 7 | ||
rhel.8 | Red Hat Enterprise Linux 8 | ||
rhel.8.desktop | Red Hat Enterprise Linux 8 | ||
rhel.8.dpdk | Red Hat Enterprise Linux 8 | ||
rhel.9 | Red Hat Enterprise Linux 9 (amd64) | ||
rhel.9.arm64 | Red Hat Enterprise Linux 9 (arm64) | ||
rhel.9.desktop | Red Hat Enterprise Linux 9 Desktop (amd64) | ||
rhel.9.dpdk | Red Hat Enterprise Linux 9 DPDK (amd64) | ||
rhel.9.realtime | Red Hat Enterprise Linux 9 Realtime (amd64) | ||
sles | SUSE Linux Enterprise Server | ||
ubuntu | Ubuntu | ||
windows.10 | Microsoft Windows 10 | ||
windows.10.virtio | Microsoft Windows 10 (virtio) | ||
windows.11 | Microsoft Windows 11 | ||
windows.11.virtio | Microsoft Windows 11 (virtio) | ||
windows.2k16 | Microsoft Windows Server 2016 | ||
windows.2k16.virtio | Microsoft Windows Server 2016 (virtio) | ||
windows.2k19 | Microsoft Windows Server 2019 | ||
windows.2k19.virtio | Microsoft Windows Server 2019 (virtio) | ||
windows.2k22 | Microsoft Windows Server 2022 | ||
windows.2k22.virtio | Microsoft Windows Server 2022 (virtio) | ||
windows.2k25 | Microsoft Windows Server 2025 | ||
windows.2k25.virtio | Microsoft Windows Server 2025 (virtio) | ||
Comment on lines
+168
to
+268
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve table formatting and consider adding headers The Resource Tables section provides comprehensive information about instancetype resources and preference resources. However, there are formatting issues that need to be addressed:
Additionally, consider adding headers to both tables to improve clarity. For example: ## Instancetype Resources
| Name | vCPUs | Memory |
|------|-------|--------|
| cx1.2xlarge | 8 | 16Gi |
...
## Preference Resources
| Name | Guest OS |
|------|----------|
| alpine | Alpine |
... These changes will significantly improve the readability and structure of the resource information. 🧰 Tools🪛 Markdownlint
Comment on lines
+223
to
+268
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix table formatting for preference resources. The preference resources table provides valuable information about the supported guest operating systems. However, the table formatting needs to be adjusted to ensure proper rendering in Markdown:
Here's an example of how the corrected table header and separator should look: | Name | Guest OS |
|------|----------| Apply this format to the entire table. This will improve readability and ensure proper rendering across different Markdown viewers. 🧰 Tools🪛 Markdownlint
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
#!/bin/sh |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
{{/* | ||
Expand the name of the chart. | ||
*/}} | ||
{{- define "virtual-machine.name" -}} | ||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
|
||
{{/* | ||
Create a default fully qualified app name. | ||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||
If release name contains chart name it will be used as a full name. | ||
*/}} | ||
{{- define "virtual-machine.fullname" -}} | ||
{{- if .Values.fullnameOverride }} | ||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} | ||
{{- else }} | ||
{{- $name := default .Chart.Name .Values.nameOverride }} | ||
{{- if contains $name .Release.Name }} | ||
{{- .Release.Name | trunc 63 | trimSuffix "-" }} | ||
{{- else }} | ||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
{{- end }} | ||
{{- end }} | ||
|
||
{{/* | ||
Create chart name and version as used by the chart label. | ||
*/}} | ||
{{- define "virtual-machine.chart" -}} | ||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} | ||
{{- end }} | ||
|
||
{{/* | ||
Common labels | ||
*/}} | ||
{{- define "virtual-machine.labels" -}} | ||
helm.sh/chart: {{ include "virtual-machine.chart" . }} | ||
{{ include "virtual-machine.selectorLabels" . }} | ||
{{- if .Chart.AppVersion }} | ||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | ||
{{- end }} | ||
app.kubernetes.io/managed-by: {{ .Release.Service }} | ||
{{- end }} | ||
|
||
{{/* | ||
Selector labels | ||
*/}} | ||
{{- define "virtual-machine.selectorLabels" -}} | ||
app.kubernetes.io/name: {{ include "virtual-machine.name" . }} | ||
app.kubernetes.io/instance: {{ .Release.Name }} | ||
{{- end }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Update the icon path to a relative location.
The absolute path
/logos/vm.svg
does not exist. Consider using a relative path such aslogos/vm.svg
within the chart's directory.🔗 Analysis chain
Verify the icon path.
The icon path
/logos/vm.svg
is specified as an absolute path. Ensure that this path is correct relative to the chart's root or consider using a relative path if the icon is stored within the chart's directory structure.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 144