# 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 ``` Remover un rol de un user : ``` oc adm policy remove-role-from-user ``` Añadir un rol a un user para todos los proyectos: ``` oc adm policy add-cluster-role-to-user ``` Remover un rol de user para todos los proyectos: ``` oc adm policy remove-cluster-role-from-user ``` 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**
--confRuta al archivo de configuración
**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 > ``` Ejemplo ``` 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 > Discovery > 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. [![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**
< prefix.Openshift >
**Modules**
Api status
APIServices count
APIServices Status
< Endpoint healthz>
Services count
List Services
Namespaces count
List Namespaces
< Component status healthz >
Replication controllers count
Replication controllers status
Deployments
- **Un agente por cada deployment**
< prefix. Nombre deployment >
**Modules**
Replicas
Updated replicas
Ready replicas
Avalaible replicas
Unavalaible replicas
Available
Progressing
- **Un agente por cada Nodo**
< prefix. Nombre nodo >
**Modules**
Pods
Pods (%)
CPU (cores)
CPU (%)
Memory (bytes)
Memory (%)
Condition < condition > status
- **Un agente por cada pod**
< prefix. Nombre pod >
**Modules**
Pod status
<Condition status>
Containers
Container <nombre contenedor> CPU (cores)
Container <nombre contenedor> CPU (%)
Container <nombre contenedor> Memory (bytes)
Container <nombre contenedor> Memory (%)