# Kubernetes Enterprise plugin

# Introducción

<span style="font-weight: 400;">Este plugin permite obtener datos de un entorno de Kubernetes, generando agentes para cada uno de sus elementos y monitorizando estadísticas. </span>

<span style="font-weight: 400;">La información es obtenida vía web a través del API de Kubernetes, por lo que no es necesario instalar ningún software adicional para su funcionamiento, aunque para la obtención de los datos de uso de CPU y memoria de los contenedores y los nodos será necesario instalar el addon “metrics-server” en el entorno de Kubernetes.</span>

# Matriz de compatibilidad

<span style="font-weight: 400;">Desarrollado contra:</span>

- <span style="font-weight: 400;">Kubernetes v1.14.3.</span>
- <span style="font-weight: 400;">Metrics-server 1.8+.</span>

# Prerequisitos

<span style="font-weight: 400;">Se requiere conexión con el servicio Tentacle asociado a su servidor de Pandora FMS.</span>

<span style="font-weight: 400;">Se necesitarán las credenciales de acceso o un token de autenticación al API de Kubernetes de un usuario con permisos suficientes para consultar el API.</span>

<span style="font-weight: 400;">Opcionalmente, si se quieren obtener los datos de uso de CPU y memoria de contenedores y nodos se debe instalar el addon “metrics-server” en el entorno de Kubernetes.</span>

# Asignación de permisos para el API

<span style="font-weight: 400;">A continuación se describen los pasos a seguir para crear un usuario con los permisos suficientes para obtener los datos de la monitorización.</span>

1. <span style="font-weight: 400;">Creación de un “</span>*<span style="font-weight: 400;">Cluster role</span>*<span style="font-weight: 400;">” de lectura llamado “</span>*<span style="font-weight: 400;">api-read-only</span>*<span style="font-weight: 400;">”: Se creará un rol que conceda los permisos “</span>*<span style="font-weight: 400;">get</span>*<span style="font-weight: 400;">”, “</span>*<span style="font-weight: 400;">list</span>*<span style="font-weight: 400;">” y “</span>*<span style="font-weight: 400;">watch</span>*<span style="font-weight: 400;">” de todos los recursos de Kubernetes.</span>

```
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
  name: api-read-only
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - get
  - list
  - watch
- nonResourceURLs:
  - '*'
  verbs:
  - get
  - list
  - watch
EOF

```

<span style="font-weight: 400;">2. Creación de un “</span>*<span style="font-weight: 400;">Cluster role binding</span>*<span style="font-weight: 400;">” llamado “</span>*<span style="font-weight: 400;">bind-api-read-only</span>*<span style="font-weight: 400;">”: Se vinculará el rol creado anteriormente a una “</span>*<span style="font-weight: 400;">service account</span>*<span style="font-weight: 400;">” ya existente.</span>

```
kubectl create clusterrolebinding bind-api-read-only \
  --clusterrole=api-read-only \
  --serviceaccount=namespace:user
```

# Instalación de metrics-server

<span style="font-weight: 400;">Para instalar el addon de “</span>*<span style="font-weight: 400;">metrics-server</span>*<span style="font-weight: 400;">”, será necesario descargarlo en el entorno de Kubernetes. Se puede obtener de su proyecto de github:</span>

[<span style="font-weight: 400;">https://github.com/kubernetes-incubator/metrics-server</span>](https://github.com/kubernetes-incubator/metrics-server)

<span style="font-weight: 400;">Una vez descargado solo se tiene que desplegar mediante el comando “</span>*<span style="font-weight: 400;">kubectl</span>*<span style="font-weight: 400;">”:</span>

```
kubectl apply -f metrics-server/deploy/1.8+/
```

<span style="font-weight: 400;">Se puede verificar que el despliegue se haya realizado con éxito si al lanzar el siguiente comando el estado de su API figura como “</span>*<span style="font-weight: 400;">true</span>*<span style="font-weight: 400;">”:</span>

```YAML
$ kubectl get apiservices | grep metrics-server

v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        1m
```

<span style="font-weight: 400;">Si el despliegue tiene éxito, el API de “</span>*<span style="font-weight: 400;">metrics-server</span>*<span style="font-weight: 400;">” debería quedar accesible:</span>

```
$ kubectl get --raw "/apis/metrics.k8s.io/v1beta1/"

{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"metrics.k8s.io/v1beta1","resources":[{"name":"nodes","singularName":"","namespaced":false,"kind":"NodeMetrics","verbs":["get","list"]},{"name":"pods","singularName":"","namespaced":true,"kind":"PodMetrics","verbs":["get","list"]}]}
```

<span style="font-weight: 400;">Además, pasados algunos segundos, se deberían poder obtener datos de uso de CPU y memoria de contenedores y nodos:</span>

```
$ kubectl top node

NAME           CPU(cores)   CPU%    MEMORY(bytes)    MEMORY%   

kube             93m               4%         968Mi                      56%




$ kubectl top pod

NAME        CPU(cores)        MEMORY(bytes)   

pod1          0m                     3Mi             

pod2          0m                     3Mi             

pod3          0m                     2Mi             

pod4          0m                     3Mi             

pod5          0m                     1Mi
```

# Configuración

<span style="font-weight: 400;">El fichero de configuración del plugin “</span>*<span style="font-weight: 400;">pandora\_kubernetes</span>*<span style="font-weight: 400;">” se divide en bloques (todos los parámetros de configuración se indicarán sin comillas aunque tengan espacios en blanco):</span>

**Configuraciones de acceso al API**

```
## API connection parameters

api_ip=192.168.80.145

api_port=8443

ssl=1

## HTTP bearer authentication parameters

auth_method=bearer

auth_token=auth-token

## HTTP basic authentication parameters

#auth_method=basic

#auth_user=user

#auth_pass=pass
```

**api\_ip**

<span style="font-weight: 400;">Dirección IP al servicio del API de Kubernetes.</span>

**port**

<span style="font-weight: 400;">Puerto a la escucha del servicio del API de Kubernetes.</span>

**ssl**

<span style="font-weight: 400;">Indica si la conexión al API es por HTTPS o no (1→ HTTPS, 0 → HTTP).</span>

**auth\_method**

<span style="font-weight: 400;">Mecanismo de autenticación a utilizar. Los valores posibles son “</span>*<span style="font-weight: 400;">bearer</span>*<span style="font-weight: 400;">” y “</span>*<span style="font-weight: 400;">basic</span>*<span style="font-weight: 400;">”.</span>

**auth\_token**

<span style="font-weight: 400;">Si “</span>*<span style="font-weight: 400;">auth\_method=bearer</span>*<span style="font-weight: 400;">”, indica el token de autenticación del usuario con acceso al API. Este token se puede obtener siguiendo estos pasos:</span>

<span style="font-weight: 400;">  
1\. Obtención del “*secret name*” del usuario:</span>

```
$ kubectl get serviceaccounts user -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2019-06-19T10:11:48Z"
  name: user
  namespace: namespace
  resourceVersion: "327"
  selfLink: /api/v1/namespaces/namespace/serviceaccounts/user
  uid: a60f3652-927a-11e9-b423-ae1361a56794
secrets:
- name: secret_name

```

<span style="font-weight: 400;">2.Obtención del “</span>*<span style="font-weight: 400;">token</span>*<span style="font-weight: 400;">” del “</span>*<span style="font-weight: 400;">secret name</span>*<span style="font-weight: 400;">”:</span>

```
$ kubectl describe secret secret_name
Name:         secret-name
Namespace:    namespace
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: a60f3652-927a-11e9-b423-ae1361a56794
 
Type:  kubernetes.io/service-account-token
 
Data
====
token:      auth-token
ca.crt:     1066 bytes
namespace:  7 bytes

```

**auth\_user**

<span style="font-weight: 400;">Si “</span>*<span style="font-weight: 400;">auth\_method=basic</span>*<span style="font-weight: 400;">”, indica el usuario con acceso al API.</span>

**auth\_pass**

<span style="font-weight: 400;">Si “</span>*<span style="font-weight: 400;">auth\_method=basic</span>*<span style="font-weight: 400;">”, indica la contraseña del usuario con acceso al API.</span>

# Configuraciones de los agentes generados

```
## Agents parameters
interval=300
group=Servers
#prefix=KUBE-

```

**interval**

<span style="font-weight: 400;">Intervalo de monitorización en segundos de los agentes generados. Permitirá definir cuándo pasarán los módulos a estado desconocido (por defecto, 2 veces el intervalo definido sin recibir datos).</span>

**group**

<span style="font-weight: 400;">Grupo al que se asignarán los agentes generados. Este grupo se tendrá en cuenta solo si el parámetro “</span>*<span style="font-weight: 400;">autocreate\_group</span>*<span style="font-weight: 400;">” del servidor de Pandora no se ha definido correctamente.</span>

**prefix**

<span style="font-weight: 400;">Permite incluir una cadena de texto delante de los nombres de los agentes generados con el objetivo de identificar la ejecución de la que surgen (en el caso de tener varias ejecuciones del plugin configuradas).</span>

**Agent mode**

```

## Agent mode for deployments and pods
## 1 = learning mode
## 0 = normal mode
## 2 = autodisable mode (default value)

agent_mode=2

```

**normal mode**

Para no deshabilitar los elementos "deployments" y "pods"

**autodisable mode**

Para deshabilitar los elementos "deployments" y "pods" (default)

# Configuraciones de transferencia de los ficheros XML

```
## XML local transfer parameters
tmp=/tmp
transfer_mode=local
local_folder=/var/spool/pandora/data_in

## XML remote transfer parameters
#tmp=/tmp
#transfer_mode=tentacle
#tentacle_ip=127.0.0.1
#tentacle_port=41121

```

**tmp**

<span style="font-weight: 400;">Directorio temporal en el que se generarán los ficheros XML de los agentes generados antes de su transferencia al servidor de Pandora FMS.</span>

**transfer\_mode**

<span style="font-weight: 400;">Método de transferencia de ficheros que se utilizará. Si no se establece como “</span>*<span style="font-weight: 400;">tentacle</span>*<span style="font-weight: 400;">” se considerará que el método de transferencia es “</span>*<span style="font-weight: 400;">local</span>*<span style="font-weight: 400;">” (copiando los ficheros XML del directorio temporal a uno definido).</span>

**local\_folder**

<span style="font-weight: 400;">Directorio al que se copiarán los ficheros XML si el método de transferencia no se establece como “</span>*<span style="font-weight: 400;">tentacle</span>*<span style="font-weight: 400;">”.</span>

**tentacle\_ip**

<span style="font-weight: 400;">Dirección IP al que se enviarán los ficheros XML si el método de transferencia se establece como “</span>*<span style="font-weight: 400;">tentacle</span>*<span style="font-weight: 400;">”.</span>

**tentacle\_port**

<span style="font-weight: 400;">Puerto al que conectarse al servidor de Tentacle indicado en el parámetro “</span>*<span style="font-weight: 400;">tentacle\_ip</span>*<span style="font-weight: 400;">”.</span>

**tentacle\_opts**

<span style="font-weight: 400;">Opciones adicionales para la transferencia de ficheros al servidor de Tentacle indicado.</span>

# Configuraciones adicionales

```
## Disable monitoring
get_healthz=1
get_namespaces=1
get_services=1
get_components=1
get_pods=1
get_nodes=1
get_deployments=1
get_metrics=1

## Additional Kubernetes metrics
# Example:
# Apiserver request latencies bucket=apiserver_request_latencies_bucket{component="apiserver",group="scheduling.k8s.io",resource="priorityclasses",scope="cluster",subresource="",verb="WATCH",version="v1",le="125000"}

## Extra parameters
#debug=0

```

**get\_healthz**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “/</span>*<span style="font-weight: 400;">healthz</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_namespaces**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/api/v1/namespaces</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_services**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/api/v1/services</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_components**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/api/v1/componentstatuses</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_pods**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/api/v1/pods</span>*<span style="font-weight: 400;">” y del API “</span>*<span style="font-weight: 400;">/apis/metrics.k8s.io/v1beta1/pods</span>*<span style="font-weight: 400;">” (si se ha instalado el addon “</span>*<span style="font-weight: 400;">metrics-server</span>*<span style="font-weight: 400;">”). Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_nodes**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/api/v1/nodes</span>*<span style="font-weight: 400;">” y del API “</span>*<span style="font-weight: 400;">/apis/metrics.k8s.io/v1beta1/nodes</span>*<span style="font-weight: 400;">” (si se ha instalado el addon “</span>*<span style="font-weight: 400;">metrics-server</span>*<span style="font-weight: 400;">”). Su valor por defecto si no se especifica es “1” (habilitado).</span>

**get\_deployments**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/apis/extensions/v1beta1/deployments</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

**discard\_agents**

<span style="font-weight: 400;">Lista de agentes (separados por comas) que se quieran descartar de la monitorización del plugin. Deben ser los nombres de los agentes sin el prefijo indicado.</span>

**get\_metrics**

<span style="font-weight: 400;">Si se establece a “0” se dejarán de obtener los datos de monitorización del API “</span>*<span style="font-weight: 400;">/metrics</span>*<span style="font-weight: 400;">”. Su valor por defecto si no se especifica es “1” (habilitado).</span>

<span style="font-weight: 400;">Estas métricas se deben especificar en el fichero de configuración con el formato:</span>

**nombre del modulo=metrica**

<span style="font-weight: 400;">Por ejemplo, si se indica en el fichero de configuración:</span>

```
Apiserver request latencies bucket=apiserver_request_latencies_bucket{component="apiserver",group="scheduling.k8s.io",resource="priorityclasses",scope="cluster",subresource="",verb="WATCH",version="v1",le="125000"}
```

<span style="font-weight: 400;">Se generará un módulo llamado:</span>

*<span style="font-weight: 400;">Apiserver request latencies bucket</span>*

<span style="font-weight: 400;">con el valor de la métrica:</span>

*<span style="font-weight: 400;">apiserver\_request\_latencies\_bucket{component="apiserver",group="scheduling.k8s.io",resource="priorityclasses",scope="cluster",subresource="",verb="WATCH",version="v1",le="125000"}</span>*

**debug**

<span style="font-weight: 400;">Si se establece a “1” se mostrará información detallada de las acciones que se realicen durante la ejecución del plugin. Su valor por defecto si no se especifica es “0” (deshabilitado).</span>

# Ejecución manual

<span style="font-weight: 400;">Para ejecutar el plugin configure el archivo de configuración “</span>*<span style="font-weight: 400;">pandora\_kubernetes.conf</span>*<span style="font-weight: 400;">” según las instrucciones precedentes.</span>

**Ejecución del plugin:**

```
./pandora_kubernetes.64 pandora_kubernetes.conf
```

# Módulos generados

<span style="font-weight: 400;">La ejecución de este plugin generará los siguientes agentes y módulos:</span>

- **Un agente llamado “Kubernetes”**<span style="font-weight: 400;">: Tendrá los datos de monitorización que no sean referente a contenedores y nodos. Contendrá los módulos:</span>
- **API status**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz ping**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz log**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz etcd**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz poststarthook crd informer synced**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz poststarthook generic apiserver start informers**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz poststarthook start apiextensions controllers**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Healthz poststarthook start apiextensions informers**<span style="font-weight: 400;">: Indica si el API es accesible por el plugin.</span>
- **Namespaces**<span style="font-weight: 400;">: Cantidad de “</span>*<span style="font-weight: 400;">namespaces</span>*<span style="font-weight: 400;">” en el entorno.</span>
- **Services**<span style="font-weight: 400;">: Cantidad de “</span>*<span style="font-weight: 400;">services</span>*<span style="font-weight: 400;">” en el entorno.</span>
- **Deployments**<span style="font-weight: 400;">: Cantidad de “</span>*<span style="font-weight: 400;">deployments</span>*<span style="font-weight: 400;">” en el entorno.</span>
- **Components**<span style="font-weight: 400;">: Cantidad de “</span>*<span style="font-weight: 400;">components</span>*<span style="font-weight: 400;">” en el entorno.</span>
- **Component &lt;component&gt;**<span style="font-weight: 400;">: Generará un módulo por cada “</span>*<span style="font-weight: 400;">component</span>*<span style="font-weight: 400;">” indicado su estado (healthy).</span>
- **&lt;metric module name&gt;**<span style="font-weight: 400;">: Generará un módulo por cada métrica indicada en el fichero de configuración (con los nombres indicados).</span>


- **Un agente para cada nodo**<span style="font-weight: 400;">: Su agente padre será el de “</span>*<span style="font-weight: 400;">Kubernetes</span>*<span style="font-weight: 400;">”. Contendrán los módulos:</span>
- **Pods**<span style="font-weight: 400;">: Cantidad de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” en el nodo.</span>
- **Pods (%)**<span style="font-weight: 400;">: Porcentaje de ocupación de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” en el nodo.</span>
- **CPU (cores)**<span style="font-weight: 400;">: Uso de CPU del nodo.</span>
- **CPU (%)**<span style="font-weight: 400;">: Porcentaje de uso de CPU del nodo.</span>
- **Memory (bytes)**<span style="font-weight: 400;">: Uso de memoria del nodo.</span>
- **Memory (%)**<span style="font-weight: 400;">: Porcentaje de uso de memoria del nodo.</span>
- **&lt;condition&gt;**<span style="font-weight: 400;">: Generará un módulo por cada “</span>*<span style="font-weight: 400;">condition</span>*<span style="font-weight: 400;">” en el nodo indicando su estado.</span>


- **Un agente para cada “pod”**<span style="font-weight: 400;">: Su agente padre será el del nodo en el que se encuentre. Contendrán los módulos:</span>
- **Pod status**<span style="font-weight: 400;">: Indica el estado del “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">”. Estados posibles:</span>
- <span style="font-weight: 400;">0 → Failed</span>
- <span style="font-weight: 400;">1 → Running</span>
- <span style="font-weight: 400;">2 → Succeeded</span>
- <span style="font-weight: 400;">3 → Pending</span>
- <span style="font-weight: 400;">4 → Unknown</span>

- **Containers**<span style="font-weight: 400;">: Cantidad de contenedores en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">”.</span>
- **Container &lt;container&gt; CPU (cores):** <span style="font-weight: 400;">Generará un módulo por cada “</span>*<span style="font-weight: 400;">container</span>*<span style="font-weight: 400;">” en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">” indicando el uso de CPU en el nodo.</span>
- **Container &lt;container&gt; CPU (%):** <span style="font-weight: 400;">Generará un módulo por cada “</span>*<span style="font-weight: 400;">container</span>*<span style="font-weight: 400;">” en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">” indicando el porcentaje de uso de CPU en el nodo.</span>
- **Container &lt;container&gt; memory (bytes):** <span style="font-weight: 400;">Generará un módulo por cada “</span>*<span style="font-weight: 400;">container</span>*<span style="font-weight: 400;">” en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">” indicando el uso de memoria en el nodo.</span>
- **Container &lt;container&gt; memory (%):** <span style="font-weight: 400;">Generará un módulo por cada “</span>*<span style="font-weight: 400;">container</span>*<span style="font-weight: 400;">” en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">” indicando el porcentaje de uso de CPU en el nodo.</span>
- **&lt;condition&gt;**<span style="font-weight: 400;">: Generará un módulo por cada “</span>*<span style="font-weight: 400;">condition</span>*<span style="font-weight: 400;">” en el “</span>*<span style="font-weight: 400;">pod</span>*<span style="font-weight: 400;">” indicando su estado.</span>


- **Un agente para cada despliegue**<span style="font-weight: 400;">: Su agente padre será el de “</span>*<span style="font-weight: 400;">Kubernetes</span>*<span style="font-weight: 400;">”. Contendrán los módulos:</span>
- **Replicas**<span style="font-weight: 400;">: Número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” objetivo del despliegue no terminados (Sus etiquetas coinciden con el selector).</span>
- **Updated replicas**<span style="font-weight: 400;">: Número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” objetivo del despliegue no terminados que tienen la plantilla de especificaciones deseada.</span>
- **Ready replicas**<span style="font-weight: 400;">: Número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” objetivo del despliegue preparados.</span>
- **Available replicas**<span style="font-weight: 400;">: Número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” objetivo del despliegue disponibles (preparados desde el al menos "</span>*<span style="font-weight: 400;">minReadySeconds</span>*<span style="font-weight: 400;">").</span>
- **Unavailable replicas**<span style="font-weight: 400;">: Número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” objetivo del despliegue no disponibles. Es el número total de “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” que todavía son necesarios para que el despliegue tenga disponible una capacidad del 100%. Pueden ser “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” que están iniciados pero aún no están disponibles o “</span>*<span style="font-weight: 400;">pods</span>*<span style="font-weight: 400;">” que aún no han sido creados.</span>
- **Available**<span style="font-weight: 400;">: Indica si el despliegue está disponible.</span>
- **Progressing**<span style="font-weight: 400;">: Indica si el despliegue está lanzando un nuevo “</span>*<span style="font-weight: 400;">replica set</span>*<span style="font-weight: 400;">”.</span>