Este gráfico de timón está diseñado para implementar una funcionalidad que guarda automáticamente los volcados de núcleo de la mayoría de los proveedores de servicios de Kubernetes en la nube pública y las instancias privadas de Kubernetes en un servicio de almacenamiento compatible con S3.
Lea CONTRIBUTING.md, tiene algunas notas importantes. Preste especial atención a las pautas de estilo de codificación y al Certificado de origen del desarrollador.
Nosotros, como miembros, contribuyentes y líderes, nos comprometemos a hacer de la participación en nuestra comunidad una experiencia libre de acoso para todos, independientemente de su edad, tamaño corporal, discapacidad visible o invisible, origen étnico, características sexuales, identidad y expresión de género, nivel de experiencia, educación. , estatus socioeconómico, nacionalidad, apariencia personal, raza, religión o identidad y orientación sexual.
Nos comprometemos a actuar e interactuar de manera que contribuyan a una comunidad abierta, acogedora, diversa, inclusiva y saludable.
El código de conducta completo está disponible aquí.
Consulte el cuadro README.md para obtener detalles completos.
Esta es una matriz de objetivos de prueba confirmados. Por favor, entornos de relaciones públicas que también se sabe que funcionan.
Proveedor | Producto | Versión | ¿Validado? | ¿Laboral? |
AWS | EKS | 1.21 | Sí | Sí |
AWS | ROSA | 4.8 | Sí | Sí |
Construcción personalizada | K8S | N / A | Sí | Sí |
Océano digital | K8S | 1.21.5-hacer.0 | Sí | Sí |
GKE-cos_containerd | 1.20.10-gke.1600 | Sí | Sí | |
GKE-Ubuntu | 1.20.10-gke.1600 | Sí | Sí | |
IBM | IKS | 1.19-1.21 | Sí | Sí |
IBM | ROCAS | 4.6-4.8 | Sí | Sí |
microsoft | AKS | 1.19 | Sí | Sí |
microsoft | ARO | 4.8 | Sí | Sí |
sombrero rojo | Local | 4.8 | Sí | Sí |
Los volcados de núcleo son una parte fundamental de la observabilidad.
A medida que los sistemas se vuelven más distribuidos, los volcados de memoria ofrecen a los equipos un enfoque no invasivo para comprender por qué los programas no funcionan correctamente en cualquier entorno en el que se implementen.
Los Core Dumps son útiles en una amplia cantidad de escenarios pero son muy relevantes en los siguientes casos:
El proceso sale sin un seguimiento de pila útil.
El proceso se queda sin memoria.
Una aplicación no se comporta como se esperaba
Los problemas tradicionales con los volcados de memoria son:
Gastos generales de gestión de los vertederos
El análisis de volcado requería herramientas específicas que no estaban disponibles en la máquina de los desarrolladores.
Gestionar el acceso a los volcados ya que pueden contener información sensible.
Este gráfico tiene como objetivo abordar los problemas que rodean los volcados de memoria aprovechando las plataformas comunes (K8, ROKS y Object Storage) en un entorno de nube para hacer el trabajo pesado.
El gráfico implementa dos procesos:
El agente gestiona la actualización de la configuración /proc/sys/kernel/*
, implementa el servicio de compositor y carga el archivo zip de volcados de núcleo creado por el compositor en una instancia de almacenamiento de objetos.
El compositor maneja el procesamiento de un volcado de núcleo y crea documentos JSON de imagen, volcado de núcleo de contenedor y tiempo de ejecución desde CRICTL y los inserta en un único archivo zip. El archivo zip se almacena en el sistema de archivos local del nodo para que el agente lo cargue.
Cuando instala el gráfico Helm de IBM Cloud Core Dump Handler, los siguientes recursos de Kubernetes se implementan en su clúster de Kubernetes:
Espacio de nombres : se crea un espacio de nombres específico para instalar los componentes; el valor predeterminado es ibm-observe
Handler Daemonset : el daemonset implementa un pod en cada nodo trabajador de su clúster. El daemonset contiene configuración para permitir que el proceso elevado defina el patrón central para colocar el volcado de núcleo en el almacenamiento de objetos, así como recopilar información del pod si está disponible.
Política de privilegios : el daemonset configura el nodo host para que se requieran privilegios.
Cuenta de servicio : Cuenta de servicio estándar para ejecutar el daemonset
Reclamaciones de volumen : para copiar el compositor al host y permitir el acceso a los volcados de núcleo generados.
Rol de clúster : creado con un recurso de evento y un verbo de creación y asociado con la cuenta de servicio.
Para instalar el gráfico Helm en su clúster, debe tener la función de plataforma Administrador .
Este gráfico implementa un conjunto de demonios de Kubernetes privilegiado con las siguientes implicaciones:
la creación automática de un contenedor privilegiado por nodo de Kubernetes capaz de leer archivos principales y consultar crictl para obtener información del pod.
El daemonset utiliza la función hostpath que interactúa con el sistema operativo Linux subyacente.
El binario del compositor se implementa y ejecuta en el servidor host.
Los volcados de núcleo pueden contener datos confidenciales en tiempo de ejecución y el acceso al depósito de almacenamiento debe administrarse en consecuencia.
Las claves de almacenamiento de objetos se almacenan como secretos y se utilizan como variables de entorno en el conjunto de demonios.
IBM Cloud Core Dump Handler requiere los siguientes recursos en cada nodo trabajador para ejecutarse correctamente:
$ helm delete core-dump-handler --namespace observe
host-name
se elimine antes de continuar $ kubectl get pvc -n observe
$ helm install core-dump-handler . --namespace observe
helm delete core-dump-handler -n observe
Cree la docker build -t YOUR_TAG_NAME .
Inserte la imagen en su registro de contenedor
Actualice el contenedor en el archivo values.yaml
para usarlo.
image :
registry : YOUR_REGISTRY
repository : YOUR_REPOSITORY
tag : YOUR_TAG
o ejecute el comando helm install con la configuración
--set image.registry=YOUR_REGISTRY
--set image.repository=YOUR_REPOSITORY
--set image.tag=YOUR_TAG
Los servicios están escritos en Rust usando Rustup.
Las pruebas de unidades locales se pueden ejecutar usando cargo test
en la carpeta base
Actualmente, solo se admiten IBM Cloud ROKS e IKS, pero nos complace realizar pruebas de integración para otros servicios, pero no podemos ejecutarlos antes del lanzamiento.
Para ejecutar la compilación de pruebas de integración, siga las instrucciones para una compilación personalizada.
En la raíz de la carpeta del proyecto, cree un archivo llamado .env
con la siguiente configuración
S3_ACCESS_KEY=XXXX
S3_SECRET=XXXX
S3_BUCKET_NAME=XXXX
S3_REGION=XXXX
Cambie el directorio a la carpeta de integración y ejecute la prueba.
cd integration
./run-ibm.sh
Las versiones se crean en una rama previa al lanzamiento, por ejemplo, las pruebas de integración pre-8.5.0
se ejecutan manualmente y se genera una versión cuando se fusionan con la versión principal.
Actualmente no es posible automatizar esto ya que la integración de Kubernetes en las acciones de GitHub no es lo suficientemente confiable.
Si desea probar una versión preliminar con sus propias pruebas de integración, plantee un problema y podremos colaborar en su ejecución de prueba.
El primer lugar para buscar problemas es la consola del agente. Una instalación exitosa debería verse así
[2021-09-08T22:28:43Z INFO core_dump_agent] Setting host location to: /var/mnt/core-dump-handler
[2021-09-08T22:28:43Z INFO core_dump_agent] Current Directory for setup is /app
[2021-09-08T22:28:43Z INFO core_dump_agent] Copying the composer from ./vendor/default/cdc to /var/mnt/core-dump-handler/cdc
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pattern /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pattern.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for kernel.core_pipe_limit /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/core_pipe_limit.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Starting sysctl for fs.suid_dumpable /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created Backup of /var/mnt/core-dump-handler/suid_dumpable.bak
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pattern=|/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pattern = |/var/mnt/core-dump-handler/cdc -c=%c -e=%e -p=%p -s=%s -t=%t -d=/var/mnt/core-dump-handler/core -h=%h -E=%E
kernel.core_pipe_limit = 128
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of kernel.core_pipe_limit=128
fs.suid_dumpable = 2
[2021-09-08T22:28:43Z INFO core_dump_agent] Created sysctl of fs.suid_dumpable=2
[2021-09-08T22:28:43Z INFO core_dump_agent] Creating /var/mnt/core-dump-handler/.env file with LOG_LEVEL=info
[2021-09-08T22:28:43Z INFO core_dump_agent] Executing Agent with location : /var/mnt/core-dump-handler/core
[2021-09-08T22:28:43Z INFO core_dump_agent] Dir Content []
Si el agente se ejecuta correctamente, es posible que haya un problema con la configuración del compositor. Para verificar los registros del compositor, abra un shell en el agente y acceda al archivo compositor.log para ver si hay algún mensaje de error.
cat /var/mnt/core-dump-handler/composer.log
Si no hay errores, entonces debe cambiar el registro predeterminado de error
a debug
en el archivo value.yaml y volver a implementar el gráfico. Cree un volcado de núcleo nuevamente y /var/mnt/core-dump-handler/composer.log
debe contener detalles específicos sobre cada carga.