Introducing a Custom Operator for Unified Management of Kubernetes Tools
Tags: kubernetes, devops, opensource
Published: 2024-05-05 08:15:00

## Summary

I developed a new custom operator, the Kubernetes Operator Manager (KOM), to simplify the management of Helm packages and other resources in Kubernetes environments and to enable declarative management.
This operator centralizes the deployment and management of various tools, enhancing the efficiency of version control and state monitoring.

https://github.com/kkb0318/kom

## Introduction

The Kubernetes ecosystem includes a wide range of tools to meet various workloads and requirements.
These tools are commonly deployed using commands like `helm install` or `kubectl apply`.
For example, when using multiple tools such as `prometheus` and `cert-manager` in a Kubernetes cluster, you need to execute specific commands for each tool, as follows:

Installation example for [cert-manager](https://cert-manager.io/docs/installation/helm/):

```bash
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.14.5 \
--set installCRDs=true
```

Installation example for [prometheus](https://github.com/prometheus-community/helm-charts):

```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/prometheus
```

However, this method has several issues:

- It increases operational load as you need to execute commands each time a new tool is introduced.
- The installation process is not declarative, making version control and state management challenging.

These issues can lead to confusion, especially when managing multiple Helm packages.
To handle these problems, we developed the Kubernetes Operator Manager (KOM). With KOM, you can manage tool versions declaratively.
This makes it easy to keep track of current versions and upgrade as necessary, leading to more efficient and effective management of Kubernetes clusters.

## How KOM Works

KOM operates within kubernetes environments where [Flux](https://fluxcd.io/) or [ArgoCD](https://argoproj.github.io/cd/) is installed.

Managing packages with Flux or ArgoCD requires creating various Custom Resources (CRs).

**Flux:**  
Flux uses CRDs such as `HelmRelease` and `HelmRepository` to manage Helm packages. For deploying resources from a Git repository, `GitRepository` and `Kustomization` CRDs are used.

**ArgoCD**
In the case of ArgoCD, resources primarily used include `Application` CRDs and `Secret`.

KOM centrally manages these resources, enabling more straightforward and efficient operations. The following diagram outlines KOM's behavior, showing how it manages Flux or ArgoCD's CRs required to deploy Helm and Git resources.


![kom architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zw5sjryrbmfsjy49tody.png)

By leveraging the functionalities provided by Flux and ArgoCD, KOM functions as a highly lightweight operator.

## How to Use KOM

Installation procedures and basic usage instructions for KOM are detailed in the [README](https://github.com/kkb0318/kom), but here we present a more specific usage example.

If you want to install two Helm packages, `cert-manager` and `prometheus`, you can configure KOM as follows. This configuration allows you to specify argo or flux depending on the environment.

```yaml
apiVersion: kom.kkb0318.github.io/v1alpha1
kind: OperatorManager
metadata:
  name: kom
  namespace: kom-system
spec:
  tool: argo # Set to "flux" if using Flux
  cleanup: true
  resource:
    helm:
      - name: jetstack
        url: https://charts.jetstack.io
        charts:
          - name: cert-manager
            version: v1.14.4
            values:
              installCRDs: true
      - name: prometheus-community
        url: https://prometheus-community.github.io/helm-charts
        charts:
          - name: prometheus
            version: 25.20.1
```

This configuration file uses the specified Helm charts to deploy the necessary packages to your Kubernetes cluster.
By changing the tool setting, you can choose to use either Flux or ArgoCD.
Additionally, setting the cleanup flag automates resource deletion, simplifying environment maintenance.

## Conclusion

I developed KOM to manage packages in Kubernetes environments simply and declaratively.

I hope this article has helped you understand KOM's concept, structure, and usage. KOM is still under development, and its API may change, so please refer to the Git repository for the latest information.