Skip to content

Commit

Permalink
feat(snapshot-controller): Added chart
Browse files Browse the repository at this point in the history
Signed-off-by: Steve Hipwell <steve.hipwell@gmail.com>
  • Loading branch information
stevehipwell committed Feb 14, 2025
1 parent 18cdea3 commit 6b0ae37
Show file tree
Hide file tree
Showing 28 changed files with 2,313 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/validate-pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ on:
paths:
- charts/**

concurrency:
group: pr-${{ github.ref }}
cancel-in-progress: true

permissions: read-all

# curl -s https://endoflife.date/api/kubernetes.json | jq -r '[sort_by(.releaseDate) | reverse | .[0:4] | .[].latest] | join(",")'
Expand Down
29 changes: 29 additions & 0 deletions charts/snapshot-controller/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 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/
# Metadata files
artifacthub-repo.yml
# Automation files
/ci/kubeconform.yaml
/ci/*-values.yaml
_*.md
27 changes: 27 additions & 0 deletions charts/snapshot-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Snapshot Controller Helm Chart Changelog

> [!NOTE]
> All notable changes to this project will be documented in this file; the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
<!--
### Added - For new features.
### Changed - For changes in existing functionality.
### Deprecated - For soon-to-be removed features.
### Removed - For now removed features.
### Fixed - For any bug fixes.
### Security - In case of vulnerabilities.
-->

## [UNRELEASED]

## [v0.1.0] - 2025-02-14

### Added

- Initial release. ([#1129](https://github.com/stevehipwell/helm-charts/pull/1129)) _@stevehipwell_

<!--
RELEASE LINKS
-->
[UNRELEASED]: https://github.com/stevehipwell/helm-charts/tree/main/charts/snapshot-controller
[v0.1.0]: https://github.com/stevehipwell/helm-charts/releases/tag/snapshot-controller-0.1.0
23 changes: 23 additions & 0 deletions charts/snapshot-controller/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: v2
name: snapshot-controller
description: Helm chart for the External Snapshotter Snapshot Controller. The CSI snapshotter is part of Kubernetes implementation of Container Storage Interface (CSI) and implements both the volume snapshot and the volume group snapshot feature.
type: application
version: 0.1.0
appVersion: 8.2.0
keywords:
- kubernetes
- csi
- storage
- snapshot
home: https://github.com/kubernetes-csi/external-snapshotter/
icon: https://raw.githubusercontent.com/stevehipwell/helm-charts/main/charts/external-snapshotter/icon.png
sources:
- https://github.com/kubernetes-csi/external-snapshotter/
- https://github.com/stevehipwell/helm-charts/
maintainers:
- name: stevehipwell
email: steve.hipwell@gmail.com
annotations:
artifacthub.io/changes: |
- kind: added
description: "Initial release."
94 changes: 94 additions & 0 deletions charts/snapshot-controller/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# snapshot-controller

![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 8.2.0](https://img.shields.io/badge/AppVersion-8.2.0-informational?style=flat-square)

Helm chart for the External Snapshotter Snapshot Controller. The CSI snapshotter is part of Kubernetes implementation of Container Storage Interface (CSI) and implements both the volume snapshot and the volume group snapshot feature.

**Homepage:** <https://github.com/kubernetes-csi/external-snapshotter/>

## Maintainers

| Name | Email | Url |
| ---- | ------ | --- |
| stevehipwell | <steve.hipwell@gmail.com> | |

## Source Code

* <https://github.com/kubernetes-csi/external-snapshotter/>
* <https://github.com/stevehipwell/helm-charts/>

## Installing the Chart

### OCI Repository

To install the chart using the recommended OCI method you can use the following command.

```shell
helm upgrade --install snapshot-controller oci://ghcr.io/stevehipwell/helm-charts/snapshot-controller --version 0.1.0
```

#### Verification

As the OCI chart release is signed by [Cosign](https://github.com/sigstore/cosign) you can verify the chart before installing it by running the following command.

```shell
cosign verify --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp 'https://github\.com/action-stars/helm-workflows/\.github/workflows/release\.yaml@.+' --certificate-github-workflow-repository stevehipwell/helm-charts --certificate-github-workflow-name Release ghcr.io/stevehipwell/helm-charts/snapshot-controller:0.1.0
```

### Non-OCI Repository

Alternatively you can use the legacy non-OCI method via the following commands.

```shell
helm repo add stevehipwell https://stevehipwell.github.io/helm-charts/
helm upgrade --install snapshot-controller stevehipwell/snapshot-controller --version 0.1.0
```

## Values

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | Affinity settings for scheduling. If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels. |
| commonLabels | object | `{}` | Labels to add to all chart resources. |
| distributedSnapshotting.enabled | bool | `false` | If `true`, enable distributed snapshotting. |
| extraArgs | list | `[]` | Additional args for the default container. |
| extraEnv | list | `[]` | Additional environment variables for the default container. |
| fullnameOverride | string | `nil` | Override the full name of the chart. |
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy for the default container. |
| image.repository | string | `"registry.k8s.io/sig-storage/snapshot-controller"` | Image repository for the default container. |
| image.tag | string | `nil` | Image tag for the default container; this will default to `.Chart.AppVersion` if not set. |
| imagePullSecrets | list | `[]` | Image pull secrets. |
| livenessProbe | object | See _values.yaml_ | Liveness probe configuration for the default container; this only works where there are multiple replicas. |
| logLevel | int | `5` | Log level. |
| nameOverride | string | `nil` | Override the name of the chart. |
| nodeSelector | object | `{}` | Node selector labels for scheduling. |
| podAnnotations | object | `{}` | Annotations to add to the pod. |
| podDisruptionBudget.enabled | bool | `false` | If `true`, create a `PodDisruptionBudget`. |
| podDisruptionBudget.maxUnavailable | string | `nil` | Minimum number of unavailable pods; either a number or a percentage. |
| podDisruptionBudget.minAvailable | string | `nil` | Minimum number of available pods; either a number or a percentage. |
| podDisruptionBudget.unhealthyPodEvictionPolicy | string | `nil` | Unhealthy pod eviction policy PDB. |
| podLabels | object | `{}` | Labels to add to the pod. |
| podSecurityContext | object | See _values.yaml_ | Security context for the pod. |
| priorityClassName | string | `nil` | Priority class name. |
| readinessProbe | object | See _values.yaml_ | Readiness probe configuration for the default container; this only works where there are multiple replicas. |
| replicas | int | `1` | Number of replicas to create. |
| resources | object | `{}` | Resources for the default container. |
| retryCrdIntervalMax | int | `30` | Maximum interval between retries for CRD operations; in seconds. |
| securityContext | object | See _values.yaml_ | Security context for the default container. |
| service.annotations | object | `{}` | Annotations to add to the service. |
| service.labels | object | `{}` | Labels to add to the service. |
| serviceAccount.annotations | object | `{}` | Annotations to add to the service account. |
| serviceAccount.create | bool | `true` | If `true`, create a new `ServiceAccount`. |
| serviceAccount.labels | object | `{}` | Labels to add to the service account. |
| serviceAccount.name | string | `nil` | If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use. |
| serviceMonitor.additionalLabels | object | `{}` | Additional labels for the service monitor. |
| serviceMonitor.enabled | bool | `false` | If `true`, create a `ServiceMonitor` to support collecting metrics via the _Prometheus Operator_. |
| serviceMonitor.endpointConfig | object | `{}` | Additional endpoint configuration for the service monitor endpoint. |
| terminationGracePeriodSeconds | int | `nil` | Termination grace period; in seconds. |
| tolerations | list | `[]` | Node taints the pod will be tolerate for scheduling. |
| topologySpreadConstraints | list | `[]` | Topology spread constraints for scheduling. If an explicit label selector is not provided one will be created from the pod selector labels. |
| updateStrategy | object | `{}` | Update strategy. |

----------------------------------------------

Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).
4 changes: 4 additions & 0 deletions charts/snapshot-controller/artifacthub-repo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
repositoryID: ce4f7473-d967-4e50-a709-d13d4a81d96b
owners:
- name: stevehipwell
email: steve.hipwell@gmail.com
Empty file.
19 changes: 19 additions & 0 deletions charts/snapshot-controller/ci/kubeconform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
serviceMonitor:
enabled: true

distributedSnapshotting:
enabled: true

replicas: 2

podDisruptionBudget:
enabled: true
maxUnavailable: 1

resources:
requests:
cpu: 500m
memory: 1024Mi
limits:
cpu: 1000m
memory: 1024Mi
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/1150"
name: volumegroupsnapshotclasses.groupsnapshot.storage.k8s.io
spec:
group: groupsnapshot.storage.k8s.io
names:
kind: VolumeGroupSnapshotClass
listKind: VolumeGroupSnapshotClassList
plural: volumegroupsnapshotclasses
shortNames:
- vgsclass
- vgsclasses
singular: volumegroupsnapshotclass
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .driver
name: Driver
type: string
- description: Determines whether a VolumeGroupSnapshotContent created through the VolumeGroupSnapshotClass should be deleted when its bound VolumeGroupSnapshot is deleted.
jsonPath: .deletionPolicy
name: DeletionPolicy
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
name: v1beta1
schema:
openAPIV3Schema:
description: |-
VolumeGroupSnapshotClass specifies parameters that a underlying storage system
uses when creating a volume group snapshot. A specific VolumeGroupSnapshotClass
is used by specifying its name in a VolumeGroupSnapshot object.
VolumeGroupSnapshotClasses are non-namespaced.
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
deletionPolicy:
description: |-
DeletionPolicy determines whether a VolumeGroupSnapshotContent created
through the VolumeGroupSnapshotClass should be deleted when its bound
VolumeGroupSnapshot is deleted.
Supported values are "Retain" and "Delete".
"Retain" means that the VolumeGroupSnapshotContent and its physical group
snapshot on underlying storage system are kept.
"Delete" means that the VolumeGroupSnapshotContent and its physical group
snapshot on underlying storage system are deleted.
Required.
enum:
- Delete
- Retain
type: string
driver:
description: |-
Driver is the name of the storage driver expected to handle this VolumeGroupSnapshotClass.
Required.
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
metadata:
type: object
parameters:
additionalProperties:
type: string
description: |-
Parameters is a key-value map with storage driver specific parameters for
creating group snapshots.
These values are opaque to Kubernetes and are passed directly to the driver.
type: object
required:
- deletionPolicy
- driver
type: object
served: true
storage: true
subresources: {}
Loading

0 comments on commit 6b0ae37

Please sign in to comment.