All Projects → hypnoglow → Helm S3

hypnoglow / Helm S3

Licence: mit
Helm plugin that allows to set up a chart repository in AWS S3.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Helm S3

Stock Analysis Engine
Backtest 1000s of minute-by-minute trading algorithms for training AI with automated pricing data from: IEX, Tradier and FinViz. Datasets and trading performance automatically published to S3 for building AI training datasets for teaching DNNs how to trade. Runs on Kubernetes and docker-compose. >150 million trading history rows generated from +5000 algorithms. Heads up: Yahoo's Finance API was disabled on 2019-01-03 https://developer.yahoo.com/yql/
Stars: ✭ 605 (+62.63%)
Mutual labels:  s3, minio, helm
minio-dart
Unofficial MinIO Dart Client SDK that provides simple APIs to access any Amazon S3 compatible object storage server.
Stars: ✭ 42 (-88.71%)
Mutual labels:  s3, minio
mlflow-docker
Ready to run docker-compose configuration for ML Flow with Mysql and Minio S3
Stars: ✭ 146 (-60.75%)
Mutual labels:  s3, minio
minback-postgres
A container which provides the ability to backup a PostgreSQL database to Minio on demand
Stars: ✭ 18 (-95.16%)
Mutual labels:  s3, minio
backup-repository
Backup storage for E2E GPG-encrypted files, with multi-user, quotas, versioning, using a object storage (S3/Min.io/GCS etc.) and deployed on Kubernetes or standalone.
Stars: ✭ 21 (-94.35%)
Mutual labels:  s3, minio
mindav
A self-hosted file backup server which bridges WebDAV protocol with @minio written in @totoval. Webdav ❤️ Minio
Stars: ✭ 64 (-82.8%)
Mutual labels:  s3, minio
esop
Cloud-enabled backup and restore tool for Apache Cassandra
Stars: ✭ 40 (-89.25%)
Mutual labels:  s3, minio
Dataengineeringproject
Example end to end data engineering project.
Stars: ✭ 82 (-77.96%)
Mutual labels:  s3, minio
fss3
FSS3 is an S3 filesystem abstraction layer for Golang
Stars: ✭ 52 (-86.02%)
Mutual labels:  s3, minio
terraform-provider-minio
Terraform provider for managing minio S3 buckets and IAM Users
Stars: ✭ 123 (-66.94%)
Mutual labels:  s3, minio
sftp-gateway
This repository contains a docker image configured to use the SSH File Transfer Protocol (SFTP) to transfer all its files to Cloud Blob Storage Services. This image can be deployed on a Kubernetes cluster with Helm.
Stars: ✭ 18 (-95.16%)
Mutual labels:  helm, s3
Drone Cache
A Drone plugin for caching current workspace files between builds to reduce your build times
Stars: ✭ 194 (-47.85%)
Mutual labels:  s3, minio
Rust S3
Rust library for interfacing with AWS S3 and other API compatible services
Stars: ✭ 177 (-52.42%)
Mutual labels:  s3, minio
skbn
Copy files and directories between Kubernetes and cloud storage
Stars: ✭ 68 (-81.72%)
Mutual labels:  s3, minio
S3contents
A S3 backed ContentsManager implementation for Jupyter
Stars: ✭ 175 (-52.96%)
Mutual labels:  s3, minio
gosquito
gosquito ("go" + "mosquito") is a pluggable tool for data gathering, data processing and data transmitting to various destinations.
Stars: ✭ 25 (-93.28%)
Mutual labels:  s3, minio
minio-rclone-webdav-server
A @rclone served WebDAV server with @minio as the s3 storage backend docker example
Stars: ✭ 17 (-95.43%)
Mutual labels:  s3, minio
Rome
Carthage cache for S3, Minio, Ceph, Google Storage, Artifactory and many others
Stars: ✭ 724 (+94.62%)
Mutual labels:  s3, minio
Minio Go
MinIO Client SDK for Go
Stars: ✭ 1,231 (+230.91%)
Mutual labels:  s3, minio
metalnetes
Create and manage multiple Kubernetes clusters using KVM on a bare metal Fedora 29 server. Includes helm + rook-ceph + nginx ingress + the stock analysis engine (jupyter + redis cluster + minio + automated cron jobs for data collection) - works on Kubernetes version v1.16.0 - 1.16.3 was not working
Stars: ✭ 37 (-90.05%)
Mutual labels:  helm, minio

helm-s3 Logo

CircleCI License MIT GitHub release

The Helm plugin that provides Amazon S3 protocol support.

This allows you to have private or public Helm chart repositories hosted on Amazon S3. See this guide to get a detailed example use case overview.

The plugin supports both Helm v2 and v3 (Helm v3 support is available since v0.9.0).

Table of contents

Install

The installation itself is simple as:

$ helm plugin install https://github.com/hypnoglow/helm-s3.git

You can install a specific release version:

$ helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

To use the plugin, you do not need any special dependencies. The installer will download versioned release with prebuilt binary from github releases. However, if you want to build the plugin from source, or you want to contribute to the plugin, please see these instructions.

Docker Images

Docker Pulls

The plugin is also distributed as Docker images. Images are pushed to Docker Hub tagged with plugin release version and suffixed with Helm version. The image built from master branch is also available, note that it should be only used for playing and testing, it is strongly discouraged to use that image for production use cases. Refer to https://hub.docker.com/r/hypnoglow/helm-s3 for details and all available tags.

Configuration

AWS Access

To publish charts to buckets and to fetch from private buckets, you need to provide valid AWS credentials. You can do this in the same manner as for AWS CLI tool.

So, if you want to use the plugin and you are already using AWS CLI - you are good to go, no additional configuration required. Otherwise, follow the official guide to set up credentials.

To minimize security issues, remember to configure your IAM user policies properly. As an example, a setup can provide only read access for users, and write access for a CI that builds and pushes charts to your repository.

Example Read Only IAM policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Example Read and Write IAM policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "files",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name/repository-name/*",
                "arn:aws:s3:::bucket-name/repository-name"
            ]
        },
        {
            "Sid": "bucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::bucket-name"
        }
    ]
}

Helm version mode

The plugin is able to detect if you are using Helm v2 or v3 automatically. If, for some reason, the plugin does not detect Helm version properly, you can set HELM_S3_MODE environment variable to value 2 or 3 to force the mode.

Example:

# We have Helm version 3:
$ helm version --short
v3.0.2+g19e47ee

# For some reason, the plugin detects Helm version badly:
$ helm s3 version --mode
helm-s3 plugin version: 0.9.2
Helm version mode: v2

# Force the plugin to operate in v3 mode:
$ HELM_S3_MODE=3 helm s3 version --mode
helm-s3 plugin version: 0.9.2
Helm version mode: v3

Usage

Note: some Helm CLI commands in v3 are incompatible with v2. Example commands below are provided for v2. For commands different in v3 there is a tip 💡 below each example.

For now let's omit the process of uploading repository index and charts to s3 and assume you already have your repository index.yaml file on s3 under path s3://bucket-name/charts/index.yaml and a chart archive epicservice-0.5.1.tgz under path s3://bucket-name/charts/epicservice-0.5.1.tgz.

Add your repository:

$ helm repo add coolcharts s3://bucket-name/charts

Now you can use it as any other Helm chart repository. Try:

$ helm search coolcharts
NAME                       	VERSION	  DESCRIPTION
coolcharts/epicservice	    0.5.1     A Helm chart.

💡 For Helm v3, use helm search repo coolcharts

To install the chart:

$ helm install coolchart/epicservice --version "0.5.1"

Fetching also works:

$ helm fetch coolchart/epicservice --version "0.5.1"

Alternatively:

$ helm fetch s3://bucket-name/charts/epicservice-0.5.1.tgz

💡 For Helm v3, use helm pull coolchart/epicservice --version "0.5.1"

Init

To create a new repository, use init:

$ helm s3 init s3://bucket-name/charts

This command generates an empty index.yaml and uploads it to the S3 bucket under /charts key.

To work with this repo by it's name, first you need to add it using native helm command:

$ helm repo add mynewrepo s3://bucket-name/charts

Push

Now you can push your chart to this repo:

$ helm s3 push ./epicservice-0.7.2.tgz mynewrepo

When the bucket is replicated you should make the index's URLs relative so that the charts can be accessed from a replica bucket.

$ helm s3 push --relative ./epicservice-0.7.2.tgz mynewrepo

On push, both remote and local repo indexes are automatically updated (that means you don't need to run helm repo update).

Your pushed chart is available:

$ helm search mynewrepo
NAME                    VERSION	 DESCRIPTION
mynewrepo/epicservice   0.7.2    A Helm chart.

💡 For Helm v3, use helm search repo mynewrepo

Note that the plugin denies push when the chart with the same version already exists in the repository. This behavior is intentional. It is useful, for example, in CI automated pushing: if someone forgets to bump chart version - the chart would not be overwritten.

However, in some cases you want to replace existing chart version. To do so, add --force flag to a push command:

$ helm s3 push --force ./epicservice-0.7.2.tgz mynewrepo

To see other available options, use --help flag:

$ helm s3 push --help

Delete

To delete specific chart version from the repository:

$ helm s3 delete epicservice --version 0.7.2 mynewrepo

As always, both remote and local repo indexes updated automatically.

The chart is deleted from the repo:

$ helm search mynewrepo/epicservice
No results found

💡 For Helm v3, use helm search repo mynewrepo/epicservice

Reindex

If your repository somehow became inconsistent or broken, you can use reindex to recreate the index in accordance with the charts in the repository.

$ helm s3 reindex mynewrepo

When the bucket is replicated you should make the index's URLs relative so that the charts can be accessed from a replica bucket.

$ helm s3 reindex --relative mynewrepo

Uninstall

$ helm plugin remove s3

Advanced Features

ACLs

In use cases where you share a repo across multiple AWS accounts, you may want the ability to define object ACLS to allow charts to persist there permissions across accounts. To do so, add the flag --acl="ACL_POLICY". The list of ACLs can be found here:

$ helm s3 push --acl="bucket-owner-full-control" ./epicservice-0.7.2.tgz mynewrepo

You can also set the default ACL be setting the S3_ACL environment variable.

Using alternative S3-compatible vendors

The plugin assumes Amazon S3 by default. However, it can work with any S3-compatible object storage, like minio, DreamObjects and others. To configure the plugin to work alternative S3 backend, just define AWS_ENDPOINT (and optionally AWS_DISABLE_SSL):

$ export AWS_ENDPOINT=localhost:9000
$ export AWS_DISABLE_SSL=true

See these integration tests that use local minio docker container for a complete example.

Using S3 bucket ServerSide Encryption

To enable S3 SSE export environment variable AWS_S3_SSE and set it to desired type for example AES256.

S3 bucket location

The plugin will look for the bucket in the region inferred by the environment. If the bucket is in another region, the commands will fail.

This can be controlled by exporting one of HELM_S3_REGION, AWS_REGION or AWS_DEFAULT_REGION, in order of precedence.

Additional Documentation

Additional documentation is available in the docs directory. This currently includes:

Community and Related Projects

Contributing

Contributions are welcome. Please see these instructions that will help you to develop the plugin.

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].