.. _minio-k8s-deploy-operator-helm:
=========================
Deploy Operator With Helm
=========================
.. default-domain:: minio
.. contents:: Table of Contents
   :local:
   :depth: 2
Overview
--------
Helm is a tool for automating the deployment of applications to Kubernetes clusters.
A `Helm chart `__ is a set of YAML files, templates, and other files that define the deployment details.
The following procedure uses a Helm Chart to install the :ref:`MinIO Kubernetes Operator ` to a Kubernetes cluster.
Prerequisites
-------------
See the :ref:`Operator Prerequisites ` for a baseline of requirements.
Helm installations have the following additional requirements:
* `Helm `__ (Use the Version appropriate for your Kubernetes API version)
* `yq `__ 
For more about Operator installation requirements, including supported Kubernetes versions and TLS certificates, see the :ref:`Operator deployment prerequisites `.
This procedure assumes familiarity with the referenced Kubernetes concepts and utilities.
While this documentation may provide guidance for configuring or deploying Kubernetes-related resources on a best-effort basis, it is not a replacement for the official :kube-docs:`Kubernetes Documentation <>`.
.. _minio-k8s-deploy-operator-helm-repo:
Install the MinIO Operator using Helm Charts
--------------------------------------------
The following procedure installs the Operator using the MinIO Operator Chart Repository.
This method supports a simplified installation path compared to the :ref:`local chart installation `.
You can modify the Operator deployment after installation.
.. important::
   If you use Helm charts to install the Operator, you must use Helm to manage that installation.
   Do not use ``kubectl krew``, Kustomize, or similar methods to update or manage the MinIO Operator installation.
#. Add the MinIO Operator Repo to Helm
   MinIO maintains a Helm-compatible repository at https://operator.min.io.
   Add this repository to Helm:
   .. code-block:: shell
      :class: copyable
      helm repo add minio-operator https://operator.min.io
   You can validate the repo contents using ``helm search``:
   .. code-block:: shell
      :class: copyable
      helm search repo minio-operator
   The response should resemble the following:
   .. code-block:: shell
      :class: copyable
      NAME                            CHART VERSION   APP VERSION     DESCRIPTION                    
      minio-operator/minio-operator   4.3.7           v4.3.7          A Helm chart for MinIO Operator
      minio-operator/operator         6.0.1           v6.0.1          A Helm chart for MinIO Operator
      minio-operator/tenant           6.0.1           v6.0.1          A Helm chart for MinIO Operator
   The ``minio-operator/minio-operator`` is a legacy chart and should **not** be installed under normal circumstances.
#. Install the Operator
   Run the ``helm install`` command to install the Operator.
   The following command specifies and creates a dedicated namespace ``minio-operator`` for installation.
   MinIO strongly recommends using a dedicated namespace for the Operator.
   .. code-block:: shell
      :class: copyable
      helm install \
        --namespace minio-operator \
        --create-namespace \
        operator minio-operator/operator
      
#. Verify the Operator installation
   Check the contents of the specified namespace (``minio-operator``) to ensure all pods and services have started successfully.
   .. code-block:: shell
      :class: copyable
      kubectl get all -n minio-operator
   The response should resemble the following:
   .. code-block:: shell
      NAME                                  READY   STATUS    RESTARTS   AGE
      pod/minio-operator-699f797b8b-th5bk   1/1     Running   0          25h
      pod/minio-operator-699f797b8b-nkrn9   1/1     Running   0          25h
      NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
      service/operator   ClusterIP   10.43.44.204            4221/TCP            25h
      service/sts        ClusterIP   10.43.70.4              4223/TCP            25h
      NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/minio-operator   2/2     2            2           25h
      NAME                                        DESIRED   CURRENT   READY   AGE
      replicaset.apps/minio-operator-79f7bfc48    2         2         2       123m
You can now :ref:`deploy a tenant using Helm Charts `.
.. _minio-k8s-deploy-operator-helm-local:
Install the MinIO Operator using Local Helm Charts
--------------------------------------------------
The following procedure installs the Operator using a local copy of the Helm Charts.
This method may support easier pre-configuration of the Operator compared to the :ref:`repo-based installation `
#. Download the Helm charts
   On your local host, download the Operator Helm charts to a convenient directory:
   .. code-block:: shell
      :class: copyable
      :substitutions:
      curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-|operator-version-stable|.tgz
#. (Optional) Modify the ``values.yaml``
   The chart contains a ``values.yaml`` file you can customize to suit your needs.
   For details on the options available in the MinIO Operator ``values.yaml``, see :ref:`minio-operator-chart-values`.
   For example, you can change the number of replicas for ``operators.replicaCount`` to increase or decrease pod availability in the deployment.
   See :ref:`minio-operator-chart-values` for more complete documentation on the Operator Helm Chart and Values.
   For more about customizations, see `Helm Charts `__.
#. Install the Helm Chart
   Use the ``helm install`` command to install the chart.
   The following command assumes the Operator chart is saved to ``./operator`` relative to the working directory.
   .. code-block:: shell
      :class: copyable
      helm install \
      --namespace minio-operator \
      --create-namespace \
      minio-operator ./operator
#. To verify the installation, run the following command:
   .. code-block:: shell
      :class: copyable
      kubectl get all --namespace minio-operator
   If you initialized the Operator with a custom namespace, replace
   ``minio-operator`` with that namespace.
   The output resembles the following:
   .. code-block:: shell
      NAME                                  READY   STATUS    RESTARTS   AGE
      pod/minio-operator-7976b4df5b-rsskl   1/1     Running   0          81m
      pod/minio-operator-7976b4df5b-x622g   1/1     Running   0          81m
      NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
      service/operator   ClusterIP   10.110.113.146           4222/TCP,4233/TCP   81m
      NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/minio-operator   2/2     2            2           81m
      NAME                                        DESIRED   CURRENT   READY   AGE
      replicaset.apps/minio-operator-7976b4df5b   1         1         1       81m
You can now :ref:`deploy a tenant using Helm Charts `.