# Openshift

# Introducción

**Este plugin tiene como finalidad monitorizar nodos y pods de Openshift**, mediante métricas claves referentes al CPU, memoria, status de estos y de los contenedores de un pod, que son esenciales para llevar un control y seguimiento de estos recursos.

El plugin se conecta al API REST de Openshift y monitoriza el entorno mediante las métricas anteriormente mencionadas, generando un agente para cada zona e instancia via XML que envía al servidor de pandora.

# Pre requisitos

- **Conectividad a la API de Openshift**

El plugin debe poder llegar a API de forma remota para poder extraer la información.

- **Obtención de token Bearer**

Se puede obtener con el siguiente comando de CLI, despues de haber hecho login con este:

```
./oc whoami -t
```

- **La cuenta de usuario de openshift deberá tener permisos de cluster-reader**

Los comandos de cli para añadir permisos son los siguientes (estos deben de darse desde una cuenta con privilegios)

Añadir un rol a un user :

```
oc adm policy add-role-to-user <role> <user_name>
```

Remover un rol de un user :

```
oc adm policy remove-role-from-user <role> <user_name>
```

Añadir un rol a un user para todos los proyectos:

```
oc adm policy add-cluster-role-to-user <role> <user_name>
```

Remover un rol de user para todos los proyectos:

```
oc adm policy remove-cluster-role-from-user <role> <user_name>
```

Ejemplo :

[![image-1644427009267.png](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/scaled-1680-/image-1644427009267.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/image-1644427009267.png)

**Se puede aplicar este fichero directamente para configurar los permisos necesarios**

```
oc apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
```

- **Se necesita corriendo este apiservice: v1beta1.metrics.k8s.io y el metrics server.**

```
oc get apiservice
```

- **Tiene que estar activada la opción cluster-monitoring**

Esto se puede hacer con el siguiente comando :

```
./crc config set enable-cluster-monitoring true
```

Ejemplo:

[![openshiftmonitoing.png](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/scaled-1680-/openshiftmonitoing.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/openshiftmonitoing.png)

Para poder tener habilitado se pide un minimo de 14 gb, por lo que si hemos configurado el entorno con menos, y activamos la opción cluster-monitoring deberemos añadirle más a la maquina, el mínimo son 14336 en mb.

El comando para especificar la memoria es :

```
./crc config set memory 14336
```

Ejemplo:

[![change memory.png](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/scaled-1680-/change-memory.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2022-02/change-memory.png)

# Parámetros y configuración

**Parámetros**

<table border="1" id="bkmrk---conf-ruta-al-archi"><tbody><tr><td>--conf</td><td>Ruta al archivo de configuración</td></tr></tbody></table>

**Archivo de configuración (--conf)**

```
ip               = < IP o host de Kubernetes >
port             = < Puerto del host de kubernetes >
token            = < Token Bearer de autenticación >
connection       = < Modo de conexión, normal o proxy >
proxy            = < Url de conexión >
interval         = < Intervalo en segundos para los agentes y para el analisis de métricas >
agent_group_name = < Nombre del grupo de destino para los agentes creados >
prefix           = < Prefijo para el nombre de los agentes>
transfer_mode    = < Modo de transferencia, tentacle o local >
data_dir         = < (Solo se activa si el transfer_mode es local) Ruta de destino para los XML de cada agente, por defecto "/var/spool/pandora/data_in/" >
tentacle_ip      = < IP de la máquina destino para los agentes creados >
tentacle_port    = < Puerto de tentacle, por defecto : 41121 >

deployments      = < Activar con 1 para habilitar la monitorización de deployments  >
nodes            = < Activar con 1 para habilitar la monitorización de nodes  >
pods             = < Activar con 1 para habilitar la monitorización de pods  >
```

<span style="text-decoration: underline;">Ejemplo</span>

```
ip               = 192.168.49.2
port             = 8443
token            = eyJhbGciOiJSUzI1NiIsImtpZCI6IkVpeVhfTFFzSWpmcGtjZzM0blZrZDY3YUtMbzNqTWZmcmdLZ2NKblVHbTgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50IiwisInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.aC1lPbS5kYR9Fg9hXJaPiQ8cHzjdWlaAfXdPlmPok6LRX0_OZESEhw8to4PZrz2vzt_BUbawUR0NOpHadujHIx7as4Jm8UCRHgmGseyB7mae9vRMFiD1B4EeH5L8lvucydlV2Avx1IV9SyssbypwGCH_jg7tfKz4EMz5aBfgipliRwFaRGdQMX5sjz4AknGxcb2UVOe9LFb_xC-awDEjaGvm_F0tSLxtyGPoJmsvknNmEC9hJLG_AU8Z9Ke5I5oTvEzRmUCqrKz6319p-x9aaF6yUfOFtlnQlLhIz2xkOs8DkkJ1Rk59i2MolzXGwmlGgWkgc7qCgvqXQNjDeX3ySA
connection       = normal
proxy            = http://localhost:8080
interval         = 300
agent_group_name = kubernetes
prefix           = kube.
transfer_mode    = tentacle
data_dir         = /var/spool/pandora/data_in
tentacle_ip      = 172.42.42.101
tentacle_port    = 41121

deployments      = 1
nodes            = 1
pods             = 1
```

# Ejecución manual

El formato de la ejecución del plugin es el siguiente:

```
./pandora_openshift --conf < ruta al fichero de configuración >
```

Por ejemplo:

```
./pandora_openshift --conf /usr/share/pandora_server/util/plugin/openshift.conf
```

La ejecución devolverá una salida en formato JSON con información sobre la ejecución, y generará un fichero XML para cada agente monitorizado que enviará al servidor de Pandora FMS por el método de transferencia indicado en la configuración.

Por ejemplo:

```
{"summary": {"Total agents": 84, "Nodes agents": 3, "Pods agents": 43, "Deployments agents": 37}}
```

# Discovery

Este plugin puede integrarse con el *Discovery* de Pandora FMS.

Para ello se debe cargar el paquete ".disco" que puede descargar desde la librería de Pandora FMS:

[https://pandorafms.com/library/](https://pandorafms.com/library/)

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/scaled-1680-/lQlimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/lQlimage.png)

Una vez cargado, se podrán monitorizar entornos de openshift creando tareas de *Discovery* desde la sección *Management &gt; Discovery &gt; Applications*

Para cada tarea se solicitarán los siguientes datos mínimos:

- **Openshift host :** Host de openshift.
- **Openshift port :** Puerto de openshift.
- **Openshift token:** Token de openshift.
- **Tentacle IP**: IP del servidor de Tentacle al que enviar los datos de los agentes. Normalmente este parámetro no se modificará.
- **Tentacle port**: Puerto del servidor de Tentacle al que enviar los datos. Normalmente este parámetro no se modificará.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/scaled-1680-/ikHimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/ikHimage.png)

.También se podrá ajustar la configuración de la tarea para personalizar la monitorización deseada:

- **Scan Deployments :** Si se activa monitorizará los deployments y creará un agente por cada uno de estos.
- **Scan Nodes:** Si se activa monitorizara los nodos y creará un agente por cada uno de estos.
- **Scan Pods:** Si se activa monitorizara los pods y creará un agente por cada uno de estos.<label class=""></label>

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/scaled-1680-/bazimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/bazimage.png)

Las tareas completadas con éxito tendrán un resumen de ejecución con la siguiente información:

- **Total agents** : Número total de agentes generados por la tarea.
- **Nodes agents :** Número total de agentes de nodos.
- **Pods agents :** Número total de agentes de pods.
- **Deployment agents:** Número total de agentes de aplicaciones.

# Agentes y módulos generados por el plugin

La ejecución del plugin, creara los siguientes agentes y módulos:

- **Agente global**

<table border="1" id="bkmrk-%3C-prefix.kubernetes-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>&lt; prefix.Openshift &gt;</td></tr></tbody></table>

**Modules**

<table border="1" id="bkmrk-api-status-%3C-endpoin" style="border-collapse: collapse; width: 100%; height: 208.578px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Api status</td></tr><tr><td>APIServices count</td></tr><tr><td>APIServices Status</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">&lt; Endpoint healthz&gt;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Services count  
</td></tr><tr><td>List Services  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Namespaces count  
</td></tr><tr><td>List Namespaces  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">&lt; Component status healthz &gt;</td></tr><tr><td>Replication controllers count  
</td></tr><tr><td>Replication controllers status  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Deployments</td></tr></tbody></table>

- **Un agente por cada deployment**

<table border="1" id="bkmrk-%3C-prefix.-nombre-dep" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 100%;"></col></colgroup><tbody><tr><td>&lt; prefix. Nombre deployment &gt;</td></tr></tbody></table>

**Modules**

<table border="1" id="bkmrk-replicas-updated-rep" style="border-collapse: collapse; width: 100%; height: 208.578px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Replicas</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Updated replicas</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Ready replicas</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Avalaible replicas</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Unavalaible replicas</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Available</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Progressing</td></tr></tbody></table>

- **Un agente por cada Nodo**

<table border="1" id="bkmrk-%3C-prefix.-nombre-nod" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 100%;"></col></colgroup><tbody><tr><td>&lt; prefix. Nombre nodo &gt;</td></tr></tbody></table>

**Modules**

<table border="1" id="bkmrk-pods-pods-%28%25%29-cpu-%28c" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>Pods</td></tr><tr><td>Pods (%)</td></tr><tr><td>CPU (cores)</td></tr><tr><td>CPU (%)</td></tr><tr><td>Memory (bytes)</td></tr><tr><td>Memory (%)</td></tr><tr><td>Condition &lt; condition &gt; status</td></tr></tbody></table>

- **Un agente por cada pod**

<table border="1" id="bkmrk-%3C-prefix.-nombre-pod" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>&lt; prefix. Nombre pod &gt;</td></tr></tbody></table>

**Modules**

<table border="1" id="bkmrk-pod-status-%3Cconditio" style="border-collapse: collapse; width: 100%; height: 208.578px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Pod status</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">&lt;Condition status&gt;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Containers</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Container &lt;nombre contenedor&gt; CPU (cores)</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Container &lt;nombre contenedor&gt; CPU (%)</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Container &lt;nombre contenedor&gt; Memory (bytes)</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Container &lt;nombre contenedor&gt; Memory (%)</td></tr></tbody></table>