Host a Private Helm Repository on OVHcloud Object Storage
What You'll Learn
- Create an OVHcloud Object Storage container
- Package Helm charts
- Upload them using the S3-compatible API
- Use the repo privately with Helm
Prerequisites
- OVHcloud account with Public Cloud enabled
- A project with Object Storage activated
- helm, awscli, and optionally s3cmd installed
- Your Object Storage S3 credentials
Create an Object Storage Container
- Go to your OVHcloud Control Panel
- Navigate to: Public Cloud → Object Storage
- Click Create Container
- Name: helm-repo
- Region: (e.g., GRA, BHS, etc.)
- Type: Private or Public (we’ll go with private here)
Get Your S3-Compatible Credentials
- In the OVHcloud panel: Users & Roles → OpenStack User
- Generate an OpenStack user with S3 credentials
- Save the:
- Access Key
- Secret Key
- Endpoint (e.g., s3.gra.io.cloud.ovh.net)
Configure AWS CLI
aws configure --profile ovh-helm
- Access Key: (paste yours)
- Secret Key: (paste yours)
- Region: gra
- Output format: json
Set the endpoint manually in each command using --endpoint-url.
Create and Package a Helm Chart
helm create my-app
helm package my-app
This creates my-app-0.1.0.tgz
Generate index.yaml
helm repo index . --url https://s3.gra.io.cloud.ovh.net/helm-repo
This will generate index.yaml compatible with Helm.
Upload to OVHcloud Object Storage
aws s3 cp my-app-0.1.0.tgz s3://helm-repo/ --profile ovh-helm --endpoint-url https://s3.gra.io.cloud.ovh.net
aws s3 cp index.yaml s3://helm-repo/ --profile ovh-helm --endpoint-url https://s3.gra.io.cloud.ovh.net
To list contents:
aws s3 ls s3://helm-repo/ --profile ovh-helm --endpoint-url https://s3.gra.io.cloud.ovh.net
Access the Repo Privately
Helm can’t use S3 directly yet, so we use tools like:
Option A: Use ChartMuseum (self-hosted)
You can proxy your OVH storage with ChartMuseum running in Kubernetes or locally.
Option B: Use s3 with helm-s3 plugin
Install:
helm plugin install https://github.com/hypnoglow/helm-s3.git
Configure:
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
export AWS_REGION=gra
export HELM_S3_ENDPOINT=https://s3.gra.io.cloud.ovh.net
Add the repo:
helm repo add ovh-s3-repo s3://helm-repo
helm repo update
Install:
helm install myapp ovh-s3-repo/my-app
Automate with GitHub Actions
Optionally, automate chart packaging and upload with a GitHub workflow:
name: Upload Helm Chart
on:
push:
paths:
- 'charts/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Helm
uses: azure/setup-helm@v3
- name: Package Chart
run: |
helm package charts/my-app
helm repo index . --url https://s3.gra.io.cloud.ovh.net/helm-repo
- name: Upload to OVH S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 cp my-app-*.tgz s3://helm-repo/ --endpoint-url https://s3.gra.io.cloud.ovh.net
aws s3 cp index.yaml s3://helm-repo/ --endpoint-url https://s3.gra.io.cloud.ovh.net