> For the complete documentation index, see [llms.txt](https://docs.seldon.ai/seldon-enterprise-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.seldon.ai/seldon-enterprise-platform/production-environment/minio.md).

# Object Storage

## Installing MinIO

1. Install MinIO in the namespace `minio-system` with the user as `admin@seldon.io`. Ensure to replace `<password>` with a password of your choice in the following commands:

```bash
MINIOUSER=<admin@seldon.io>
MINIOPASSWORD=<password>

kubectl create ns minio-system
helm repo add minio https://helm.min.io/
helm upgrade --install minio minio/minio \
    --set accessKey=${MINIOUSER} \
    --set secretKey=${MINIOPASSWORD} \
    --namespace minio-system
```

2. Expose MinIO, using the Istio ingress controller. Create a file named `minio-vs.yaml`, with the following contents:

```yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: minio
  namespace: minio-system
spec:
  gateways:
    - istio-system/seldon-gateway
  hosts:
    - '*'
  http:
    - match:
        - uri:
            prefix: /minio/
      route:
        - destination:
            host: minio
            port:
              number: 9000
```

3. Apply the configuration using:`kubectl apply -f minio-vs.yaml`
4. Access MinIO.

{% tabs %}
{% tab title="Port forwarding" %}

1. Get the Pod that is running MinIO in the cluster and save it as `$MINIO_POD_NAME.`

```
export MINIO_POD_NAME=$(kubectl get pods --namespace minio-system -l "app.kubernetes.io/name=minio,app.kubernetes.io/instance=minio" -o jsonpath="{.items[0].metadata.name}")
```

2. You can use port-forwarding to access your application locally.

```
kubectl port-forward $MINIO_POD_NAME 9000:9000 --namespace minio-system
```

3. Open your browser and navigate to `http://127.0.0.1:9000/minio/` to access MinIO.
   {% endtab %}

{% tab title="Static IP address" %}

1. Find the IP address of the Seldon Enterprise Platform instance running with Istio:

```
ISTIO_INGRESS=$(kubectl get svc -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
ISTIO_INGRESS+=$(kubectl get svc -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

echo "MinIO: http://$ISTIO_INGRESS/minio/"

```

2. Open your browser and navigate to `http://$ISTIO_INGRESS/minio/` to access Seldon Enterprise Platform. Where `$ISTIO_INGRESS` is the IP address of Seldon Enterprise Platform.
   {% endtab %}
   {% endtabs %}

## Per Namespace Setup

Access to MinIO depends on the [storage initializer](/seldon-enterprise-platform/operations/storage-initializers.md). This needs to be configured per-namespace for batch jobs. The secret suggested there may also be used for models.

## Additional Resources

* [MinIO Object Storage for Kubernetes](https://min.io/docs/minio/kubernetes/upstream/index.html)
