引自免费微信小程序:皆我百晓生
针对你在麒麟V10环境下遇到的问题,Rancher 的 Grafana 监控模块无法启动,并且报错 nginx: [emerg] host not found in upstream "localhost",这通常是因为 Nginx 无法正确地将流量转发到本地服务,可能是由于 /etc/hosts 文件没有正确的配置。
解决这个问题可以尝试通过为 Grafana 的 Pod 添加 Host Aliases,这样它就可以访问 localhost 而不需要依赖于 /etc/hosts 文件。下面是具体的步骤:
- 使用下面的 YAML 来更新
grafana-cluster-monitoringDeployment,添加一个 Host Alias 到 Pod 的配置中,使 Pod 可以通过localhost访问127.0.0.1:
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana-cluster-monitoring
namespace: cattle-prometheus
spec:
template:
spec:
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "localhost"
containers:
# ... (这里保留原有的 containers 配置)
- 将上面的 YAML 内容保存为一个文件,例如
update_grafana.yaml,然后应用这些更改:
kubectl apply -f update_grafana.yaml -n cattle-prometheus
- 如果上述方法无效,可能还需要更新 Grafana 的配置本身,确保它使用的代理指向正确的地址。可以在 Grafana 的数据卷中添加一个配置文件,覆盖默认配置。创建一个名为
grafana.ini的文件,内容如下:
[server]
http_port = :80
root_url = http://localhost:3000/
[proxy]
upstream_url = http://localhost:8080/
- 然后,将此配置文件添加到 Grafana 的 Deployment 中:
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana-cluster-monitoring
namespace: cattle-prometheus
spec:
template:
spec:
volumes:
- name: grafana-config
configMap:
name: grafana-configmap
containers:
- name: grafana-proxy
volumeMounts:
- mountPath: /etc/grafana/conf
name: grafana-config
# ... (这里保留原有的 containers 配置)
- 创建一个 ConfigMap 来存储
grafana.ini文件:
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-configmap
data:
grafana.ini: |-
[server]
http_port = :80
root_url = http://localhost:3000/
[proxy]
upstream_url = http://localhost:8080/
- 应用这个 ConfigMap:
kubectl apply -f grafana-configmap.yaml -n cattle-prometheus
- 最后,更新 Grafana 的 Deployment 以应用新的 ConfigMap:
kubectl set env deployment grafana-cluster-monitoring grafana_config_map=grafana-configmap -n cattle-prometheus
完成上述操作后,Grafana 应该能够正确地使用代理并将流量转发给内部服务,从而解决监控模块无法启动的问题。如果还有任何问题,请检查 Grafana 和相关组件的日志,以便进一步排查。

