3. Kubecost 部署实战:Helm 安装、命名空间规划、持久化存储配置、Ingress 暴露
本章将带领你完成 Kubecost 在生产环境中的完整部署流程。我们将采用 Helm Chart 作为安装载体,并围绕命名空间隔离、持久化存储、安全暴露三个核心维度进行生产级配置。部署完成后,你将拥有一个具备历史数据持久化能力、可通过域名安全访问的 Kubecost 实例,为后续的压测与容量预测沙盘打下基础设施基础。
3.1 命名空间规划与资源隔离
Kubecost 默认部署在 kubecost 命名空间,但在多租户或严格安全管控的集群中,建议按以下策略进行规划:
| 环境 | 命名空间 | 说明 |
|---|---|---|
| 生产集群 | cost-monitoring |
与业务命名空间隔离,便于 RBAC 和 NetworkPolicy 管控 |
| 压测沙盘 | kubecost-sandbox |
独立沙盘环境,可随时重建,不影响生产数据 |
| 多集群聚合 | kubecost-global |
用于 Thanos 或 Prometheus 联邦场景下的统一视图 |
最佳实践: 建议在压测沙盘中使用
kubecost-sandbox 命名空间,并提前创建 NetworkPolicy 限制仅允许监控系统与 Ingress Controller 访问,避免压测流量污染集群网络基线。
3.2 Helm 安装与核心参数配置
Kubecost 官方 Helm Chart 仓库地址为 https://kubecost.github.io/cost-analyzer。以下为生产级安装命令,包含持久化、Ingress 和资源限制配置:
# 添加 Helm 仓库
helm repo add kubecost https://kubecost.github.io/cost-analyzer
helm repo update
# 创建命名空间
kubectl create namespace kubecost-sandbox
# 安装 Kubecost(含持久化与 Ingress 配置)
helm upgrade --install kubecost kubecost/cost-analyzer \
--namespace kubecost-sandbox \
--set global.prometheus.enabled=true \
--set global.prometheus.storageSpec.volumeClaimTemplate.spec.accessModes[0]=ReadWriteOnce \
--set global.prometheus.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi \
--set global.prometheus.storageSpec.volumeClaimTemplate.spec.storageClassName=gp3 \
--set persistentVolumeClaim.size=10Gi \
--set persistentVolumeClaim.storageClass=gp3 \
--set ingress.enabled=true \
--set ingress.annotations."nginx\.ingress\.kubernetes\.io/auth-type"=basic \
--set ingress.hosts[0].host=kubecost.sandbox.example.com \
--set ingress.hosts[0].paths[0].path=/ \
--set ingress.tls[0].hosts[0]=kubecost.sandbox.example.com \
--set ingress.tls[0].secretName=kubecost-tls \
--set kubecostToken="dGhpcyBpcyBhIHRva2Vu" \
--set prometheus.nodeExporter.enabled=false \
--set prometheus.serviceAccounts.nodeExporter.create=false
注意: 生产环境中务必禁用
prometheus.nodeExporter.enabled 以避免与集群已有的 Node Exporter 冲突。如果集群已部署 Prometheus Operator,建议设置 global.prometheus.enabled=false 并配置 global.prometheus.fqdn 指向已有 Prometheus 服务。
3.3 持久化存储配置详解
Kubecost 依赖 Prometheus 存储历史指标数据,同时自身也维护一份成本分配缓存。持久化配置分为两个层面:
- Prometheus 数据卷: 存储容器指标、节点指标、命名空间成本数据,建议分配 50Gi~200Gi 取决于集群规模。
- Kubecost 自身 PVC: 存储资产缓存、云账单数据、自定义配置,建议分配 10Gi~30Gi。
以下为存储配置参数对照表:
| 参数路径 | 默认值 | 生产推荐值 | 说明 |
|---|---|---|---|
global.prometheus.storageSpec.volumeClaimTemplate.spec.resources.requests.storage |
32Gi | 100Gi | Prometheus 数据保留 15 天所需容量 |
persistentVolumeClaim.size |
32Gi | 20Gi | Kubecost 自身缓存与资产数据 |
persistentVolumeClaim.storageClass |
standard | gp3 / premium-rwo | 建议使用 SSD 类 StorageClass 保障 IOPS |
global.prometheus.storageSpec.volumeClaimTemplate.spec.storageClassName |
standard | gp3 | Prometheus 写入密集型场景需高 IOPS |
压测沙盘存储建议: 沙盘环境建议使用
gp3 或 csi-hostpath 类 StorageClass,容量设置为 50Gi(Prometheus)+ 10Gi(Kubecost),保留周期设为 7 天即可满足压测数据回放需求。
3.4 Ingress 暴露与安全加固
Kubecost 的 Dashboard 默认通过 ClusterIP 服务暴露,生产环境必须通过 Ingress 进行安全暴露。以下为推荐的 Ingress 配置清单:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubecost-ingress
namespace: kubecost-sandbox
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: kubecost-auth
nginx.ingress.kubernetes.io/auth-realm: "Kubecost - Authentication Required"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
ingressClassName: nginx
tls:
- hosts:
- kubecost.sandbox.example.com
secretName: kubecost-tls
rules:
- host: kubecost.sandbox.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubecost-cost-analyzer
port:
number: 9090
安全加固要点:
- 必须启用 Basic Auth 或 OAuth2 Proxy 进行身份认证,避免 Kubecost API 直接暴露。
- 配置 SSL 强制重定向,禁止 HTTP 明文访问。
- 设置
proxy-body-size为 100m 以支持大查询请求体。 - 建议额外配置 IP 白名单 或 VPN 访问 限制来源。
3.5 部署架构总览
下图展示了 Kubecost 在压测沙盘中的完整部署架构,包含命名空间隔离、持久化存储、Ingress 暴露以及数据流向:
3.6 部署验证与快速检查清单
部署完成后,执行以下命令验证所有组件正常运行:
# 检查 Pod 状态
kubectl get pods -n kubecost-sandbox
# 检查 PVC 是否绑定
kubectl get pvc -n kubecost-sandbox
# 检查 Ingress 是否配置正确
kubectl get ingress -n kubecost-sandbox
# 查看 Kubecost 日志确认启动无报错
kubectl logs -n kubecost-sandbox deployment/kubecost-cost-analyzer --tail=50
# 通过端口转发快速验证 UI(临时)
kubectl port-forward -n kubecost-sandbox deployment/kubecost-cost-analyzer 9090:9090
快速检查清单:
- ☐ 所有 Pod 处于
Running状态,且READY列为1/1 - ☐ PVC 状态为
Bound,StorageClass 与预期一致 - ☐ Ingress 的
ADDRESS列已分配 IP 或域名 - ☐ 通过浏览器访问
https://kubecost.sandbox.example.com弹出 Basic Auth 认证框 - ☐ 登录后 Dashboard 正常加载,且右上角显示集群名称与时间范围
至此,Kubecost 已成功部署在压测沙盘环境中,具备持久化存储、安全 Ingress 暴露和命名空间隔离能力。下一阶段将基于此环境进行安全基线水位压测与容量预测模型训练。