kubernetes - 从 etcdctl 获取 ETCD 指标

标签 kubernetes etcd etcdctl

我正在尝试获取 ETCD 指标,例如 ETCD key 的数量和大小,以及通过 exec(ing)到 kubernetes pod(etcdctl)中向 ETCD 发出的请求数量,但我不确定为此使用什么命令。

替代方案(例如 cUrl)也会有所帮助。

谢谢您的帮助!

最佳答案

您需要从 etcd 中提取信息并过滤您想要的内容。
为了说明,我将向您展示如何从 etcd 获取总键数。

NOTE: Tested in kubernetes 1.18.2.



# Getting etcd pod IP and set a local variable:
ADVERTISE_URL="https://$(kubectl get pods -n kube-system -l=component=etcd -o=jsonpath='{ .items[*].status.podIP }'):2379"

# Getting ectd pod name and set a variable ETCD_POD
ETCD_POD=$(kubectl get pods -n kube-system -l=component=etcd -o=jsonpath='{ .items[*].metadata.name}')

# Extracting all etcd keys/values to a file called "etcd-kv.json":
kubectl exec $ETCD_POD -n kube-system -- sh -c \
"ETCDCTL_API=3 etcdctl \
--endpoints $ADVERTISE_URL \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--key /etc/kubernetes/pki/etcd/server.key \
--cert /etc/kubernetes/pki/etcd/server.crt \
get \"\" --prefix=true -w json" > etcd-kv.json

现在你已经拥有了来自 etcd 的所有键/值对,你只需要过滤来提取你需要的信息。例如,要列出所有键,您可以使用以下命令:
for k in $(cat etcd-kv.json | jq '.kvs[].key' | cut -d '"' -f2);  do echo $k | base64 --decode;  echo;  done

并计算键的数量,只需使用命令 wc -l在此命令的末尾,例如:
for k in $(cat etcd-kv.json | jq '.kvs[].key' | cut -d '"' -f2);  do echo $k | base64 --decode; echo; done | echo "Total keys=$(wc -l)"
Total keys=308

引用文献:

A closer look at etcd: The brain of a kubernetes cluster

关于kubernetes - 从 etcdctl 获取 ETCD 指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61817806/

相关文章:

c# - AKS集群Pod Kube配置位置

kubernetes - 我的 ingress.yaml 中是否需要 Namespace、Secret、ServiceAccount 和 ConfigMap?

json - Kubernetes/kubectl - "A container name must be specified"但似乎是这样?

kubernetes - Kubernetes 中的 etcd 需要单独的 CA?

docker swarm - etcd 集群不可用或配置错误

java - apache curator与etcd3详细对比

kubernetes etcdctl 它在哪里?

kubernetes - 从裸机 kubernetes 集群向互联网公开服务