El DatadogPodAutoscaler (DPA) es una definición de recurso personalizado (CRD) de Kubernetes que permite el escalado automático de cargas de trabajo de Kubernetes utilizando Datadog Kubernetes Autoscaling (DKA). Esta guía demuestra cómo gestionar recursos de DatadogPodAutoscaler utilizando Terraform y el proveedor de Kubernetes de HashiCorp para desplegar una configuración de escalado automático.
Activando el escalado automático a gran escala: Para implementar el escalado automático en muchas cargas de trabajo o espacios de nombres con una política compartida, etiqueta las cargas de trabajo o espacios de nombres con autoscaling.datadoghq.com/profile en lugar de crear uno DatadogPodAutoscaler por carga de trabajo. Consulta Perfiles de clúster en el Resumen de Kubernetes Autoscaling.
Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente:
Clúster de Kubernetes: Un clúster de Kubernetes en funcionamiento con acceso utilizando kubectl
Terraform: Terraform instalado (se recomienda la versión 0.13 o posterior)
Credenciales de API de Datadog: Clave de API de Datadog válida y clave de aplicación
Estructura del proyecto
Esta guía utiliza un enfoque de implementación en múltiples etapas para asegurar la correcta creación de dependencias para Terraform.
.├──providers.tf# Provider configurations├──variables.tf# Input variables├──main.tf# Stage 1: Datadog secret and operator (CRDs)├──terraform.tfvars# Example variable values├──datadogagent/# Stage 2: DatadogAgent CRD resource│└──main.tf# DatadogAgent manifest├──nginx-dpa/# Stage 3: Nginx application with DPA│└──main.tf# Nginx namespace, deployment, and DPA
Etapas de implementación
Un enfoque de implementación en múltiples etapas es esencial al trabajar con definiciones de recursos personalizados (CRDs) de Kubernetes y Terraform. Este enfoque ordenado es necesario para asegurar que crees e instales las dependencias requeridas para cada etapa en el proceso.
Las CRDs de Kubernetes deben ser instaladas en el clúster antes de que puedas crear recursos personalizados que las utilicen. La CRD DatadogPodAutoscaler se crea cuando instala el Datadog Operator en la Etapa 1. Terraform necesita conocer estas CRDs antes de poder gestionar recursos que dependen de ellas.
El proveedor de Kubernetes de Terraform descubre los tipos de recursos disponibles en el momento de la inicialización. Si intentas crear un recurso DatadogPodAutoscaler antes de que la CRD esté instalada, Terraform fallará porque no reconoce el tipo de recurso personalizado.
Etapa 1 (Datadog Operator and CRDs): Crea el secreto de Datadog, el Datadog Operator y la CRD
Datadog Operator using Helm (crea CRDs)
Etapa 2 (Datadog Agent): Despliega el Datadog Agent configurado para Datadog Kubernetes Autoscaling
Secretos de API y aplicación de Datadog
Recurso personalizado DatadogAgent con el agente de clúster habilitado
Etapa 3 (Carga de trabajo con DatadogPodAutoscaler): Despliega la aplicación con DatadogPodAutoscaler
Espacio de nombres y despliegue de Nginx
Recurso DatadogPodAutoscaler para el escalado automático del despliegue de nginx
Configura los archivos de configuración
Primero, configura los siguientes archivos de configuración para cada etapa en el proceso.
resource"helm_release" "datadog_operator" {
name="datadog-operator" namespace="datadog" repository="https://helm.datadoghq.com" chart="datadog-operator" version="2.11.1" # You can update to the latest stable version
create_namespace=true}
Alternativamente, establece las variables de entorno TF_VAR_datadog_api_key y TF_VAR_datadog_app_key en tu terminal.
cd datadogagent
terraform init
terraform apply
Verifica que el Agente de Datadog esté implementado:
kubectl get datadogagent -n datadog
Deberías ver el recurso personalizado Datadog Agent creado. Debería estar en el Running estado antes de continuar. Verifique que los pods Datadog Agent y Datadog Cluster Agent estén en ejecución:
kubectl get pods -n datadog
Etapa 3: Aplicación con DatadogPodAutoscaler
Implementa la aplicación nginx con DatadogPodAutoscaler:
cd ../nginx-dpa
terraform init
terraform apply
Después de la implementación, verifica que todos los componentes estén funcionando correctamente.