Deploy Helm OCI charts with ArgoCD
In this post, I’ll describe how to deploy OCI Helm chart using ArgoCD.
In our projects, we use Harbor both registries for docker and Helm Charts. Currently, we using Chartmuseum but in the Harbor release v2.2.0 was announced that it will be deprecated
Researching was not so long, and we found that Helm 3 supports OCI for package distribution. Also, the OCI-compatible registry, provided by Harbor since version 2.0.0
Helm 3: Commands for working with registries
Enable OCI support
$ export HELM_EXPERIMENTAL_OCI=1
Login
$ helm registry login -u <user_name> myregistry.com
Password:
Login succeeded
List all saved charts
$ helm chart list
REF NAME VERSION DIGEST SIZE CREATEDmyregistry.com/helm-charts/simple-chart:1.0.0 simple-chart 0.1.0 a8de052 4.1 KiB 8 hours
myregistry.com/helm-charts/simple-chart:1.1.2 simple-chart 0.1.0 c2afe75 4.1 KiB 19 minutes
Save a chart directory to the local cache
$ helm chart save simple-chart myregistry.com/helm-charts/simple-chart:1.1.2ref: myregistry.com/helm-charts/simple-chart:1.1.2
digest: 43f18e1ee4df7b58b7094730566fb81964eb07a9d4d8fb
size: 4.1 KiB
name: simple-chart
version: 0.1.0
1.1.2: saved
Push a chart to remote
$ helm chart push myregistry.com/helm-charts/simple-chart:1.1.2The push refers to repository [myregistry.com/helm-charts/simple-chart]
ref: myregistry.com/helm-charts/simple-chart:1.1.2
digest: 3f0e3243f18e1ee4df7b58b7094730566fb81964eb07a9d4d8fb
size: 4.1 KiB
name: simple-chart
version: 0.1.0
1.1.2: pushed to remote (1 layer, 4.1 KiB total)
Use OCI Helm Chart
Create an empty directory with Chart.yaml and values.yaml files and push to Git repo
Chart.yaml
apiVersion: v2
name: simple-chart
description: Simple Chart
type: application
version: 0.1.0dependencies:
- name: simple-chart
version: "1.1.2"
repository: "oci://myregistry.com/helm-charts"
values.yaml
simple-chart:
env:
myFirstEnv: 'SimpleEnv'
Build dependency and deploy Helm Chart
Go to Chart directory and run commands:
$ helm dependency buildUpdate Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading simple-chart from repo oci://myregistry.com/helm-charts
1.1.2: Pulling from myregistry.com/helm-charts/simple-chart
Deleting outdated charts
Deploy application:
$ helm install my-application .
NAME: my-application
LAST DEPLOYED: Mon Apr 19 22:39:03 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Deploy an application with ArgoCD
Create helm repo with cli
argocd repo add myregistry.com --type helm --name registry --enable-oci --username <username> --password <password>
Create helm repo with yaml
This example based on the official ArgoCD Helm Chart
Create secret with Login and Password from Helm registry
apiVersion: v1
kind: Secret
metadata:
name: argocd-helm-oci
data:
username: username|base64
password: password|base64
type: Opaque
Apply secret to Kubernetes:
$ kubectl apply -f secret.yaml
Edit values.yaml
Add repository:
server:
config:
repositories: |
- type: helm
name: registry
url: myregistry.com
enableOci: true
usernameSecret:
name: argocd-helm-oci
key: username
passwordSecret:
name: argocd-helm-oci
key: password
Add application:
server:
...
additionalApplications:
- name: my-application
project: default
source:
path: .
repoURL: 'https://git.com/myrepo/simple-chart.git'
targetRevision: HEAD
helm:
valueFiles:
- values.yaml
destination:
namespace: default
server: 'https://kubernetes.default.svc'
syncPolicy:
automated:
prune: true
selfHeal: true
Install ArgoCD
$ helm install -n argocd argocd .