Conectar un clúster de Kubernetes
Install OpenCost and the CostGlass exporter in your cluster so cost data is pushed to CostGlass every 15 minutes.
Conectar un clúster de Kubernetes
Instale el agente OpenCost de código abierto en su clúster y un pequeño exportador CostGlass que envía datos de costos a CostGlass cada 15 minutos.
- CostGlass nunca se conecta a su clúster. Un pequeño CronJob dentro del clúster envía datos de costos a CostGlass a través de HTTPS. No se abre nada entrante.
- Se instalan dos cosas: OpenCost (con Prometheus, que necesita) y el exportador CostGlass (un Secret, una ServiceAccount con acceso de solo lectura y un CronJob).
- Los comandos de instalación se generan automáticamente, con un token de ingesta privado para ese clúster. Cópielos, ejecútelos y el clúster aparecerá por sí solo.
- Los primeros datos suelen aparecer entre 15 y 30 minutos, una vez que CronJob se ha ejecutado y Prometheus ha recopilado algo de historial.
- Al desconectar un clúster se revoca su token y se eliminan los datos de costos en vivo almacenados.
como funciona
Kubernetes no le envía una factura. Su nube le factura por las máquinas (nodos) en las que se ejecuta el clúster, y luego Kubernetes comparte esas máquinas entre muchas aplicaciones. Para decir cuánto cuesta cada equipo o aplicación, es necesario medir cuánta CPU, memoria y almacenamiento utiliza cada uno y ponerle precio. CostGlass hace esto con Costo abierto, una herramienta de costos de código abierto de CNCF (la base detrás de Kubernetes).
costglass-opencost-exporter runs every 15 minutes. Solicita los números a OpenCost y, opcionalmente, solicita a la API de Kubernetes el estado del pod, el nodo y el almacenamiento, luego envía todo a CostGlass en una solicitud HTTPS.get y list on pods, nodes and persistent volume claims, used for the Health tab and to discover your nodes. Es opcional.Esto es independiente de las conexiones de su cuenta en la nube (AWS, Azure etcétera). No necesita una conexión a AWS o Azure para usar Kubernetes Costs, pero si tiene una, CostGlass puede comparar sus cifras de Kubernetes con lo que realmente facturó la nube (consulte reconciliación).
Clústeres soportados
El propio OpenCost funciona en cualquier clúster de Kubernetes. CostGlass cambia solo dos cosas por proveedor: una configuración de OpenCost y la etiqueta del proveedor almacenada con los datos.
| Elección en la forma | Tipo de clúster | Qué hace el comando de instalación |
|---|---|---|
| AWS (EKS) | Amazon EKS | Adds --set opencost.exporter.cloudProvider=aws. |
| Azur (AKS) | Azure AKS | Adds cloudProvider=azure. |
| Nube de Google (GKE) | Google GKE | Adds cloudProvider=gcp. |
| Nube de Oracle (OKE) | Oráculo OKE | Sin bandera de proveedor de nube. OpenCost detects Oracle itself and prices nodes from Oracle's public price list. No hay credenciales de Oracle involucradas. |
| Océano Digital (DOKS) | DOKS de DigitalOcean | Adds cloudProvider=custom. |
| Linodo (LKE) | Linodo LKE | Adds cloudProvider=custom. |
| Metal desnudo / Otro | Clúster autogestionado o cualquier otro (la opción del formulario Cuentas en la nube) | El servidor no lo reconoce especialmente, por lo que se trata como una configuración de estilo AWS. Vea la nota a continuación. |
alibaba o civo is requested, but the connect forms do not offer them. Para un clúster que no aparece en la lista, use la opción más cercana y verifique las cifras: los precios de nodo para proveedores sin una fuente de precios en CostGlass no se agregan (consulte Costos de Kubernetes). La opción "Bare Metal/Otro" no ha sido probada especialmente por nosotros.La ventana "Conectar agente OpenCost" en la aplicación en la página Costos de Kubernetes ofrece seis botones: EKS, AKS, GKE, OKE, LKE y DOKS.
- A Kubernetes cluster you can reach with
kubectl, and permission to create namespaces, ClusterRoles and CronJobs (cluster-admin is the simple way). helmversión 3 instalada en la computadora desde la que ejecutará los comandos.- Outbound HTTPS from the cluster to the CostGlass API (api.costglass.com for the UK region, your own region's API address otherwise). No inbound rules are needed.
- Un clúster que puede extraer imágenes: el exportador utiliza la imagen pública python:3.11-alpine e instala un paquete de Python (solicitudes) cuando se inicia, por lo que necesita acceso a Internet al registro de imágenes y a PyPI.
- Un plan que incluye Costos de Kubernetes (Crecimiento o superior) para ver la página de datos. The connection form itself is available on every plan, within your plan's connection limit.
Conecte un clúster, paso a paso
There are three places that open the same form: Settings → Cloud Accounts (the Kubernetes tab), the onboarding page (Kubernetes, labelledOpenCost Agent), and the Connect OpenCost Agent button on the Kubernetes Costs page. Los dos primeros comparten exactamente la misma pantalla.
Configuración → Cuentas de la nube → Kubernetes: clústeres conectados en la parte superior y el formulario para conectar uno nuevo debajo.production-eks o gke-main. Este nombre es como aparece el clúster en todas partes de CostGlass. Utilice un nombre corto y único; es parte del token, por lo que cambiarlo más tarde significa una nueva conexión.costglass-agent.yaml, y correr kubectl aplicar -f costglass-agent.yaml.Qué se genera, exactamente
1. Los comandos del timón
The commands install Prometheus (skip that step if you already run Prometheus at servidor-prometheus.sistema-prometheus) and then OpenCost into a namespace called costo abierto. Para un clúster EKS, se ven así (la configuración de la nube cambia según su elección):
opencost.carbonCost.enabled=true switches on OpenCost's own carbon estimates, which feed the Carbon tab.
2. El manifiesto del agente (costglass-agent.yaml)
One file with four things in the costo abierto namespace:
| Objeto | Nombre | Objetivo |
|---|---|---|
| Secreto | costglass-exporter-token | Sostiene INGEST_TOKEN, the private token for this cluster. |
| Cuenta de servicio | costglass-opencost-exporter | La identidad con la que se ejecuta el exportador. |
| ClusterRole y ClusterRoleBinding | costglass-opencost-exporter-health-reader | Sólo lectura: get y list en pods, nodes y persistentvolumeclaims. Opcional. |
| Trabajo cron | costglass-opencost-exporter | Runs every 15 minutes (*/15 * * * *), one run at a time, using the Python: 3.11-alpino image with a small memory and CPU limit (64 to 256 MiB, 50 to 200 millicores). |
El CronJob cada vez hace lo siguiente:
- Asks OpenCost (inside the cluster) for allocations over the last hour in 15-minute steps, grouped by namespace, controller, pod and workload kind, plus the labels
app,envyequipo. Idle cost is included and thekube-system,istio-systemymonitoringnamespaces are treated as shared. - Solicita a OpenCost su estimación de carbono de la última hora. Si esto falla (OpenCost anterior o no se configuró la bandera de carbono), registra una advertencia y continúa.
- Solicita a la API de Kubernetes, utilizando su propia cuenta de servicio, fases de pod, recuentos de reinicio, preparación de nodos y reclamaciones de almacenamiento. También lee los tamaños de nodos, la región y la versión de Kubernetes desde allí. Si no se aplicó el RBAC opcional, lo omite.
- Sends it all to CostGlass with the token in the
X-CostGlass-K8s-Tokenheader.
Puede ver Secret, RBAC y CronJob por separado en ¿Necesita manifiestos individuales? Vea Secret, RBAC y CronJob por separado si su proceso de cambio los necesita como archivos separados.
¿La parte RBAC es opcional?
Sí. Sin él, todavía llegan los datos de costes. Lo que pierde: la pestaña Salud permanece vacía y CostGlass no puede leer su recuento real de nodos, CPU, memoria, región y versión de Kubernetes del clúster, por lo que es posible que falten esos detalles. Si su equipo de seguridad rechaza el acceso de lectura en todo el clúster, elimine ClusterRole y ClusterRoleBinding del archivo antes de aplicar. Debido a que el manifiesto todo en uno los incluye, aplique las piezas por separado en ese caso.
Comprueba que funciona
kubectl get pods -n opencost. The OpenCost pod should show 2/2 Running. Si se bloquea, es probable que falte Prometheus (consulte Solución de problemas).kubectl get cronjob -n opencost, then after the next quarter-hour kubectl get jobs -n opencost y kubectl logs job/<job-name> -n opencost. A good run ends with a line starting CostGlass Ingest Success.¿Cuánto tiempo hasta que aparezcan los datos?
El exportador funciona cada 15 minutos, por lo que el primer envío llega dentro de los 15 minutos posteriores a la aplicación del manifiesto. Las cifras de costos están disponibles desde ese primer impulso. Algunas columnas, como el uso real de CPU y memoria en la pestaña Tamaño correcto, necesitan que Prometheus haya recopilado suficiente historial primero, lo que puede llevar más tiempo. Los gráficos necesitan más de un día de impulsos para mostrar una tendencia.
El botón Simular telemetría
The Kubernetes Costs page's connect window has a button called Simulate Telemetry Push under "Test Live Push Simulation". escribe muestra datos de costos para el nombre del clúster en CostGlass para que pueda ver cómo se ve la página.
Eliminar un clúster
kubectl delete -f costglass-agent.yaml, and if you no longer need OpenCost, helm uninstall opencost -n opencost (and Prometheus if you installed it only for this).Disconnecting revokes the ingest token straight away (further pushes are refused), and deletes the cluster's stored allocations, its cluster record, its inventory entry and any matching connection record. Esta acción no elimina el historial de costos diario ya escrito en su historial de costos. Tenga en cuenta que el texto de confirmación dice que se conserva el historial: en la práctica, las tablas de asignación en vivo se eliminan.
Resolución de problemas
| lo que ves | Causa probable | que hacer |
|---|---|---|
| No hay datos en la página Costos de Kubernetes después de 30 minutos | El CronJob no se ha ejecutado o la inserción falló. | Run kubectl get jobs -n opencost and read the latest job's logs. Look for Failed to fetch OpenCost telemetry (OpenCost not reachable) or CostGlass Ingest HTTP error (token or network problem). |
| Pod OpenCost en CrashLoopBackOff | Prometeo no está o está en otra dirección. | Instale Prometheus con el Paso 1 o apunte OpenCost a su propio Prometheus. Then check kubectl logs for the OpenCost pod. |
| El registro del exportador dice que falta INGEST_TOKEN | Falta el secreto o está en el espacio de nombres incorrecto. | Controlar kubectl get secret costglass-exporter-token -n opencost. |
| HTTP 401 o 403 al presionar | El token fue revocado (desconectó el clúster) o se cambió el nombre del clúster. | Genere nuevas instrucciones y vuelva a aplicar el manifiesto. |
| Pods atascados en Pendiente en el espacio de nombres de opencost | El clúster no tiene capacidad libre o Prometheus está esperando almacenamiento. | Run kubectl describe pod on the pending pod and read the Events. Agregue capacidad de nodo o ajuste la configuración de almacenamiento de Prometheus. |
| La ficha de salud dice que necesita el RBAC | No se aplicaron ClusterRole ni el enlace. | Aplique la parte RBAC del manifiesto. Los costos no se ven afectados de ninguna manera. |
| La pestaña de carbono dice que necesita habilitar las estimaciones de carbono | OpenCost se instaló sin la bandera de carbono (o una versión anterior). | Re-run the Helm command, which includes opencost.carbonCost.enabled=true, then re-apply the manifest. |
| Falta un nuevo clúster en el menú desplegable Clúster | Es posible que su navegador muestre una lista anterior. | Vuelva a cargar la página. La lista de clústeres se recupera en cada visita y no se almacena en caché mediante el caché del navegador de una hora, por lo que debería aparecer una vez que haya llegado el primer envío. De lo contrario, consulte los registros del exportador. |
| Los detalles de la región o del nodo están en blanco | No se aplicó el RBAC opcional, por lo que no se pudieron leer los detalles del nodo. | Aplique el RBAC y espere el siguiente empujón. |