github.com/argoproj/argo-cd@v1.8.7/util/helm/testdata/minio/README.md (about)

     1  Minio
     2  =====
     3  
     4  [Minio](https://minio.io) is a lightweight, AWS S3 compatible object storage server. It is best suited for storing unstructured data such as photos, videos, log files, backups, VM and container images. Size of an object can range from a few KBs to a maximum of 5TB. Minio server is light enough to be bundled with the application stack, similar to NodeJS, Redis and MySQL.
     5  
     6  Minio supports [distributed mode](https://docs.minio.io/docs/distributed-minio-quickstart-guide). In distributed mode, you can pool multiple drives (even on different machines) into a single object storage server.
     7  
     8  Introduction
     9  ------------
    10  
    11  This chart bootstraps Minio deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
    12  
    13  Prerequisites
    14  -------------
    15  
    16  -	Kubernetes 1.4+ with Beta APIs enabled for default standalone mode.
    17  -   Kubernetes 1.5+ with Beta APIs enabled to run Minio in [distributed mode](#distributed-minio).
    18  -	PV provisioner support in the underlying infrastructure.
    19  
    20  Installing the Chart
    21  --------------------
    22  
    23  Install this chart using:
    24  
    25  ```bash
    26  $ helm install stable/minio
    27  ```
    28  
    29  The command deploys Minio on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
    30  
    31  ### Release name
    32  
    33  An instance of a chart running in a Kubernetes cluster is called a release. Each release is identified by a unique name within the cluster. Helm automatically assigns a unique release name after installing the chart. You can also set your preferred name by:
    34  
    35  ```bash
    36  $ helm install --name my-release stable/minio
    37  ```
    38  
    39  ### Access and Secret keys
    40  
    41  By default a pre-generated access and secret key will be used. To override the default keys, pass the access and secret keys as arguments to helm install.
    42  
    43  ```bash
    44  $ helm install --set accessKey=myaccesskey,secretKey=mysecretkey \
    45      stable/minio
    46  ```
    47  
    48  ### Updating Minio configuration via Helm
    49  
    50  [ConfigMap](https://kubernetes.io/docs/user-guide/configmap/) allows injecting containers with configuration data even while a Helm release is deployed.
    51  
    52  To update your Minio server configuration while it is deployed in a release, you need to
    53  
    54  1. Check all the configurable values in the Minio chart using `helm inspect values stable/minio`.
    55  2. Override the `minio_server_config` settings in a YAML formatted file, and then pass that file like this `helm upgrade -f config.yaml stable/minio`.
    56  3. Restart the Minio server(s) for the changes to take effect.
    57  
    58  You can also check the history of upgrades to a release using `helm history my-release`. Replace `my-release` with the actual release name.
    59  
    60  Uninstalling the Chart
    61  ----------------------
    62  
    63  Assuming your release is named as `my-release`, delete it using the command:
    64  
    65  ```bash
    66  $ helm delete my-release
    67  ```
    68  
    69  The command removes all the Kubernetes components associated with the chart and deletes the release.
    70  
    71  Configuration
    72  -------------
    73  
    74  The following table lists the configurable parameters of the Minio chart and their default values.
    75  
    76  | Parameter                  | Description                         | Default                                                 |
    77  |----------------------------|-------------------------------------|---------------------------------------------------------|
    78  | `image.repository`         | Image repository                    | `minio/minio`                                           |
    79  | `image.tag`                | Minio image tag. Possible values listed [here](https://hub.docker.com/r/minio/minio/tags/).| `RELEASE.2018-07-10T01-42-11Z`|
    80  | `image.pullPolicy`         | Image pull policy                   | `IfNotPresent`                                          |
    81  | `mcImage.repository`       | Client image repository             | `minio/mc`                                              |
    82  | `mcImage.tag`              | mc image tag. Possible values listed [here](https://hub.docker.com/r/minio/mc/tags/).| `RELEASE.2018-06-09T02-18-09Z`|
    83  | `mcImage.pullPolicy`       | mc Image pull policy                | `IfNotPresent`                                          |
    84  | `ingress.enabled`          | Enables Ingress                     | `false`                                                 |
    85  | `ingress.annotations`      | Ingress annotations                 | `{}`                                                    |
    86  | `ingress.hosts`            | Ingress accepted hostnames          | `[]`                                                    |
    87  | `ingress.tls`              | Ingress TLS configuration           | `[]`                                                    |
    88  | `mode`                     | Minio server mode (`standalone` or `distributed`)| `standalone`                               |
    89  | `replicas`                 | Number of nodes (applicable only for Minio distributed mode). Should be 4 <= x <= 32 | `4`    |
    90  | `accessKey`                | Default access key (5 to 20 characters) | `AKIAIOSFODNN7EXAMPLE`                              |
    91  | `secretKey`                | Default secret key (8 to 40 characters) | `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`          |
    92  | `configPath`               | Default config file location        | `~/.minio`                                              |
    93  | `mountPath`                | Default mount location for persistent drive| `/export`                                        |
    94  | `service.type`             | Kubernetes service type             | `ClusterIP`                                             |
    95  | `service.port`             | Kubernetes port where service is exposed| `9000`                                              |
    96  | `service.annotations`      | Service annotations                 | `{}`                                                    |
    97  | `persistence.enabled`      | Use persistent volume to store data | `true`                                                  |
    98  | `persistence.size`         | Size of persistent volume claim     | `10Gi`                                                  |
    99  | `persistence.existingClaim`| Use an existing PVC to persist data | `nil`                                                   |
   100  | `persistence.storageClass` | Type of persistent volume claim     | `generic`                                               |
   101  | `persistence.accessMode`   | ReadWriteOnce or ReadOnly           | `ReadWriteOnce`                                         |
   102  | `persistence.subPath`      | Mount a sub directory of the persistent volume if set | `""`                                  |
   103  | `resources`                | CPU/Memory resource requests/limits | Memory: `256Mi`, CPU: `100m`                            |
   104  | `priorityClassName`        | Pod priority settings               | `""`                                                    |
   105  | `nodeSelector`             | Node labels for pod assignment      | `{}`                                                    |
   106  | `affinity`                 | Affinity settings for pod assignment | `{}`                                                   |
   107  | `tolerations`              | Toleration labels for pod assignment | `[]`                                                   |
   108  | `defaultBucket.enabled`    | If set to true, a bucket will be created after minio install | `false`                        |
   109  | `defaultBucket.name`       | Bucket name                         | `bucket`                                                |
   110  | `defaultBucket.policy`     | Bucket policy                       | `none`                                                  |
   111  | `defaultBucket.purge`      | Purge the bucket if already exists  | `false`                                                 |
   112  | `azuregateway.enabled`     | Use minio as an [azure gateway](https://docs.minio.io/docs/minio-gateway-for-azure)| `false`  |
   113  | `gcsgateway.enabled`       | Use minio as a [Google Cloud Storage gateway](https://docs.minio.io/docs/minio-gateway-for-gcs)| `false` |
   114  | `gcsgateway.gcsKeyJson`    | credential json file of service account key | `""` |
   115  | `gcsgateway.projectId`     | Google cloud project id             | `""` |
   116  | `nasgateway.enabled`       | Use minio as a [NAS gateway](https://docs.minio.io/docs/minio-gateway-for-nas)             | `false` |
   117  | `nasgateway.replicas`      | Number of NAS gateway instances to be run in parallel on a PV            | `4` |
   118  
   119  Some of the parameters above map to the env variables defined in the [Minio DockerHub image](https://hub.docker.com/r/minio/minio/).
   120  
   121  You can specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
   122  
   123  ```bash
   124  $ helm install --name my-release \
   125    --set persistence.size=100Gi \
   126      stable/minio
   127  ```
   128  
   129  The above command deploys Minio server with a 100Gi backing persistent volume.
   130  
   131  Alternately, you can provide a YAML file that specifies parameter values while installing the chart. For example,
   132  
   133  ```bash
   134  $ helm install --name my-release -f values.yaml stable/minio
   135  ```
   136  
   137  > **Tip**: You can use the default [values.yaml](values.yaml)
   138  
   139  Distributed Minio
   140  -----------
   141  
   142  This chart provisions a Minio server in standalone mode, by default. To provision Minio server in [distributed mode](https://docs.minio.io/docs/distributed-minio-quickstart-guide), set the `mode` field to `distributed`,
   143  
   144  ```bash
   145  $ helm install --set mode=distributed stable/minio
   146  ```
   147  
   148  This provisions Minio server in distributed mode with 4 nodes. To change the number of nodes in your distributed Minio server, set the `replicas` field,
   149  
   150  ```bash
   151  $ helm install --set mode=distributed,replicas=8 stable/minio
   152  ```
   153  
   154  This provisions Minio server in distributed mode with 8 nodes. Note that the `replicas` value should be an integer between 4 and 16 (inclusive).
   155  
   156  ### StatefulSet [limitations](https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/#limitations) applicable to distributed Minio
   157  
   158  1. StatefulSets need persistent storage, so the `persistence.enabled` flag is ignored when `mode` is set to `distributed`.
   159  2. When uninstalling a distributed Minio release, you'll need to manually delete volumes associated with the StatefulSet.
   160  
   161  NAS Gateway
   162  -----------
   163  
   164  ### Prerequisites
   165  
   166  Minio in [NAS gateway mode](https://docs.minio.io/docs/minio-gateway-for-nas) can be used to create multiple Minio instances backed by single PV in `ReadWriteMany` mode. Currently few [Kubernetes volume plugins](https://kubernetes.io/docs/user-guide/persistent-volumes/#access-modes) support `ReadWriteMany` mode. To deploy Minio NAS gateway with Helm chart you'll need to have a Persistent Volume running with one of the supported volume plugins. [This document](https://kubernetes.io/docs/user-guide/volumes/#nfs)
   167  outlines steps to create a NFS PV in Kubernetes cluster.
   168  
   169  ### Provision NAS Gateway Minio instances
   170  
   171  To provision Minio servers in [NAS gateway mode](https://docs.minio.io/docs/minio-gateway-for-nas), set the `nasgateway.enabled` field to `true`,
   172  
   173  ```bash
   174  $ helm install --set nasgateway.enabled=true stable/minio
   175  ```
   176  
   177  This provisions 4 Minio NAS gateway instances backed by single storage. To change the number of instances in your Minio deployment, set the `replicas` field,
   178  
   179  ```bash
   180  $ helm install --set nasgateway.enabled=true,nasgateway.replicas=8 stable/minio
   181  ```
   182  
   183  This provisions Minio NAS gateway with 8 instances.
   184  
   185  Persistence
   186  -----------
   187  
   188  This chart provisions a PersistentVolumeClaim and mounts corresponding persistent volume to default location `/export`. You'll need physical storage available in the Kubernetes cluster for this to work. If you'd rather use `emptyDir`, disable PersistentVolumeClaim by:
   189  
   190  ```bash
   191  $ helm install --set persistence.enabled=false stable/minio
   192  ```
   193  
   194  > *"An emptyDir volume is first created when a Pod is assigned to a Node, and exists as long as that Pod is running on that node. When a Pod is removed from a node for any reason, the data in the emptyDir is deleted forever."*
   195  
   196  Existing PersistentVolumeClaim
   197  ------------------------------
   198  
   199  If a Persistent Volume Claim already exists, specify it during installation.
   200  
   201  1. Create the PersistentVolume
   202  1. Create the PersistentVolumeClaim
   203  1. Install the chart
   204  
   205  ```bash
   206  $ helm install --set persistence.existingClaim=PVC_NAME stable/minio
   207  ```
   208  
   209  NetworkPolicy
   210  -------------
   211  
   212  To enable network policy for Minio,
   213  install [a networking plugin that implements the Kubernetes
   214  NetworkPolicy spec](https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy#before-you-begin),
   215  and set `networkPolicy.enabled` to `true`.
   216  
   217  For Kubernetes v1.5 & v1.6, you must also turn on NetworkPolicy by setting
   218  the DefaultDeny namespace annotation. Note: this will enforce policy for _all_ pods in the namespace:
   219  
   220      kubectl annotate namespace default "net.beta.kubernetes.io/network-policy={\"ingress\":{\"isolation\":\"DefaultDeny\"}}"
   221  
   222  With NetworkPolicy enabled, traffic will be limited to just port 9000.
   223  
   224  For more precise policy, set `networkPolicy.allowExternal=true`. This will
   225  only allow pods with the generated client label to connect to Minio.
   226  This label will be displayed in the output of a successful install.