我是Prometheus的新手,而Kubernetes则相对较新,请多多包涵。我正在尝试测试Prometheus,并尝试了两种不同的方法。
将Prometheus作为kubernetes之外的docker容器运行。为此,我创建了这个Dockerfile:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
和这个Yaml文件:
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'kubernetes-apiservers'
scheme: http
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: endpoints
api_server: localhost:443
当我运行它时,我得到:
Failed to list *v1.Pod: Get http://localhost:443/api/v1/pods?limit=500&resourceVersion=0: dial tcp 127.0.0.1:443: connect: connection refused"
Failed to list *v1.Service: Get http://localhost:443/api/v1/pods?limit=500&resourceVersion=0: dial tcp 127.0.0.1:443: connect: connection refused"
Failed to list *v1.Endpoints: Get http://localhost:443/api/v1/pods?limit=500&resourceVersion=0: dial tcp 127.0.0.1:443: connect: connection refused"
循环播放。当我转到localhost:9090时,Prometheus将加载,但没有数据。
我认为将Prometheus部署为Kubernetes部署可能会有所帮助,所以我制作了这个Yaml并进行了部署。
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: prometheus-monitor
spec:
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus-monitor
image: prom/prometheus
# args:
# - '-config.file=/etc/prometheus/prometheus.yaml'
imagePullPolicy: IfNotPresent
ports:
- name: webui
containerPort: 9090
部署成功,但是如果我转到localhost:9090,则会得到“ ERR_SOCKET_NOT_CONNECTED”。 (我的端口已转发)
有人可以告诉我in进出out出Kubernetes的优势以及如何解决至少其中一个问题吗?
此外,我的配置文件被抑制,因为它给出了错误,一旦能够加载Prometheus,我将进行调查。
答案 0 :(得分:2)
部署容器时,Kubernetes不会将端口映射到群集的外部。
您还必须创建一个服务(可以在同一文件中),以使其可从您的工作站使用(将其添加到prometheus yaml):
---
apiVersion: v1
kind: Service
metadata:
name: prometheus-web
labels:
app: prometheus
spec:
type: NodePort
ports:
- port: 9090
protocol: TCP
targetPort: 9090
nodePort: 30090
name: webui
selector:
app: prometheus
NodePort在您拥有的所有节点上打开给定的端口。您应该可以使用http://localhost:30090/
查看前端默认情况下,kubernetes允许端口30000到32767用作NodePort类型(https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)。
请考虑阅读一般文档,以获取有关kubernetes中服务的更多信息:https://kubernetes.io/docs/concepts/services-networking/service/
答案 1 :(得分:1)
所以有2个不同的问题。开启:
您正在尝试连接到运行Prometheus的localhost:443
,并希望与Kubernetes API服务器进行通信。显然,在localhost:443上没有监听。您是否正在将端口转发到您的kube-apiserver?
在这种情况下,您需要公开您的部署端口。像这样:
kubectl expose deployment prmetheus-web --type=LoadBalancer # or
kubectl expose deployment prmetheus-web --type=NodePort
取决于您要如何公开您的服务。 NodePort在服务中公开它,该服务映射到Kubernetes节点上的端口(IPAddress:Port),而LoadBalancer使用外部负载均衡器公开部署,该负载均衡器可能会因您所使用的云(AWS,GCP,OpenStack,Azure等)而异。有关公开部署或DaemonSet或StatefulSet here的更多信息。有关服务here
希望有帮助。