Verdaccio is a lightweight private NPM proxy registry.
TL;DR;
helm repo add devintent-verdaccio-gke-charts https://devintent.github.io/devintent-verdaccio-gke-charts
helm repo update
helm install devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
Introduction
This chart bootstraps a Verdaccio deployment on a Kubernetes cluster using the Helm package manager on GKE.
Prerequisites
- Create a Google CLoud Project
- Install the gcloud SDK and CLI or use the Cloud Shell
- If using the CLI outside of Cloud Shell, run
gcloud config set project your-project
- Create a GKE cluster
- Pick the cluster to work with using a command like
gcloud container clusters get-credentials verdaccio-autopilot-cluster --region=us-central1
- Create a namespace (recommended)
kubectl create namespace registry
- If not in the Cloud Shell, Install Helm v3+
Installing the Chart
Add repository
helm repo add devintent-verdaccio-gke-charts https://devintent.github.io/devintent-verdaccio-gke-charts
Install Verdaccio chart
In this example we use npm
as release name:
# Helm v3+
helm install npm --namespace registry devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
Deploy a specific Verdaccio version
helm install npm --set image.tag=4.6.2 devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
Upgrading Verdaccio
helm upgrade npm --namespace registry devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
The command deploys Verdaccio on the GKE cluster in the default configuration. The configuration section lists the parameters that can be configured during installation.
Tip: List all releases using
helm list
.
Uninstalling the Chart
To uninstall/delete the npm
deployment:
helm uninstall npm --namespace registry
The command removes all the GKE and GCE components associated with the chart and deletes the release.
Configuration
The following table lists the configurable parameters of the Verdaccio chart, and their default values.
Parameter | Description | Default |
---|---|---|
affinity |
Affinity for pod assignment | {} |
existingConfigMap |
Name of custom ConfigMap to use | false |
image.pullPolicy |
Image pull policy | IfNotPresent |
image.pullSecrets |
Image pull secrets | [] |
image.repository |
Verdaccio container image repository | verdaccio/verdaccio |
image.tag |
Verdaccio container image tag | 5.0.4 |
nodeSelector |
Node labels for pod assignment | {} |
tolerations |
List of node taints to tolerate | [] |
persistence.accessMode |
PVC Access Mode for Verdaccio volume | ReadWriteOnce |
persistence.enabled |
Enable persistence using PVC | true |
persistence.existingClaim |
Use existing PVC | nil |
persistence.mounts |
Additional mounts | nil |
persistence.size |
PVC Storage Request for Verdaccio volume | 8Gi |
persistence.storageClass |
PVC Storage Class for Verdaccio volume | nil |
persistence.selector |
Selector to match an existing Persistent Volume | {} (evaluated as a template) |
persistence.volumes |
Additional volumes | nil |
podLabels |
Additional pod labels | {} (evaluated as a template) |
podAnnotations |
Annotations to add to each pod | {} |
priorityClass.enabled |
Enable specifying pod priorityClassName | false |
priorityClass.name |
PriorityClassName to be specified in pod spec | "" |
replicaCount |
Desired number of pods | 1 |
resources |
CPU/Memory resource requests/limits | {} |
service.annotations |
Annotations to add to service | none |
service.clusterIP |
IP address to assign to service | "" |
service.externalIPs |
Service external IP addresses | [] |
service.loadBalancerIP |
IP address to assign to load balancer (if supported) | "" |
service.loadBalancerSourceRanges |
List of IP CIDRs allowed access to load balancer (if supported) | [] |
service.port |
Service port to expose | 80 |
service.targetPort |
Container port to target | 4873 |
service.nodePort |
Service port to expose when the type is NodePort | none |
service.type |
Type of service to create | ClusterIP |
serviceAccount.create |
Create service account | false |
serviceAccount.name |
Service account Name | none |
extraEnvVars |
Define environment variables to be passed to the container | {} |
extraInitContainers |
Define additional initContainers to be added to the deployment | [] |
securityContext |
Define Container Security Context | {runAsUser=10001} |
podSecurityContext |
Define Pod Security Context | {fsGroup=101} |
nameOverride |
Set resource name override | "" |
fullnameOverride |
Set resource fullname override | "" |
Specify each parameter using the --set key=value[,key=value]
argument to helm install
. For example,
helm install my-release --set service.type=LoadBalancer devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
The above command sets the service type LoadBalancer
.
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
helm install my-release -f values.yaml devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts
Tip: You can use the default values.yaml as a starting point.
Custom ConfigMap
When creating a new chart with this chart as a dependency, CustomConfigMap can
be used to override the default config.yaml provided. It also allows for
providing additional configuration files that will be copied into
/verdaccio/conf
. In the parent chart’s values.yaml, set the value to true and
provide the file templates/config.yaml
for your use case.
Persistence
The Verdaccio image stores persistence under /verdaccio/storage
path of the
container. A dynamically managed Persistent Volume Claim is used to keep the
data across deployments, by default. This is known to work in GCE, AWS, and
minikube.
Alternatively, a previously configured Persistent Volume Claim can be used.
It is possible to mount several volumes using Persistence.volumes
and
Persistence.mounts
parameters.
Existing PersistentVolumeClaim
- Create the PersistentVolume
- Create the PersistentVolumeClaim
- Install the chart
helm install npm \
--set persistence.existingClaim=PVC_NAME \
devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts