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.

Where in CostGlassSettings → Cloud Accounts → Kubernetes
PlanThe Kubernetes Costs page needs the Growth plan or above
Who can do thisAnyone who can sign in can generate the instructions; you also need cluster-admin on the cluster
Time neededAbout 15 minutes
En resumen
  • 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).

1
Prometheus recopila métricas
Prometheus es una base de datos de métricas que se ejecuta dentro del clúster. OpenCost lee las cifras de memoria y CPU del contenedor. Sin Prometheus, OpenCost no puede iniciarse correctamente.
2
OpenCost les pone precio
OpenCost works out the cost of every namespace, workload and pod, using your cloud's prices. También informa estimaciones de carbono cuando la opción de carbono está activada.
3
El exportador CostGlass impulsa el resultado
A CronJob named 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.
4
CostGlass lo almacena y lo muestra
CostGlass mantiene las asignaciones de costos y un historial diario, y los muestra en la página Costos de Kubernetes página.
Nada entrante y de solo lectura
El exportador sólo realiza llamadas HTTPS salientes. CostGlass no tiene una ruta de red hacia su clúster ni acceso de escritura. The one extra permission the exporter asks for is read-only: 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 formaTipo de clústerQué hace el comando de instalación
AWS (EKS)Amazon EKSAdds --set opencost.exporter.cloudProvider=aws.
Azur (AKS)Azure AKSAdds cloudProvider=azure.
Nube de Google (GKE)Google GKEAdds cloudProvider=gcp.
Nube de Oracle (OKE)Oráculo OKESin 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 DigitalOceanAdds cloudProvider=custom.
Linodo (LKE)Linodo LKEAdds cloudProvider=custom.
Metal desnudo / OtroClú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.
Nota
The server also recognises Alibaba Cloud (ACK) and Civo if a provider of 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.

Antes de empezar
  • A Kubernetes cluster you can reach with kubectl, and permission to create namespaces, ClusterRoles and CronJobs (cluster-admin is the simple way).
  • helm versió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.
1
Abrir el formulario
Go to Settings → Cloud Accounts and choose the Kubernetes tab. Any clusters already connected are listed under Connected Clusters.
2
Nombra el clúster
Under Connect a New Cluster, type a name in Cluster Identifier, for example 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.
3
Elija la nube subyacente
In Underlying Cloud / Infrastructure pick AWS (EKS), Azure (AKS), Google Cloud (GKE), Oracle Cloud (OKE), DigitalOcean (DOKS), Linode (LKE) or Bare Metal / Other.
4
generar las instrucciones
Click Generate Install Instructions. CostGlass crea (o reutiliza) un token de ingesta para este nombre de clúster y muestra los comandos. Su token está dentro del manifiesto generado, así que trátelo como una contraseña.
5
Ejecute los comandos de Helm
Copy the block under 1. Install Prometheus + OpenCost via Helm and run it in a terminal that points at the right cluster. Consulte la siguiente sección para conocer su contenido.
6
Aplicar el manifiesto del agente CostGlass
Copy Copy Complete Manifest, save it as costglass-agent.yaml, y correr kubectl aplicar -f costglass-agent.yaml.
7
Espera el primer empujón
La página revisa cada 15 segundos. When the cluster reports in, a message says Cluster "your-name" is reporting cost data. You can also click I've Deployed OpenCost to finish without waiting; data appears once the exporter has pushed.
No compartir el manifiesto
The manifest contains this cluster's ingest token. Cualquiera que lo tenga puede enviar datos de costos a su organización con ese nombre de clúster. Mantenlo fuera de los repositorios públicos. Si hay una fuga, desconecte el clúster (esto revoca el token) y conéctelo nuevamente.

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):

Comandos de timón (ejemplo de EKS)
Nota
El paso de Prometheus apaga su volumen persistente, por lo que Prometheus pierde su historial si su módulo se reinicia. OpenCost luego mide desde un nuevo comienzo. Para la producción, utilice su propia configuración de Prometheus si necesita un historial largo y duradero.

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:

ObjetoNombreObjetivo
Secretocostglass-exporter-tokenSostiene INGEST_TOKEN, the private token for this cluster.
Cuenta de serviciocostglass-opencost-exporterLa identidad con la que se ejecuta el exportador.
ClusterRole y ClusterRoleBindingcostglass-opencost-exporter-health-readerSólo lectura: get y list en pods, nodes y persistentvolumeclaims. Opcional.
Trabajo croncostglass-opencost-exporterRuns 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, env y equipo. Idle cost is included and the kube-system, istio-system y monitoring namespaces 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-Token header.

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

1
Revisa las vainas
Run 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).
2
Verifique el CronJob
Run 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.
3
Consultar costoGlass
Open Kubernetes Costs. The header badge changes to OpenCost Connected and your cluster appears in the Cluster drop-down. Un clúster cuenta como "activo" si se impulsó en los últimos 60 minutos.
La ventana Connect OpenCost Agent en la página Costos de Kubernetes: nombre del clúster, botones de la nube, el paso Helm y el paso del manifiesto.

¿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&#x27;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.

No lo use en un nombre de clúster real
Los datos de muestra no provienen de su clúster. Úselo solo para obtener una vista previa de la página y prefiera un nombre de grupo desechable. Si lo ejecutó por error, desconecte el nombre del clúster para eliminar las filas de muestra y luego conecte el clúster real.

Eliminar un clúster

1
Desconectarse en CostGlass
On Settings → Cloud Accounts → Kubernetes, find the cluster under Connected Clusters and click Disconnect, then confirm.
2
Eliminar el agente del clúster
Run 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&#x27;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 vesCausa probableque hacer
No hay datos en la página Costos de Kubernetes después de 30 minutosEl 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 CrashLoopBackOffPrometeo 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_TOKENFalta el secreto o está en el espacio de nombres incorrecto.Controlar kubectl get secret costglass-exporter-token -n opencost.
HTTP 401 o 403 al presionarEl 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 opencostEl 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 RBACNo 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 carbonoOpenCost 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ústerEs 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 blancoNo 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.

Preguntas frecuentes

¿CostGlass necesita acceso a mi clúster o cuenta de nube para esto?
No. Sólo el empujón saliente del exportador. No se necesita acceso entrante, kubeconfig ni credenciales de nube para los datos de costos de Kubernetes.
¿Por qué se necesita Prometeo?
OpenCost lee métricas de CPU y memoria de Prometheus. Sin él, OpenCost no puede comenzar. Si ya ejecuta Prometheus en la dirección predeterminada, omita el paso 1.
¿Puedo conectar muchos clusters?
Sí. Repeat the steps with a different Cluster Identifier for each one. Cada grupo tiene su propio token. Su plan establece un límite en la cantidad de conexiones.
¿Puedo cambiar el nombre del clúster más tarde?
El nombre está ligado al token. Para usar otro nombre, desconecte el clúster y conéctelo nuevamente con el nuevo nombre.
¿Cambia algo en mi clúster?
Agrega objetos solo en el espacio de nombres opencost, además de un ClusterRole y un ClusterRoleBinding de solo lectura. No modifica tus cargas de trabajo.
¿El costo es el mismo que mi factura de la nube?
No exactamente. Ver Costos de Kubernetes sobre cómo funcionan los precios de lista, la conciliación y la proyección de tasa de ejecución.

Guías relacionadas