# Kubernetes 与 Prometheus：区分学习环境和生产集群

Kubernetes 管理容器调度，Prometheus 收集指标。两者都会占用资源，小型 VPS 上应先搭建有限的学习环境。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/kubernetes-prometheus/

## 1. 先定义学习环境的边界

Kubernetes 管理容器调度与服务，Prometheus 采集指标。单台 VPS 上的学习集群适合练习 Deployment、Service 和监控，不具备多节点故障容错。小内存套餐可能连控制平面与监控组件都难以同时运行。

先准备受支持系统、足够 CPU/内存/磁盘，安装 kubectl 与一个明确的本地学习集群工具。本文采用 Minikube 的 Docker 驱动思路；正式生产集群需要另外规划网络、存储、证书、备份与升级。

## 2. 创建集群并确认上下文

按 Minikube 官方安装步骤准备工具与 Docker，使用普通用户和合适权限，不为了安装方便给未知脚本 root。确认资源预算后启动，例如：

```bash
minikube start --driver=docker --cpus=2 --memory=4096
kubectl config current-context
kubectl get nodes
kubectl get pods -A
```

4096 是示例内存预算，主机还需保留系统与其他任务余量。context 必须是刚创建的学习集群，避免把后续命令误发到生产环境。节点 Ready 后再部署应用。

## 3. 部署一个最小服务并从本地验证

```bash
kubectl create deployment web-demo --image=nginx:stable-alpine
kubectl expose deployment web-demo --port=80 --type=ClusterIP
kubectl rollout status deployment/web-demo
kubectl port-forward service/web-demo 8080:80
```

保持最后一个终端运行，在另一个终端请求 `http://127.0.0.1:8080/`。这条转发默认用于本地调试，不需要把集群 API 或 NodePort 暴露到全网。正式工作负载还要固定镜像版本、设置资源 requests/limits 和健康探针。

## 4. 监控先选轻量范围再扩展

Prometheus 通过 scrape 目标采集时间序列，Grafana 用于展示，Alertmanager 管理告警，它们不是同一个组件。先理解一个指标端点和抓取配置，再决定是否安装完整 kube-prometheus-stack。

使用 Helm 时，从 Prometheus Community 官方 chart 仓库选择确认过的版本，先查看 values 和资源要求，设置保留时间、磁盘容量及访问方式。不要在资源不足的实例上直接照抄大型生产默认配置。

## 5. 读懂异常状态再处理

```bash
kubectl get pods -A
kubectl describe pod 实际Pod名 -n 实际命名空间
kubectl logs 实际Pod名 -n 实际命名空间 --tail=100
kubectl get events -A --sort-by=.lastTimestamp
```

Pending 常与资源或调度条件有关，ImagePullBackOff 查镜像和拉取凭据，CrashLoopBackOff 查程序日志与配置。不要通过不断删除 Pod 掩盖根因；控制器会重建它，但不会修复错误配置。

## 6. 指标可见不等于业务可用

分别验证监控目标能抓取、查询有数据、告警规则能触发和恢复，以及通知真正送达。监控本身的数据库和配置也需要持久化。不要公开无认证的 Grafana、Prometheus 或 Kubernetes 管理接口。

学习结束可停止集群节省资源；删除集群会删除相关学习数据，先导出需要保留的配置。轻量网站监控可直接看[Uptime Kuma 与状态页](https://stock.iftalking.com/guides/uptime-monitoring/)，不必为单个站点部署完整集群。


## 完成后检查

生产集群还需要容量、升级、证书、容灾和权限设计，单机演示不能替代这些工作。

## 参考资料

- [kubernetes.io · 项目文档](https://kubernetes.io/docs/setup/)
- [prometheus.io · 项目文档](https://prometheus.io/docs/introduction/first_steps/)
