使用Prometheus监控应用和Kubernetes以及管理入站流量
立即解锁
发布时间: 2025-08-12 00:07:01 阅读量: 18 订阅数: 36 


Kubernetes实战:从入门到精通
# 使用 Prometheus 监控应用和 Kubernetes 以及管理入站流量
## 1. 使用 Prometheus 监控应用和 Kubernetes
### 1.1 了解监控投入
在使用 Prometheus 进行监控时,需要考虑相关项目的可持续性。选择的生态系统组件应是开源的、被广泛使用的,并且有成熟的历史和治理模型。Prometheus 是监控容器化应用最流行的工具,也是云原生计算基金会(CNCF)第二个毕业的项目。目前正致力于将 Prometheus 指标格式变为开放标准(OpenMetrics),以便其他工具能读取以 Prometheus 格式暴露的应用指标。
在确定监控指标时,可参考 Google 的站点可靠性工程实践,添加四个黄金信号:延迟、流量、错误和饱和度。但更重要的是从用户体验角度考虑应用性能。
完成监控后,可清理集群以准备实验:
```bash
kubectl delete ns -l kiamol=ch14
kubectl delete all -n kube-system -l kiamol=ch14
```
### 1.2 实验
实验目标是运行 Elasticsearch 并将指标流入 Prometheus,具体步骤如下:
- Elasticsearch 不提供自身指标,需找到能提供指标的组件。
- Prometheus 配置会告知 Elasticsearch 使用的命名空间和指标路径的注解。
- 在 Elasticsearch Pod 规格中包含版本标签,以便 Prometheus 拾取并添加到指标标签中。
可参考 [解决方案](https://github.com/sixeyed/kiamol/blob/master/ch14/lab/README.md)。
## 2. 使用 Ingress 管理入站流量
### 2.1 Kubernetes 如何通过 Ingress 路由流量
传统使用多个负载均衡服务为不同应用分配不同公共 IP 地址的方式会带来管理难题。而 Ingress 可使用一组规则将域名和请求路径映射到应用,从而使用单个 IP 地址为整个集群路由所有流量。
Kubernetes 采用可插拔架构实现 Ingress,将路由规则定义为标准资源,并部署反向代理接收流量并执行规则。常见的反向代理如 Nginx、HAProxy、Contour 和 Traefik 等都有 Kubernetes 支持。
#### 2.1.1 运行 Hello, World 应用
以下是运行 Hello, World 应用并确认其访问性的步骤:
1. 切换到相应文件夹:
```bash
cd ch15
```
2. 部署 Web 应用:
```bash
kubectl apply -f hello-kiamol/
```
3. 确认服务是集群内部的:
```bash
kubectl get svc hello-kiamol
```
4. 启动端口转发:
```bash
kubectl port-forward svc/hello-kiamol 8015:80
```
5. 浏览到 `http://localhost:8015`,然后按 `Ctrl - C` 退出端口转发。
#### 2.1.2 部署 Nginx 入口控制器
部署 Nginx 入口控制器的步骤如下:
1. 创建 Nginx 入口控制器的部署和服务:
```bash
kubectl apply -f ingress-nginx/
```
2. 确认服务公开可用:
```bash
kubectl get svc -n kiamol-ingress-nginx
```
3. 获取代理的 URL:
```bash
kubectl get svc ingress-nginx-controller -o jsonpath='http://{.status.loadBalancer.ingress[0].*}' -n kiamol-ingress-nginx
```
4. 浏览到该 URL,会看到 404 错误页面,这证明服务正在接收流量并将其导向入口控制器,但尚无路由规则。
#### 2.1.3 部署 Ingress 对象
部署 Ingress 对象以指定路由规则,示例如下:
```yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-kiamol
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: hello-kiamol
servicePort: 80
```
部署规则:
```bash
kubectl apply -f hello-kiamol/ingress/localhost.yaml
```
确认 Ingress 对象已创建:
```bash
kubectl get ingress
```
刷新浏览器,即可看到 Hello, World 应用。
### 2.2 使用 Ingress 规则路由 HTTP 流量
Ingress 仅适用于 Web 流量(HTTP 和 HTTPS 请求),路由由主机名和路径两部分组成。
#### 2.2.1 指定主机名
可更新 Ingress 对象以指定主机名,示例如下:
```yaml
spec:
rules:
- host: hello.kiamol.local
http:
paths:
- path: /
backend:
serviceName: hello-kiamol
servicePort: 80
```
由于 `hello.kiamol.local` 域名不存在,需将其注册到本地 hosts 文件:
- 在 Windows 上:
```bash
./add-to-hosts.ps1 hello.kiamol.local ingress-nginx
```
- 在 Linux/macOS 上:
```bash
chmod +x add-to-hosts.sh && ./add-to-hosts.sh hello.kiamol.local ingress-nginx
```
更新 Ingress 对象:
```bash
ku
```
0
0
复制全文
相关推荐










