如何监控 Kubernetes API Server - Sysdig
在 Kubernetes 环境中运行云应用程序时,学习如何监控 Kubernetes API 服务器至关重要。Kubernetes API 服务器是 Kubernetes 控制平面的核心组件,所有用户或内部组件与控制平面的交互都需要通过它完成。因此,确保对 Kubernetes API 服务器的正确监控对于集群的稳定运行至关重要。
什么是 Kubernetes API 服务器?
Kubernetes API 服务器是 Kubernetes 集群的关键组成部分,可以被视为控制平面的核心。它通过公开 HTTP API 接口提供前端服务,允许最终用户、Kubernetes 内部组件和外部组件之间进行通信。API 服务器提供了查询和请求 Kubernetes 对象信息的方式,同时也是修改这些对象状态的网关,例如 Pods、Deployments、ConfigMaps、Secrets 和 Namespaces 等。
Kubernetes API 服务器在 kube-system 命名空间中作为一个容器(kube-apiserver)运行。为了便于访问,它通过 default 命名空间中的名为 kubernetes 的服务公开。访问 Kubernetes API 服务器的 Pod 可以通过安全的 HTTP 端口 443 使用安装在 Pod 中的 ServiceAccount 令牌进行认证。
$ kubectl get pods -n kube-system | grep apiserver
kube-apiserver-k8s-control-1.lab.example.com 1/1 Running 6 54d
kube-apiserver-k8s-control-2.lab.example.com 1/1 Running 6 50d
kube-apiserver-k8s-control-3.lab.example.com 1/1 Running 5 50d
$ kubectl get svc kubernetes -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 54d
任何 Kubernetes API 服务器的端点都可以从集群中的任意节点或运行在这些节点上的 Pod 访问。默认情况下,API 请求通过端口 6443 完成。如果用户尝试直接连接到这些端点之一,则需要提供客户端证书、密钥以及由 Kubernetes 证书颁发机构签署的 CA 证书。
如何监控 Kubernetes API 服务器?
Kubernetes API 服务器自带了一个度量端点,可以用来监控其运行状态。这个端点可以通过 kubernetes 服务的 HTTPS 端口(443)或任何端点的 HTTPS 端口(6443)访问,无需额外的导出器。
手动访问端点
您可以使用 [curl](https://www.explinks.com/wiki/what-are-curl-url-uri/) 或 wget 从主机网络或 Pod 中访问 kubernetes 服务的度量端点。需要注意的是,访问该端点需要 CA 文件(ca.crt)和认证令牌。分配给 Pod 的 ServiceAccount 必须具有足够的权限来访问这些度量数据。
$ kubectl get clusterrolebinding prometheus-server -n monitoring -o json | jq ".roleRef, .subjects"
{
"apiGroup": "rbac.authorization.k8s.io",
"kind": "ClusterRole",
"name": "prometheus-server"
}
[
{
"kind": "ServiceAccount",
"name": "prometheus-server",
"namespace": "monitoring"
}
]
$ curl --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
https://kubernetes.default.svc/metrics
配置 Prometheus 抓取 Kubernetes API 服务器指标
Prometheus 是一个强大的监控工具,您可以通过编辑其 ConfigMap 来配置抓取 Kubernetes API 服务器的指标。
$ kubectl get cm prometheus-server -n monitoring -o yaml > prometheus-server.yaml
$ vi prometheus-server.yaml
在 scrape_config 部分添加以下内容:
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- action: keep
regex: default;kubernetes;https
source_labels:
- __meta_kubernetes_namespace
- __meta_kubernetes_service_name
- __meta_kubernetes_endpoint_port_name
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
然后应用新的配置并重新创建 Prometheus Pod:
$ kubectl replace -f prometheus-server.yaml -n monitoring
$ kubectl delete pod prometheus-server-5df7b6d9bb-m2d27 -n monitoring
完成后,您可以通过 Prometheus 的 Web 界面查看 Kubernetes API 服务器的指标。
监控 API 服务器:需要关注的关键指标
在监控 Kubernetes API 服务器时,以下四个黄金信号尤为重要:
1. 延迟
延迟表示服务请求所需的时间。监控 API 服务器请求的延迟可以帮助您了解其响应性能。高延迟可能表明某些组件存在性能问题。
关键指标:apiserver_request_duration_seconds_bucket
histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers"}[5m])) by (verb, le))
2. 流量
流量表示 API 服务器处理的总请求量。您可以按资源、动词(如 GET、POST)或 HTTP 状态码分析流量。
关键指标:apiserver_request_total
sum(rate(apiserver_request_total{job="kubernetes-apiservers",code=~"2.."}[5m]))
3. 错误
监控错误率和错误量可以帮助快速识别问题。将错误率与总请求量进行比较,可以评估错误的严重性。
关键指标:apiserver_request_total(按 HTTP 状态码分组)
sum(rate(apiserver_request_total{job="kubernetes-apiservers",code=~"[45].."}[5m])) * 100 / sum(rate(apiserver_request_total{job="kubernetes-apiservers"}[5m]))
4. 饱和度
饱和度表示系统资源的使用情况,例如 CPU、内存和网络带宽。监控这些指标可以帮助您了解 API 服务器的负载情况。
关键指标:workqueue_adds_total
rate(workqueue_adds_total{job="kubernetes-apiservers"}[5m])
结论
Kubernetes API 服务器是控制平面的核心组件,所有对 Kubernetes 对象的查询和状态修改都需要通过它完成。监控 API 服务器的运行状态对于确保集群的稳定性和性能至关重要。
通过本文,您了解了如何监控 Kubernetes API 服务器,包括使用 Prometheus 抓取指标的方法,以及需要重点关注的关键指标。掌握这些知识后,您可以更高效地监控和优化 Kubernetes 集群的运行状态。
原文链接: https://sysdig.com/blog/monitor-kubernetes-api-server/
最新文章
- 如何在移动应用上进行API测试 – Mobot应用测试平台
- 移动应用API测试 | 如何使用Testsigma进行测试?
- Java API:定义、包、类型及示例详解
- 在 Power Apps 中使用 Web API 的挑战 – CloudThat
- 7 个创新的照片编辑 API
- 2025 Web Agent RPA 2.0|浏览器自动化场景落地路径与开源代码仓库
- 构建高效API的10个API设计最佳实践
- 针对API漏洞挖掘技巧学习
- Python实现免费百度天气API调用,获取最新实时天气数据
- 如何监控 Kubernetes API Server – Sysdig
- python并行组合生成原理及实现
- 终极对决:KimiGPT与GLM-4文本生成模型API深度比较