diff --git a/source/includes/k8s/deploy-operator.rst b/source/includes/k8s/deploy-operator.rst index 1f363fe1..8498f187 100644 --- a/source/includes/k8s/deploy-operator.rst +++ b/source/includes/k8s/deploy-operator.rst @@ -172,4 +172,5 @@ To install Operator using a Helm chart, see :ref:`Deploy Operator with Helm ` file, you can use the ``--set`` operation for any single key-value. + If you need to override values in the default :ref:`values ` file, you can use the ``--set`` operation for any single key-value. Alternatively, specify your own ``values.yaml`` using the ``--f`` parameter to override multiple values at once: .. code-block:: shell diff --git a/source/operations/install-deploy-manage/deploy-operator-helm.rst b/source/operations/install-deploy-manage/deploy-operator-helm.rst index 2b1f7ac3..e0a6c304 100644 --- a/source/operations/install-deploy-manage/deploy-operator-helm.rst +++ b/source/operations/install-deploy-manage/deploy-operator-helm.rst @@ -45,8 +45,8 @@ You can modify the Operator deployment after installation. .. important:: - Do not use ``kubectl krew`` or similar methods to update or manage the MinIO Operator installation. 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 @@ -120,10 +120,13 @@ You can modify the Operator deployment after installation. replicaset.apps/console-68d955874d 1 1 1 25h replicaset.apps/minio-operator-699f797b8b 2 2 2 25h -#. (Optional) Enable NodePort Access to the Console +#. *(Optional)* Enable NodePort Access to the Console + + The Operator Console service does not automatically bind or expose itself for external access on the Kubernetes cluster. + You must instead configure a network control plane component, such as a load balancer or ingress, to grant that external access. You can enable :kube-docs:`Node Port ` access to the ``service/console`` service to allow simplified access to the MinIO Operator. - You can skip this step if you intend to configure the Operator Console service to use a Kubernetes Load Balancer, ingress, or similar control plane component that enables external access. + You should skip this step if you intend to configure the Operator Console service to use a Kubernetes Load Balancer, ingress, or similar control plane component that enables external access. Edit the ``service/console`` and set the ``spec.ports[0].nodePort`` and ``spec.type`` fields as follows: diff --git a/source/operations/install-deploy-manage/deploy-operator-kustomize.rst b/source/operations/install-deploy-manage/deploy-operator-kustomize.rst new file mode 100644 index 00000000..2bd4c636 --- /dev/null +++ b/source/operations/install-deploy-manage/deploy-operator-kustomize.rst @@ -0,0 +1,226 @@ +.. _minio-k8s-deploy-operator-kustomize: + +============================== +Deploy Operator With Kustomize +============================== + +.. default-domain:: minio + +.. contents:: Table of Contents + :local: + :depth: 2 + + +Overview +-------- + +`Kustomize `__ is a YAML-based templating tool that allows you to define Kubernetes resources in a declarative and repeatable fashion. +Kustomize is included with the :kube-docs:`kubectl ` command line tool. + +The `default MinIO Operator Kustomize template `__ provides a starting point for customizing configurations for your local environment. +You can modify the default Kustomization file or apply your own `patches `__ to customize the Operator deployment for your Kubernetes cluster. + + +Prerequisites +------------- + +Installing Operator with Kustomize requires the following prerequisites: + +* An existing Kubernetes cluster, v1.21 or later. +* A local ``kubectl`` installation with the same version as the cluster. +* Access to run ``kubectl`` commands on the cluster from your local host. + +For more about Operator installation requirements, including 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-kustomize-repo: + +Install the MinIO Operator using Kustomize +------------------------------------------ + +The following procedure uses ``kubectl -k`` to install the Operator from the MinIO Operator GitHub repository. +``kubectl -k`` and ``kubectl --kustomize`` are aliases that perform the same command. + +.. important:: + + If you use Kustomize to install the Operator, you must use Kustomize to manage or update that installation. + Do not use ``kubectl krew``, a Helm chart, or similar methods to manage or update the MinIO Operator installation. + +#. Install the latest version of Operator + + .. code-block:: shell + :class: copyable + :substitutions: + + kubectl apply -k github.com/minio/operator\?ref=v|operator-version-stable| + + The output resembles the following: + + .. code-block:: shell + + namespace/minio-operator created + customresourcedefinition.apiextensions.k8s.io/miniojobs.job.min.io created + customresourcedefinition.apiextensions.k8s.io/policybindings.sts.min.io created + customresourcedefinition.apiextensions.k8s.io/tenants.minio.min.io created + serviceaccount/console-sa created + serviceaccount/minio-operator created + clusterrole.rbac.authorization.k8s.io/console-sa-role created + clusterrole.rbac.authorization.k8s.io/minio-operator-role created + clusterrolebinding.rbac.authorization.k8s.io/console-sa-binding created + clusterrolebinding.rbac.authorization.k8s.io/minio-operator-binding created + configmap/console-env created + secret/console-sa-secret created + service/console created + service/operator created + service/sts created + deployment.apps/console created + deployment.apps/minio-operator created + +#. Verify the Operator pods are running: + + .. code-block:: shell + :class: copyable + + kubectl get pods -n minio-operator + + The output resembles the following: + + .. code-block:: shell + + NAME READY STATUS RESTARTS AGE + console-6b6cf8946c-9cj25 1/1 Running 0 99s + minio-operator-69fd675557-lsrqg 1/1 Running 0 99s + + In this example, the ``minio-operator`` pod is MinIO Operator and the ``console`` pod is the Operator Console. + + You can modify your Operator deplyoment by applying kubectl patches. + You can find examples for common configurations in the `Operator GitHub repository `__. + +#. *(Optional)* Configure access to the Operator Console service + + The Operator Console service does not automatically bind or expose itself for external access on the Kubernetes cluster. + You must instead configure a network control plane component, such as a load balancer or ingress, to grant that external access. + + For testing purposes or short-term access, expose the Operator Console service through a NodePort using the following patch: + + .. code-block:: shell + :class: copyable + + kubectl patch service -n minio-operator console -p ' + { + "spec": { + "ports": [ + { + "name": "http", + "port": 9090, + "protocol": "TCP", + "targetPort": 9090, + "nodePort": 30090 + }, + { + "name": "https", + "port": 9443, + "protocol": "TCP", + "targetPort": 9443, + "nodePort": 30433 + } + ], + "type": "NodePort" + } + }' + + You can now access the service through port ``30433`` on any of your Kubernetes worker nodes. + +#. 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/console-68d955874d-vxlzm 1/1 Running 0 25h + 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/console ClusterIP 10.43.195.224 9090/TCP,9443/TCP 25h + 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/console 1/1 1 1 25h + deployment.apps/minio-operator 2/2 2 2 25h + + NAME DESIRED CURRENT READY AGE + replicaset.apps/console-68d955874d 1 1 1 25h + replicaset.apps/minio-operator-699f797b8b 2 2 2 25h + + +#. Retrieve the Operator Console JWT for login + + .. code-block:: shell + :class: copyable + + kubectl apply -f - <`.