verdaccio-gke-charts

View on GitHub

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

  1. Create a Google CLoud Project
  2. Install the gcloud SDK and CLI or use the Cloud Shell
  3. If using the CLI outside of Cloud Shell, run gcloud config set project your-project
  4. Create a GKE cluster
  5. Pick the cluster to work with using a command like
    • gcloud container clusters get-credentials verdaccio-autopilot-cluster --region=us-central1
  6. Create a namespace (recommended)
    • kubectl create namespace registry
  7. 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

  1. Create the PersistentVolume
  2. Create the PersistentVolumeClaim
  3. Install the chart
helm install npm \
    --set persistence.existingClaim=PVC_NAME \
    devintent-verdaccio-gke-charts/devintent-verdaccio-gke-charts