From e3a4e8ed6bd7fa32620d2f06edf582965090466a Mon Sep 17 00:00:00 2001 From: Vadim Zharov Date: Wed, 24 Dec 2025 14:36:31 -0600 Subject: [PATCH 1/2] KubeVirt CSI driver and KubeVirt CSI Driver infra add-on updated with the changes enabling VolumeExpansion --- packs/kubevirt-csi-driver-1.0.2/README.md | 101 ++ .../charts/kubevirt-csi-driver-1.0.2.tgz | Bin 0 -> 10815 bytes .../charts/kubevirt-csi-driver/.helmignore | 23 + .../charts/kubevirt-csi-driver/Chart.yaml | 23 + .../crds/crd_volumesnapshots.yaml | 933 ++++++++++++++++++ .../templates/_helpers.tpl | 1 + .../templates/configmap.yaml | 9 + .../templates/csidriver.yaml | 8 + .../templates/daemonset.yaml | 179 ++++ .../templates/deployment.yaml | 167 ++++ .../templates/namespace.yaml | 10 + .../kubevirt-csi-driver/templates/rbac.yaml | 166 ++++ .../kubevirt-csi-driver/templates/secret.yaml | 28 + .../templates/serviceaccount.yaml | 17 + .../templates/storageclass.yaml | 27 + .../kubevirt-csi-driver/values-lint.yaml | 42 + packs/kubevirt-csi-driver-1.0.2/logo.png | Bin 0 -> 3220 bytes packs/kubevirt-csi-driver-1.0.2/pack.json | 22 + packs/kubevirt-csi-driver-1.0.2/values.yaml | 55 ++ .../README.md | 54 + .../kubevirt-csi-driver-infra-1.0.1.tgz | Bin 0 -> 2466 bytes .../kubevirt-csi-driver-infra/.helmignore | 23 + .../kubevirt-csi-driver-infra/Chart.yaml | 23 + .../templates/_helpers.tpl | 1 + .../templates/clusterrole.yaml | 23 + .../templates/deployment.yaml | 155 +++ .../templates/namespace.yaml | 12 + .../templates/rbac.yaml | 37 + .../templates/serviceaccount.yaml | 17 + .../values-lint.yaml | 8 + .../logo.png | Bin 0 -> 3220 bytes .../pack.json | 23 + .../values.yaml | 19 + 33 files changed, 2206 insertions(+) create mode 100644 packs/kubevirt-csi-driver-1.0.2/README.md create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver-1.0.2.tgz create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/.helmignore create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/Chart.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/crds/crd_volumesnapshots.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/_helpers.tpl create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/configmap.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/csidriver.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/daemonset.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/deployment.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/namespace.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/rbac.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/secret.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/serviceaccount.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/storageclass.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/values-lint.yaml create mode 100644 packs/kubevirt-csi-driver-1.0.2/logo.png create mode 100644 packs/kubevirt-csi-driver-1.0.2/pack.json create mode 100644 packs/kubevirt-csi-driver-1.0.2/values.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/README.md create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra-1.0.1.tgz create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/.helmignore create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/Chart.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/_helpers.tpl create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/clusterrole.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/deployment.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/namespace.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/rbac.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/serviceaccount.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/values-lint.yaml create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/logo.png create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/pack.json create mode 100644 packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml diff --git a/packs/kubevirt-csi-driver-1.0.2/README.md b/packs/kubevirt-csi-driver-1.0.2/README.md new file mode 100644 index 00000000..f2c8af24 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/README.md @@ -0,0 +1,101 @@ +# Kubevirt CSI driver + +The Kubevirt CSI driver is made for a guest cluster deployed on top of Spectro Cloud Palette VMO, and enables it to provision Persistent Volumes from the host VMO cluster. This CSI driver is deployed on the guest cluster. It will contact the host VMO cluster to orchestrate the hot-plugging of disks to VMs running the guest cluster, which will appear as PVCs inside Kubernetes. + +![image](https://github.com/kubevirt/csi-driver/raw/main/docs/high-level-diagram.svg) + + +## Prerequisites + +- A host Palette VMO cluster. +- A guest Kubernetes cluster deployed with VMO VMs, using Palette Agent Mode. +- Palette Agent mode must be configured to set the hostname of the OS to match the name of the VM (using the `NAME` tag, see Usage section). + + +## Parameters + +To deploy the Kubevirt CSI Driver pack, you need to set at least the following parameters in the pack's YAML. + +| Name | Description | Type | Default Value | Required | +| --- | --- | --- | --- | --- | +| `deployment.driver.infraClusterNamespace` | The namespace in the host VMO cluster in which the VMs for this guest cluster run | String | virtual-machines | Yes | +| `deployment.infraClusterKubeconfig.k8sAPIendpoint` | The Kubernetes API endpoint of the host VMO cluster | String | `https://vmo-cluster.company.local:6443` | Yes | +| `deployment.infraClusterKubeconfig.token` | Base64-encoded token from the kubevirt-csi-secret secret in the namespace where the VMs are running in the host VMO cluster | String | - | Yes | +| `storageClasses[*].infraStorageClassName` | Name of the storageclass in the host VMO cluster that this storageclass should link to | String | spectro-storage-class | Yes | + + +Review the [README](https://github.com/kubevirt/csi-driver/blob/main/README.md) for more details. + +## Upgrade + +To update the Kubevirt CSI Driver, deploy a newer version of the pack. + + +## Usage + +To use the Kubevirt CSI Driver pack, first create a new [add-on cluster profile](https://docs.spectrocloud.com/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/), Click "Add New Pack" and search for the **Kubevirt CSI Driver** pack in the Palete Community Registry. + +Then we need to configure the sections in the pack YAML: +* The `deployment.driver.infraClusterNamespace` parameter needs to match the namespace in the host VMO cluster that the VMs of the guest cluster will be running in. +* The `deployment.infraClusterKubeconfig` section requires preparation on the host VMO cluster. The administrator of the host VMO cluster needs to first deploy the "Kubevirt CSI Driver Infra add-on" pack to the host VMO cluster. In that pack, the namespace you want to use in this pack needs to be included. +* The `deployment.infraClusterKubeconfig.k8sAPIendpoint` parameter can be retrieved from the "Overview" tab of the host VMO cluster in Palette. Use the value of the "Kubernetes API" field on that tab. +* The `deployment.infraClusterKubeconfig.token` parameter can be retrieved by the administrator of the host VMO cluster after applying the "Kubevirt CSI Driver Infra add-on" pack to the host VMO cluster. The administrator can run the following command to retrieve the token: +```bash +kubectl get secret kubevirt-csi-secret -n -o json | jq .data.token +``` +* The output of the command will be a base64-encoded string. Put that string as-is into the `deployment.infraClusterKubeconfig.token` parameter. +* Finally, review the `deployment.storageClasses` section. Typically, the host VMO cluster will have 1 storageclass for virtual machines and the name of that storageclass depends on the type of storage used in the VMO cluster. The administrator of the host VMO cluster can provide the correct name for this storageclass. Enter that name in the `parameters.infraStorageClassName` section of the example "kubevirt" storageclass. + +### VM deployment +Once you have configured the pack, you can deploy it to a cluster. Note that you must use Palette Agent-mode clusters for this, and use specific preparation to set up the Agent-mode VMs. The hostname in the OS of each VM must match the name of the VM inside VMO. In order to automate this, we can set the `name` tag during registration of the VM. The following userdata for the VM can be used to automatically configure and register the VM with Palette as an agent-mode edge host, including the correct `name` tag: +``` +#cloud-config +ssh_pwauth: True +chpasswd: { expire: False } +password: spectro +disable_root: false +packages: + - jq + - conntrack +write_files: + - path: /tmp/user-data + owner: 'root:root' + permissions: '0755' + content: | + #cloud-config + install: + reboot: true + poweroff: false + stylus: + site: + edgeHostToken: [registration token here] + paletteEndpoint: api.console.spectrocloud.com + tags: + name: %NAME% +runcmd: + - | + mkdir -p /system/oem; mkdir -p /oem; mkdir -p /usr/local/cloud-config; mkdir -p /opt/spectrocloud/state + curl --location --output /tmp/palette-agent-install.sh https://github.com/spectrocloud/agent-mode/releases/latest/download/palette-agent-install.sh + chmod +x /tmp/palette-agent-install.sh + export USERDATA=/tmp/user-data + sed -i "s/%NAME%/$(hostname)/" /tmp/user-data + sudo --preserve-env /tmp/palette-agent-install.sh +``` + +### Snapshot support +In order to use this CSI for snapshots, the following `VolumeSnapshotClass` can be created (manually, not part of this pack), through deploying the Volume Snapshot Controller pack: +``` +apiVersion: snapshot.storage.k8s.io/v1 +kind: VolumeSnapshotClass +metadata: + name: kubevirt-csi-snapclass +driver: csi.kubevirt.io +deletionPolicy: Delete +``` + +In the default pack configuration, the VolumeSnapshotClass in the guest cluster will be mapped to the default VolumeSnapshotClass in the host VMO cluster (assuming that VolumeSnapshotClass in the host VMO cluster contains the `snapshot.storage.kubernetes.io/is-default-class: "true"` annotation). If there is no default VolumeSnapshotClass in the host VMO cluster, or if multiple exist, a mapping can be configured in the `deployment.driver.infraStorageClassEnforcement` section of the pack. Review the information [here](https://github.com/kubevirt/csi-driver/blob/main/docs/snapshot-driver-config.md) on how to map VolumeSnapshotClasses to those in the host VMO cluster. + +## References + +- [Kubevirt CSI driver Github](https://github.com/kubevirt/csi-driver) +- [Storage classes and Snapshot classes mapping](https://github.com/kubevirt/csi-driver/blob/main/docs/snapshot-driver-config.md) \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver-1.0.2.tgz b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver-1.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..614dc2d4644248cef46e6f3a734850e3393f100a GIT binary patch literal 10815 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 z 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 0 + required: + - source + type: object + status: + description: |- + status represents the current information of a snapshot. + Consumers must verify binding between VolumeSnapshot and + VolumeSnapshotContent objects is successful (by validating that both + VolumeSnapshot and VolumeSnapshotContent point at each other) before + using this object. + properties: + boundVolumeSnapshotContentName: + description: |- + boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent + object to which this VolumeSnapshot object intends to bind to. + If not specified, it indicates that the VolumeSnapshot object has not been + successfully bound to a VolumeSnapshotContent object yet. + NOTE: To avoid possible security issues, consumers must verify binding between + VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that + both VolumeSnapshot and VolumeSnapshotContent point at each other) before using + this object. + type: string + creationTime: + description: |- + creationTime is the timestamp when the point-in-time snapshot is taken + by the underlying storage system. + In dynamic snapshot creation case, this field will be filled in by the + snapshot controller with the "creation_time" value returned from CSI + "CreateSnapshot" gRPC call. + For a pre-existing snapshot, this field will be filled with the "creation_time" + value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. + If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: |- + error is the last observed error during snapshot creation, if any. + This field could be helpful to upper level controllers(i.e., application controller) + to decide whether they should continue on waiting for the snapshot to be created + based on the type of error reported. + The snapshot controller will keep retrying when an error occurs during the + snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: |- + message is a string detailing the encountered error during snapshot + creation if specified. + NOTE: message may be logged, and it should not contain sensitive + information. + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: |- + readyToUse indicates if the snapshot is ready to be used to restore a volume. + In dynamic snapshot creation case, this field will be filled in by the + snapshot controller with the "ready_to_use" value returned from CSI + "CreateSnapshot" gRPC call. + For a pre-existing snapshot, this field will be filled with the "ready_to_use" + value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, + otherwise, this field will be set to "True". + If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: |- + restoreSize represents the minimum size of volume required to create a volume + from this snapshot. + In dynamic snapshot creation case, this field will be filled in by the + snapshot controller with the "size_bytes" value returned from CSI + "CreateSnapshot" gRPC call. + For a pre-existing snapshot, this field will be filled with the "size_bytes" + value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. + When restoring a volume from this snapshot, the size of the volume MUST NOT + be smaller than the restoreSize if it is specified, otherwise the restoration will fail. + If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + volumeGroupSnapshotName: + description: |- + VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot of which this + VolumeSnapshot is a part of. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshot is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshot" + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: false + storage: false + subresources: + status: {} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/_helpers.tpl b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/_helpers.tpl new file mode 100644 index 00000000..bc63beba --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/_helpers.tpl @@ -0,0 +1 @@ +# empty \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/configmap.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/configmap.yaml new file mode 100644 index 00000000..36838e93 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: driver-config + namespace: kubevirt-csi-driver +data: + {{- range $key, $value := .Values.deployment.driver }} + {{ $key }}: {{ $value | quote }} + {{- end}} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/csidriver.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/csidriver.yaml new file mode 100644 index 00000000..111c79cb --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/csidriver.yaml @@ -0,0 +1,8 @@ +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + name: csi.kubevirt.io +spec: + attachRequired: true + podInfoOnMount: true + fsGroupPolicy: ReadWriteOnceWithFSType \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/daemonset.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/daemonset.yaml new file mode 100644 index 00000000..75cc96ca --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/daemonset.yaml @@ -0,0 +1,179 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kubevirt-csi-nodeid-ds + namespace: kubevirt-csi-driver +spec: + selector: + matchLabels: + app: kubevirt-csi-nodeid + template: + metadata: + labels: + app: kubevirt-csi-nodeid + spec: + serviceAccountName: kubevirt-csi-node-sa + initContainers: + - name: set-node-annotation + env: + - name: NODENAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: registry.k8s.io/kubectl:v1.33.0 + args: + - annotate + - node + - $(NODENAME) + - cluster.x-k8s.io/cluster-namespace={{ .Values.deployment.driver.infraClusterNamespace }} + resources: + requests: + cpu: 50m + memory: 100Mi + - name: set-node-providerid + image: registry.k8s.io/kubectl:v1.33.0 + env: + - name: NODENAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + args: + - patch + - node + - $(NODENAME) + - --patch + - '{"spec":{"providerID":"kubevirt://$(NODENAME)"}}' + - --type + - merge + resources: + requests: + cpu: 50m + memory: 100Mi + containers: + - name: sleep + image: registry.k8s.io/pause:3.9 + resources: + requests: + cpu: 10m +--- +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: kubevirt-csi-node + namespace: kubevirt-csi-driver +spec: + selector: + matchLabels: + app: kubevirt-csi-driver + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + app: kubevirt-csi-driver + spec: + serviceAccount: kubevirt-csi-node-sa + priorityClassName: system-node-critical + tolerations: + - operator: Exists + containers: + - name: csi-driver + securityContext: + privileged: true + allowPrivilegeEscalation: true + imagePullPolicy: Always + image: quay.io/kubevirt/kubevirt-csi-driver:latest + args: + - "--endpoint=unix:/csi/csi.sock" + - "--node-name=$(KUBE_NODE_NAME)" + - "--run-node-service=true" + - "--run-controller-service=false" + - "--v=5" + env: + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - name: kubelet-dir + mountPath: /var/lib/kubelet + mountPropagation: "Bidirectional" + - name: plugin-dir + mountPath: /csi + - name: device-dir + mountPath: /dev + - name: udev + mountPath: /run/udev + ports: + - name: healthz + containerPort: 10300 + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 10 + timeoutSeconds: 3 + periodSeconds: 10 + failureThreshold: 5 + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-node-driver-registrar + image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.15.0 + args: + - "--csi-address=$(ADDRESS)" + - "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)" + - "--v=5" + lifecycle: + preStop: + exec: + command: ["/bin/sh", "-c", "rm -rf /registration/csi.kubevirt.io-reg.sock /csi/csi.sock"] + env: + - name: ADDRESS + value: /csi/csi.sock + - name: DRIVER_REG_SOCK_PATH + value: /var/lib/kubelet/plugins/csi.kubevirt.io/csi.sock + volumeMounts: + - name: plugin-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + resources: + requests: + memory: 20Mi + cpu: 5m + - name: csi-liveness-probe + image: registry.k8s.io/sig-storage/livenessprobe:v2.14.0 + args: + - "--csi-address=/csi/csi.sock" + - "--probe-timeout=3s" + - "--health-port=10300" + volumeMounts: + - name: plugin-dir + mountPath: /csi + resources: + requests: + memory: 20Mi + cpu: 5m + volumes: + - name: kubelet-dir + hostPath: + path: /var/lib/kubelet + type: Directory + - name: plugin-dir + hostPath: + path: /var/lib/kubelet/plugins/csi.kubevirt.io/ + type: DirectoryOrCreate + - name: registration-dir + hostPath: + path: /var/lib/kubelet/plugins_registry/ + type: Directory + - name: device-dir + hostPath: + path: /dev + type: Directory + - name: udev + hostPath: + path: /run/udev \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/deployment.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/deployment.yaml new file mode 100644 index 00000000..f59d7b15 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/deployment.yaml @@ -0,0 +1,167 @@ +{{- if eq .Values.deployment.model "tenant" }} +kind: Deployment +apiVersion: apps/v1 +metadata: + name: kubevirt-csi-controller + namespace: kubevirt-csi-driver +spec: + replicas: 1 + selector: + matchLabels: + app: kubevirt-csi-driver + template: + metadata: + labels: + app: kubevirt-csi-driver + spec: + enableServiceLinks: false + serviceAccount: kubevirt-csi-controller-sa + priorityClassName: system-cluster-critical + nodeSelector: + node-role.kubernetes.io/control-plane: "" + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - key: node-role.kubernetes.io/master + operator: Exists + effect: "NoSchedule" + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: "NoSchedule" + containers: + - name: csi-driver + imagePullPolicy: Always + image: quay.io/kubevirt/kubevirt-csi-driver:latest + args: + - "--endpoint=$(CSI_ENDPOINT)" + - "--infra-cluster-namespace=$(INFRACLUSTER_NAMESPACE)" + - "--infra-cluster-kubeconfig=/var/run/secrets/infracluster/kubeconfig" + - "--infra-cluster-labels=$(INFRACLUSTER_LABELS)" + - "--v=5" + ports: + - name: healthz + containerPort: 10301 + protocol: TCP + env: + - name: CSI_ENDPOINT + value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: INFRACLUSTER_NAMESPACE + valueFrom: + configMapKeyRef: + name: driver-config + key: infraClusterNamespace + - name: INFRACLUSTER_LABELS + valueFrom: + configMapKeyRef: + name: driver-config + key: infraClusterLabels + - name: INFRA_STORAGE_CLASS_ENFORCEMENT + valueFrom: + configMapKeyRef: + name: driver-config + key: infraStorageClassEnforcement + optional: true + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + - name: infracluster + mountPath: "/var/run/secrets/infracluster" + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-provisioner + image: registry.k8s.io/sig-storage/csi-provisioner:v6.1.0 + args: + - "--csi-address=$(ADDRESS)" + - "--default-fstype=ext4" + - "--v=5" + - "--timeout=3m" + - "--retry-interval-max=1m" + env: + - name: ADDRESS + value: /var/lib/csi/sockets/pluginproxy/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-attacher + image: registry.k8s.io/sig-storage/csi-attacher:v4.10.0 + args: + - "--csi-address=$(ADDRESS)" + - "--v=5" + - "--timeout=3m" + - "--retry-interval-max=1m" + env: + - name: ADDRESS + value: /var/lib/csi/sockets/pluginproxy/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-liveness-probe + image: registry.k8s.io/sig-storage/livenessprobe:v2.15.0 + args: + - "--csi-address=/csi/csi.sock" + - "--probe-timeout=3s" + - "--health-port=10301" + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-snapshotter + args: + - "--v=3" + - "--csi-address=/csi/csi.sock" + - "--timeout=3m" + image: registry.k8s.io/sig-storage/csi-snapshotter:v8.4.0 + imagePullPolicy: IfNotPresent + securityContext: + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /csi + name: socket-dir + resources: + requests: + memory: 20Mi + cpu: 10m + - name: csi-resizer + image: registry.k8s.io/sig-storage/csi-resizer:v1.13.1 + args: + - "-csi-address=/csi/csi.sock" + - "-v=5" + - "-timeout=3m" + - '-handle-volume-inuse-error=false' + volumeMounts: + - name: socket-dir + mountPath: /csi + resources: + requests: + cpu: 10m + memory: 20Mi + securityContext: + capabilities: + drop: + - ALL + volumes: + - name: socket-dir + emptyDir: {} + - name: infracluster + secret: + secretName: infra-cluster-credentials +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/namespace.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/namespace.yaml new file mode 100644 index 00000000..f0c28ea2 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/namespace.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Namespace +metadata: + labels: + kubernetes.io/metadata.name: kubevirt-csi-driver + pod-security.kubernetes.io/audit: privileged + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/warn: privileged + name: kubevirt-csi-driver \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/rbac.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/rbac.yaml new file mode 100644 index 00000000..2c3ed993 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/rbac.yaml @@ -0,0 +1,166 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubevirt-csi-controller-cr +rules: + - apiGroups: [''] + resources: ['persistentvolumes'] + verbs: ['create', 'delete', 'get', 'list', 'watch', 'update', 'patch'] + - apiGroups: [''] + resources: ['secrets'] + verbs: ['get', 'list'] + - apiGroups: [''] + resources: ['persistentvolumeclaims'] + verbs: ['get', 'list', 'watch', 'update'] + - apiGroups: [""] + resources: ["persistentvolumeclaims/status"] + verbs: ["update", "patch"] + - apiGroups: [''] + resources: ['nodes'] + verbs: ['get', 'list', 'watch'] + - apiGroups: ['storage.k8s.io'] + resources: ['volumeattachments'] + verbs: ['get', 'list', 'watch', 'update', 'patch'] + - apiGroups: ['storage.k8s.io'] + resources: ['storageclasses'] + verbs: ['get', 'list', 'watch'] + - apiGroups: ['csi.storage.k8s.io'] + resources: ['csidrivers'] + verbs: ['get', 'list', 'watch', 'update', 'create'] + - apiGroups: [''] + resources: ['events'] + verbs: ['list', 'watch', 'create', 'update', 'patch'] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots/status"] + verbs: ["update"] + - apiGroups: [ "storage.k8s.io" ] + resources: [ "volumeattachments/status" ] + verbs: [ "get", "list", "watch", "update", "patch" ] + - apiGroups: ["storage.k8s.io"] + resources: ["csinodes"] + verbs: ["get", "list", "watch"] + - apiGroups: ["security.openshift.io"] + resources: ["securitycontextconstraints"] + verbs: ["use"] + resourceNames: ["privileged"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubevirt-csi-node-cr +rules: + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get", "list", "watch", "update", "create", "delete"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["storage.k8s.io"] + resources: ["storageclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["csi.storage.k8s.io"] + resources: ["csinodeinfos"] + verbs: ["get", "list", "watch"] + - apiGroups: ["storage.k8s.io"] + resources: ["csinodes"] + verbs: ["get", "list", "watch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments"] + verbs: ["get", "list", "watch", "update"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments/status"] + verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["security.openshift.io"] + resources: ["securitycontextconstraints"] + verbs: ["use"] + resourceNames: ["privileged"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["list"] +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: external-snapshotter-runner +rules: + - apiGroups: [""] + resources: ["events"] + verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["update", "patch"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubevirt-csi-controller-binding +subjects: + - kind: ServiceAccount + name: kubevirt-csi-controller-sa + namespace: kubevirt-csi-driver +roleRef: + kind: ClusterRole + name: kubevirt-csi-controller-cr + apiGroup: rbac.authorization.k8s.io +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubevirt-csi-node-binding +subjects: + - kind: ServiceAccount + name: kubevirt-csi-node-sa + namespace: kubevirt-csi-driver +roleRef: + kind: ClusterRole + name: kubevirt-csi-node-cr + apiGroup: rbac.authorization.k8s.io +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshotter-role-base +subjects: + - kind: ServiceAccount + name: kubevirt-csi-snapshot-sa + namespace: kubevirt-csi-driver +roleRef: + kind: ClusterRole + name: external-snapshotter-runner + apiGroup: rbac.authorization.k8s.io +--- +{{- if eq .Values.deployment.model "tenant" }} +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: csi-snapshotter-role-tenant +subjects: + - kind: ServiceAccount + name: kubevirt-csi-controller-sa + namespace: kubevirt-csi-driver +roleRef: + kind: ClusterRole + name: external-snapshotter-runner + apiGroup: rbac.authorization.k8s.io +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/secret.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/secret.yaml new file mode 100644 index 00000000..33c14510 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/secret.yaml @@ -0,0 +1,28 @@ +{{- if eq .Values.deployment.model "tenant" }} +apiVersion: v1 +kind: Secret +metadata: + name: infra-cluster-credentials + namespace: kubevirt-csi-driver +type: Opaque +stringData: + kubeconfig: | + apiVersion: v1 + clusters: + - cluster: + insecure-skip-tls-verify: true + server: {{ .Values.deployment.infraClusterKubeconfig.k8sAPIendpoint }} + name: infra-cluster + contexts: + - context: + cluster: infra-cluster + user: kubevirt-csi + name: only-context + current-context: only-context + kind: Config + preferences: {} + users: + - name: kubevirt-csi + user: + token: {{ .Values.deployment.infraClusterKubeconfig.token | b64dec }} +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/serviceaccount.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/serviceaccount.yaml new file mode 100644 index 00000000..54e8058d --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/serviceaccount.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubevirt-csi-controller-sa + namespace: kubevirt-csi-driver +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubevirt-csi-node-sa + namespace: kubevirt-csi-driver +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubevirt-csi-snapshot-sa + namespace: kubevirt-csi-driver \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/storageclass.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/storageclass.yaml new file mode 100644 index 00000000..0961260d --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/templates/storageclass.yaml @@ -0,0 +1,27 @@ +{{- range .Values.storageClasses }} +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .name | quote }} + annotations: + {{- if .annotations }} +{{ toYaml .annotations | indent 4 }} + {{- end }} + {{- if .isDefaultStorageClass }} + storageclass.kubernetes.io/is-default-class: {{ .isDefaultStorageClass | quote }} + {{- end }} +provisioner: csi.kubevirt.io +parameters: + {{- range $key, $value := .parameters }} + {{ $key }}: {{ $value | quote }} + {{- end}} +{{- if .allowVolumeExpansion }} +allowVolumeExpansion: {{ .allowVolumeExpansion }} +{{- end}} +{{- if .reclaimPolicy }} +reclaimPolicy: {{ .reclaimPolicy }} +{{- end}} +{{- if .volumeBindingMode }} +volumeBindingMode: {{ .volumeBindingMode }} +{{- end}} +{{- end}} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/values-lint.yaml b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/values-lint.yaml new file mode 100644 index 00000000..2adcf608 --- /dev/null +++ b/packs/kubevirt-csi-driver-1.0.2/charts/kubevirt-csi-driver/values-lint.yaml @@ -0,0 +1,42 @@ +deployment: + driver: + # Label used to distinguish between guest clusters, if multiple clusters in same VMO namespace + infraClusterLabels: csi-driver/cluster=cluster + # Namespace in the host VMO cluster where the VMs for this guest cluster are running + infraClusterNamespace: virtual-machines + infraStorageClassEnforcement: | + allowAll: true + allowDefault: true + # allowList: [storage_class_a, storage_class_b] + # storageSnapshotMapping: + # - StorageClasses: + # - storage_class_a + # VolumeSnapshotClasses: + # - volumesnapshot_class_a + # - StorageClasses: + # - storage_class_b + # VolumeSnapshotClasses: + # - volumesnapshot_class_b + + # Deployment model, currently only "tenant" is supported + model: tenant + + # Provide a valid kubeconfig for the host VMO cluster below, that is abe to manage DataVolumes in the host VMO cluster. + infraClusterKubeconfig: + # Kubernetes API endpoint of the host VMO cluster + k8sAPIendpoint: "https://vmo-cluster.company.local:6443" + # Base64-encoded token from the kubevirt-csi-secret secret in the namespace where the VMs are running in the host VMO cluster. + # Retrieve this with a command like this: kubectl get secret kubevirt-csi-secret -n -o json | jq .data.token + token: "" + +storageClasses: + - name: kubevirt + isDefaultStorageClass: true + # annotations: + # If you need additional annotations, specify them here + allowVolumeExpansion: false #Note: volume expansion not currently supported + reclaimPolicy: Delete + volumeBindingMode: Immediate #Note: WaitForFirstConsumer not currently supported + parameters: + infraStorageClassName: spectro-storage-class + bus: scsi \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-1.0.2/logo.png b/packs/kubevirt-csi-driver-1.0.2/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dde3a3a6214fcac9c394d482675fd6056f7f3ef3 GIT binary patch literal 3220 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 -o json | jq .data.token + token: "" + + storageClasses: + - name: kubevirt + isDefaultStorageClass: true + # annotations: + # If you need additional annotations, specify them here + allowVolumeExpansion: false + reclaimPolicy: Delete + volumeBindingMode: Immediate #Note: WaitForFirstConsumer not currently supported + parameters: + infraStorageClassName: spectro-storage-class #set to match a storageclass in the host VMO cluster + bus: scsi \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/README.md b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/README.md new file mode 100644 index 00000000..cf8ad3ad --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/README.md @@ -0,0 +1,54 @@ +# Kubevirt CSI driver Infra add-on + +**This pack deploys the components in the host VMO cluster.** +**Apply this pack only to the host VMO cluster** + +The Kubevirt CSI driver is made for a guest cluster deployed on top of Spectro Cloud Palette VMO, and enables it to provision Persistent Volumes from the host VMO cluster. This CSI driver is deployed on the guest cluster. It will contact the host VMO cluster to orchestrate the hot-plugging of disks to VMs running the guest cluster, which will appear as PVCs inside Kubernetes. + +![image](https://github.com/kubevirt/csi-driver/raw/main/docs/high-level-diagram.svg) + +**This pack deploys the components in the host VMO cluster.** +**Apply this pack only to the host VMO cluster** + + +## Prerequisites + +- A host Palette VMO cluster. +- A guest Kubernetes cluster deployed with VMO VMs, using Palette Agent Mode. +- Palette Agent mode must be configured to set the hostname of the OS to match the name of the VM. + + +## Parameters + +To deploy the Kubevirt CSI Driver Infra add-on pack, you need to set, at minimum, the following parameters in the pack's YAML. + +| Name | Description | Type | Default Value | Required | +| --- | --- | --- | --- | --- | +| `deployment.namespaces` | Namespaces in which to deploy the Kubevirt CSI service account on the host VMO cluster. Kubernetes clusters on VMs in these namespaces will be able to use the Kubevirt CSI Driver | Array of strings | `[default, virtual-machines]` | Yes + +A service account, secret, role and rolebinding will be deployed to each namespace listed. The token of each service account will be needed by the Kubevirt CSI Driver pack for each respective namespace. + +## Upgrade + +To update the Kubevirt CSI Driver Infra add-on, deploy a newer version of the pack. + + +## Usage + +To use the Kubevirt CSI Driver Infra add-on pack, we recommend adding it to the VMO Core cluster profile. Open this cluster profile, click "Add new pack" and search for the **Kubevirt CSI Driver Infra add-on** pack in the Palete Community Registry. Then configure the namespaces to be enabled for the Kubevirt CSI Driver in the pack YAML: + +```yaml +charts: + kubevirt-csi-driver-infra: + deployment: + model: tenant + namespaces: + - default + - virtual-machines +``` + +Once you have configured the pack, you can deploy the changes to your VMO cluster. + +## References + +- [Kubevirt CSI driver Github](https://github.com/kubevirt/csi-driver) \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra-1.0.1.tgz b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra-1.0.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1f7fd588bd03544ea8ed34524e291aae62596555 GIT binary patch literal 2466 zcmV;T30?LdiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI^^Z{xP|-)DV_`8$1R7nLkKakdbUht%;F!EP>yxBK!(5zx}u zVndNyl2YRC+4I>CNXd>Y%asnK0F!kkL&hKjn8q&Z5L^06fC zeoUnHrX*o+UP!+0`^QH|_P6i*_1}KC_wG%n*XbVmhsS=m^TzKSca9I=fd5j(+fb%7 zk#GDL>#9%gUqU3MpHV6*cmR3VA!$1Qx8wO<$B9sdlBU{TI_F9g#uR)g-3I!@b2zhZ z1EEM#!I5hPf`g6`VxcsAzPN&rWlE!TI7u*ol|JX_X^H`mG-Wg-Mx~Q4TJzeE>${`X z@vkvS8PTZPw=uF5rSf$8EG*a*|Gr;~|E}LVdbf}NUC;qwlIrPeo3W=?qHW^8L~kh= zKC2$s5dR&&b6ku6&QY(okN;gzHUG;I2|beOSV;PpO~2mVFUq5$op+o&%A)}Kg)7_$ zhE9T-L`0Lo0cc3=wwzJ$Fm2!>a-{9DcUVaK|=MM8pud&Ec+2~IU zwF;cCUtN%dPY}G%gk`9_2va7e33BZjJt`$3D){!zaZ6iqc|RiC~D@xfKLU}l^lCq`geffVs|7G$LUBW>q(V|X?K7g(rG30=sx&6^v=vIKX-HVfz(s_^g-0>F z>e`CV=#U&W+U!`aj+-*VF@RR9q+h%!g2pa>4AvEo%!^5KYJguQSH3 z1*73KfKzr)rm8+7fG-)D8bfDm)NXKqzyheQFcUecSW;Nia$V$6Dk#?{Km6Dqp5G2G z&#te|FF*a%S{`cAdA`{506O{M$MehgH>drNzYjkRZf-A6F9yTw)Ba$yjKZDk0zRJp zI`}wj;?~Fs*K>9=?@;hDot(6DBHJ?KZH1vkt=h%Va%4L<2-6@?X56)YQ2PIgjfoWl zAMs;8T+2qW`AM&OH5F1XJ^R8FVkAt*e=Xdr_|CPEI)ILU=yz&EQYo|u1q?pWz* ziYNG>j~Yh3Jf+mIf0nsuf+Eu=he=a%K`o~)Oyy|2d;76&Ca<~*X(X|&GI$L^0`Li^z3WiGb#i4`fZ70)trmTEt*(dD^8y7 z^5sK-$_s_pKHS{XM%w25e}2aF%xdyn;5V-dw2$mJ8wX%9ObTI zyC;&@)U2N7KL9DWiGTa%`UQ=koBBWAbr0+PUw(K0{%|}{F8hL>;hVG0p%=O6V|UOt%|5dpqLs};m>3o9 zRg_PD28oPlnj@q{$Cc}ZN6rCooY=^NA5)2A`hXGKQys(q{p7(FXHyW|avGB$MG1^@ z^c?SOcstZWqH_R!ktBk{=l&2PDwX3+sBYVzh53#*`b)O$&)J1|(l$S4|Eip~9|es_ zc$cLxrVN$y)>HSX^VS=YJLj#Z6Z5x_bmF}IuX6yOiKHS^aDFyWj+aVd61C&e2uZsb zF2$dYm#a`j*#0+st+YD+?ZL8g8GUZs=bSdh|Iu;%`@eUG@BDrI?}8q)y-9@!mEKOU zr$0YKm`RCT+t6fFXccG0EqDY1d&*%)&rXsZE9>&He4rfeV;aT=WD1q`1HpyQ2+ITt zWddFG5us;gf0*aq*>(HX;pYphOUI}XD&@;PWei3LWW>9 gt8!=Cs@Gn&J?&{vdwMbbF8~1l|BfZkbO1mA0E0N(Hvj+t literal 0 HcmV?d00001 diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/.helmignore b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/Chart.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/Chart.yaml new file mode 100644 index 00000000..7ccec941 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/Chart.yaml @@ -0,0 +1,23 @@ +apiVersion: v2 +name: kubevirt-csi-driver-infra +description: Installs Kubevirt CSI Driver components on the host VMO cluster +# 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: 1.0.1 + +# 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.0.1" diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/_helpers.tpl b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/_helpers.tpl new file mode 100644 index 00000000..bc63beba --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/_helpers.tpl @@ -0,0 +1 @@ +# empty \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/clusterrole.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/clusterrole.yaml new file mode 100644 index 00000000..41c29bc3 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/clusterrole.yaml @@ -0,0 +1,23 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubevirt-csi-cluster +rules: +- apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["get"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubevirt-csi-cluster-binding +roleRef: + kind: ClusterRole + name: kubevirt-csi-cluster + apiGroup: rbac.authorization.k8s.io +subjects: +{{- range .Values.deployment.namespaces }} +- kind: ServiceAccount + name: kubevirt-csi + namespace: {{ . | quote }} +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/deployment.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/deployment.yaml new file mode 100644 index 00000000..33d6584d --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/deployment.yaml @@ -0,0 +1,155 @@ +{{- if eq .Values.deployment.model "split" }} +kind: Deployment +apiVersion: apps/v1 +metadata: + name: kubevirt-csi-controller + namespace: kubevirt-csi-driver + labels: + app: kubevirt-csi-driver +spec: + replicas: 1 + selector: + matchLabels: + app: kubevirt-csi-driver + template: + metadata: + labels: + app: kubevirt-csi-driver + spec: + enableServiceLinks: false + serviceAccount: kubevirt-csi + priorityClassName: system-cluster-critical + nodeSelector: + node-role.kubernetes.io/control-plane: "" + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - key: node-role.kubernetes.io/master + operator: Exists + effect: "NoSchedule" + containers: + - name: csi-driver + imagePullPolicy: Always + image: quay.io/kubevirt/kubevirt-csi-driver:latest + args: + - "--endpoint=$(CSI_ENDPOINT)" + - "--infra-cluster-namespace=$(INFRACLUSTER_NAMESPACE)" + - "--infra-cluster-labels=$(INFRACLUSTER_LABELS)" + - "--tenant-cluster-kubeconfig=/var/run/secrets/tenantcluster/value" + - "--run-node-service=false" + - "--run-controller-service=true" + - "--v=5" + ports: + - name: healthz + containerPort: 10301 + protocol: TCP + env: + - name: CSI_ENDPOINT + value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: INFRACLUSTER_NAMESPACE + valueFrom: + configMapKeyRef: + name: driver-config + key: infraClusterNamespace + - name: INFRACLUSTER_LABELS + valueFrom: + configMapKeyRef: + name: driver-config + key: infraClusterLabels + - name: INFRA_STORAGE_CLASS_ENFORCEMENT + valueFrom: + configMapKeyRef: + name: driver-config + key: infraStorageClassEnforcement + optional: true + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + - name: tenantcluster + mountPath: "/var/run/secrets/tenantcluster" + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-provisioner + image: registry.k8s.io/sig-storage/csi-provisioner:v5.1.0 + args: + - "--csi-address=$(ADDRESS)" + - "--default-fstype=ext4" + - "--kubeconfig=/var/run/secrets/tenantcluster/value" + - "--v=5" + - "--timeout=3m" + - "--retry-interval-max=1m" + env: + - name: ADDRESS + value: /var/lib/csi/sockets/pluginproxy/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + - name: tenantcluster + mountPath: "/var/run/secrets/tenantcluster" + - name: csi-attacher + image: registry.k8s.io/sig-storage/csi-attacher:v4.8.0 + args: + - "--csi-address=$(ADDRESS)" + - "--kubeconfig=/var/run/secrets/tenantcluster/value" + - "--v=5" + - "--timeout=3m" + - "--retry-interval-max=1m" + env: + - name: ADDRESS + value: /var/lib/csi/sockets/pluginproxy/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /var/lib/csi/sockets/pluginproxy/ + - name: tenantcluster + mountPath: "/var/run/secrets/tenantcluster" + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-liveness-probe + image: registry.k8s.io/sig-storage/livenessprobe:v2.14.0 + args: + - "--csi-address=/csi/csi.sock" + - "--probe-timeout=3s" + - "--health-port=10301" + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: tenantcluster + mountPath: "/var/run/secrets/tenantcluster" + resources: + requests: + memory: 50Mi + cpu: 10m + - name: csi-snapshotter + args: + - "--v=5" + - "--csi-address=/csi/csi.sock" + - "--kubeconfig=/var/run/secrets/tenantcluster/value" + - "--timeout=3m" + image: registry.k8s.io/sig-storage/csi-snapshotter:v8.2.0 + imagePullPolicy: IfNotPresent + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /csi + name: socket-dir + - name: tenantcluster + mountPath: "/var/run/secrets/tenantcluster" + resources: + requests: + memory: 20Mi + cpu: 10m + volumes: + - name: socket-dir + emptyDir: {} + - name: tenantcluster + secret: + secretName: kvcluster-kubeconfig +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/namespace.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/namespace.yaml new file mode 100644 index 00000000..1fc81834 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/namespace.yaml @@ -0,0 +1,12 @@ +{{- if eq .Values.deployment.model "split" }} +apiVersion: v1 +kind: Namespace +metadata: + labels: + kubernetes.io/metadata.name: kubevirt-csi-driver + pod-security.kubernetes.io/audit: privileged + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/warn: privileged + name: kubevirt-csi-driver +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/rbac.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/rbac.yaml new file mode 100644 index 00000000..92947975 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/rbac.yaml @@ -0,0 +1,37 @@ +{{- range .Values.deployment.namespaces }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kubevirt-csi + namespace: {{ . | quote }} +rules: +- apiGroups: ["cdi.kubevirt.io"] + resources: ["datavolumes"] + verbs: ["get", "create", "delete"] +- apiGroups: ["kubevirt.io"] + resources: ["virtualmachineinstances", "virtualmachines"] + verbs: ["list", "get"] +- apiGroups: ["subresources.kubevirt.io"] + resources: ["virtualmachines/addvolume", "virtualmachines/removevolume"] + verbs: ["update"] +- apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshots"] + verbs: ["get", "create", "delete"] +- apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "patch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubevirt-csi + namespace: {{ . | quote }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubevirt-csi +subjects: +- kind: ServiceAccount + name: kubevirt-csi +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/serviceaccount.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/serviceaccount.yaml new file mode 100644 index 00000000..d2877d56 --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/templates/serviceaccount.yaml @@ -0,0 +1,17 @@ +{{- range .Values.deployment.namespaces }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kubevirt-csi + namespace: {{ . | quote }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: kubevirt-csi-secret + namespace: {{ . | quote }} + annotations: + kubernetes.io/service-account.name: kubevirt-csi +type: kubernetes.io/service-account-token +{{- end }} \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/values-lint.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/values-lint.yaml new file mode 100644 index 00000000..fd14b8de --- /dev/null +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/charts/kubevirt-csi-driver-infra/values-lint.yaml @@ -0,0 +1,8 @@ +deployment: + # Deployment model, currently only "tenant" is supported + model: tenant + + # Namespaces in which to deploy the Kubevirt CSI service account on the host VMO cluster. + # Kubernetes clusters on VMs in these namespaces will be able to use the Kubevirt CSI Driver. + namespaces: + - virtual-machines \ No newline at end of file diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/logo.png b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dde3a3a6214fcac9c394d482675fd6056f7f3ef3 GIT binary patch literal 3220 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 Date: Sun, 28 Dec 2025 22:56:37 +0530 Subject: [PATCH 2/2] fix the snapshotter image version --- packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml index a131ce99..16d4d9f7 100644 --- a/packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml +++ b/packs/kubevirt-csi-driver-infra-add-on-1.0.1/values.yaml @@ -4,7 +4,7 @@ pack: - image: quay.io/kubevirt/kubevirt-csi-driver:latest - image: registry.k8s.io/sig-storage/csi-attacher:v4.10.0 - image: registry.k8s.io/sig-storage/csi-provisioner:v6.1.0 - - image: registry.k8s.io/sig-storage/livenessprobe:v2.15.0 + - image: registry.k8s.io/sig-storage/csi-snapshotter:v8.2.0 - image: registry.k8s.io/sig-storage/livenessprobe:v2.14.0 charts: kubevirt-csi-driver-infra: @@ -16,4 +16,4 @@ charts: # Kubernetes clusters on VMs in these namespaces will be able to use the Kubevirt CSI Driver. namespaces: - default - - virtual-machines \ No newline at end of file + - virtual-machines