假设我编写一个像这样的基本 PromQL 查询
询问:
kube_deployment_spec_replicas{}
结果:
kube_deployment_spec_replicas{deployment="mydeployment",endpoint="myendpoint",instance="myinstance",job="myjob",namespace="default",pod="mypod",service="myservice"}
Run Code Online (Sandbox Code Playgroud)
有没有一种干净的方法可以从结果时间序列中省略instance和?pod
期望:
kube_deployment_spec_replicas{deployment="mydeployment",endpoint="myendpoint",job="myjob",namespace="default",service="myservice"}
Run Code Online (Sandbox Code Playgroud) 我正在虚拟机中运行Kubernetes,并阅读了基础教程,目前正在向PHP / Redis Guestbook示例添加日志记录和指标。我正在尝试安装kube-state-metrics:
git clone https://github.com/kubernetes/kube-state-metrics.git kube-state-metrics
kubectl create -f kube-state-metrics/kubernetes
Run Code Online (Sandbox Code Playgroud)
但是失败了。
kubectl describe pod --namespace kube-system kube-state-metrics-7d84474f4d-d5dg7
Run Code Online (Sandbox Code Playgroud)
...
警告不健康的28m(x8超过30m)kubelet,kubernetes-node1就绪性探针失败:获取http://192.168.129.102:8080/healthz:拨打tcp 192.168.129.102:8080:connect:连接被拒绝
kubectl logs --namespace kube-system kube-state-metrics-7d84474f4d-d5dg7 -c kube-state-metrics
Run Code Online (Sandbox Code Playgroud)
I0514 17:29:26.980707 1 main.go:85]使用默认收集器
I0514 17:29:26.980774 1 main.go:93]使用所有命名空间
I0514 17:29:26.980780 1 main.go:129]指标白名单:将以下各项列入黑名单:
W0514 17:29:26.980800 1 client_config.go:549] --kubeconfig和--master都未指定。使用inClusterConfig。这可能行不通。
I0514 17:29:26.983504 1 main.go:169]测试与服务器的通信
F0514 17:29:56.984025 1 main.go:137]无法创建客户端:与apiserver通信时出错:获取https://10.96.0.1:443 / version?timeout = 32s:拨打tcp 10.96.0.1:443:I / O超时
我不确定此10.96.0.1 IP是否正确。我的虚拟机位于桥接网络10.10.10.0/24和仅主机网络192.168.59.0/24中。初始化Kubernetes时,我使用了参数,--pod-network-cidr=192.168.0.0/16所以这是我期望的另一个IP范围。但是10.96.0.1看起来并不熟悉。
我是Kubernetes的新手,只做基础教程,所以我不知道现在该怎么做。如何修复或进一步调查?
编辑-其他信息:
kubectl get nodes -o wide
NAME STATUS …Run Code Online (Sandbox Code Playgroud) 我使用 Kubernetes 与 kube-state-metrics 和 Prometheus/grafana 来绘制 Kubernetes 集群的各种指标。
现在我想要绘制随时间推移每小时创建了多少个新POD 的图表。
该指标kube_pod_created包含创建时间戳作为值,但由于每个时隙中都有一个值,因此以下查询还会针对尚未创建新 POD 的时隙返回 >0 的结果:
count(rate(kube_pod_created[1h])) by(namespace)
Run Code Online (Sandbox Code Playgroud)
我可以在某种标准中使用该值来仅计算该值是否在“当前”时隙内吗?
我使用 kubernetes api 和 kube 状态指标通过 prometheus 远程监控 eks 集群。在 Kubernetes api 中,我们有一个指标container_cpu_usage_seconds_total可以给出 pod 的 CPU 使用情况。kube-state-metrics 中是否有类似的指标可以给出 cpu 使用情况。实际上,我正在尝试获取与 kubernetes api 完全不同的集群 cpu 使用率,下面是计算的 kube-state-metrics。
kube-state-metrics:
sum(kube_pod_container_resource_requests_cpu_cores) / sum(kube_node_status_allocatable_cpu_cores) * 100- 这给出了 101%
而 kube-state-metrics 给出的12%对我来说看起来很准确。
kubernetes-api:
sum (rate (container_cpu_usage_seconds_total{id="/",kubernetes_io_hostname=~"^$Node$", job=~"$job$"}[5m])) / sum (machine_cpu_cores{kubernetes_io_hostname=~"^$Node$", job=~"$job$"}) * 100
我认为 kube-state-metric 中没有任何指标可以提供与 kubernetes-api 相比的 cpu 使用情况
提前致谢。
根据定义,kube_pod_container_status_waiting_reason应该捕获处于 Waiting 状态的 pod 的原因。
我的 kubernetes 集群中有几个 Pod 位于 CrashLoopBackOff 中,但我没有看到kube_pod_container_status_waiting_reason. 它只捕获两个原因 - ErrImagePull 和 ContainerCreating。
~$ k get pods -o wide --show-all --all-namespaces | grep Crash
cattle-system cattle-cluster-agent-6f744c67cc-jlkjh 0/1 CrashLoopBackOff 2885 10d 10.233.121.247 k8s-4
cattle-system cattle-node-agent-6klkh 0/1 CrashLoopBackOff 2886 171d 10.171.201.127 k8s-2
cattle-system cattle-node-agent-j6r94 0/1 CrashLoopBackOff 2887 171d 10.171.201.110 k8s-3
cattle-system cattle-node-agent-nkfcq 0/1 CrashLoopBackOff 17775 171d 10.171.201.131 k8s-1
cattle-system cattle-node-agent-np76b 0/1 CrashLoopBackOff 2887 171d 10.171.201.89 k8s-4
cattle-system cattle-node-agent-pwn5v 0/1 CrashLoopBackOff 2859 171d 10.171.202.72 k8s-5 …Run Code Online (Sandbox Code Playgroud) kubernetes prometheus prometheus-operator prometheus-alertmanager kube-state-metrics
例如,我有 StatefulSet,其上应用了自定义标签/注释。
每个人都提到应该使用这两个指标,因为kube-state-metrics也应该生成标签/注释。
kube_statefulset_annotations
kube_statefulset_labels
Run Code Online (Sandbox Code Playgroud)
问题是,我只能看到默认的(job、instance、namespace、...),但看不到额外添加的标签/注释。
我正在测试的清单示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
annotations:
label_network: "111"
labels:
app: testing-labels
label_STATEFULSET_LABEL: "111"
label_network: "111"
name: testing-labels
namespace: sre-test
spec:
selector:
matchLabels:
app: testing-labels
serviceName: testing-labels-headless
template:
metadata:
labels:
app: testing-labels
label_network: "111"
Run Code Online (Sandbox Code Playgroud)
我添加了很多不同的标签/注释,但kube_statefulset_labels{statefulset='testing-labels'}返回:
kube_statefulset_labels{container="kube-rbac-proxy-main",instance="10.2.23.229:8443",job="kube-state-metrics",namespace="sre-test",prometheus="aws-monitoring/k8s “,prometheus_replica =“prometheus-k8s-1”,statefulset =“测试标签”}
...当然不包含任何额外的标签。有什么想法会有帮助吗?