¿Cómo agregar el agente de Node.js de APM Insight en Kubernetes a través de InitContainers?

Agregar el agente de Node.js en Kubernetes a través de InitContainers (con una imagen de agente prediseñada)

Para integrar el agente de Node.js de APM Insight en tus aplicaciones Kubernetes con InitContainers, sigue los pasos que se indican a continuación:

Paso 1:
Crea un volumen vacío que se utilizará para copiar los archivos del agente durante el proceso de initContainers.
Ejemplo:
  1. volumes:
  2.    - name: app-volume

Paso 2:

Incluye el siguiente comando de initContainers en el gráfico Helm o el archivo YAML de implementación.
  1. initContainers:
  2.       - name: init-npm
  3.         image: site24x7/apminsight-nodejsagent:4.8.0
  4.         imagePullPolicy: IfNotPresent
  5.         command: ['cp', '-r', '/opt/site24x7/.', '/apm']
  6.         volumeMounts:
  7.   - name: app-volume
  8.     mountPath: /apm

Paso 3:

Instala el volumen que se creó en el paso 2 en el contenedor de la aplicación.
Ejemplo:
  1. containers:
  2.           env:
  3.             - name: NODE_OPTIONS
  4.               value: "--require /apm/node_modules/apminsight"
  5.             - name: APMINSIGHT_LICENSE_KEY
  6.               value: "<license-key>"
  7.             - name: APMINSIGHT_APP_NAME
  8.               value: "<application-name>"
  9.             - name: APMINSIGHT_APP_PORT
  10.               value: "<application-port>"
  11.          volumeMounts:
  12.             - mountPath: /apm   
  13.         name: app-volume 

Notas
Para aplicaciones que usan el gestor de procesos PM2 en lugar de Kubernetes, habilita la compatibilidad con PM2 agregando lo siguiente en la sección env de tu YAML de implementación:
  1. - name: APMINSIGHT_PROCESS_MANAGER
  2.   value: "true"

Ejemplo del archivo de implementación YAML como referencia:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: sample-deployment
  5. spec:
  6.   replicas: 1
  7.   selector:
  8.     matchLabels:
  9.       app: sample-app
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: sample-app
  14.     spec:
  15.       initContainers:
  16.       - name: init-npm
  17.         image: site24x7/apminsight-nodejsagent:4.8.0
  18.         imagePullPolicy: IfNotPresent
  19.         command: ['cp', '-r', '/opt/site24x7/.', '/apm']
  20.         volumeMounts:
  21.              - name: app-volume
  22.                 mountPath: /apm

  23.       containers:
  24.         - name: main-container
  25.           image: myrepository/sample-nodejs-app:latest
  26.           env:
  27.             - name: NODE_OPTIONS
  28.               value: "--require /apm/node_modules/apminsight"
  29.             - name: APMINSIGHT_LICENSE_KEY
  30.               value: "<license-key>"
  31.             - name: APMINSIGHT_APP_NAME
  32.               value: "<application-name>"
  33.             - name: APMINSIGHT_APP_PORT
  34.               value: "<application-port>"
  35.           volumeMounts:
  36.             - mountPath: /apm   
  37.               name: app-volume
  38.       volumes:
  39.          - name: app-volume 
  40.       emptyDir: {}