一、问题描述
kube-prometheus 的安装,我们可以看到监控指标大部分的配置都是正常的,只有两个没有管理到对应的监控目标,比如 kube-controller-manager 和 kube-scheduler 这两个系统组件。
二、问题处理
请在各 master 节点上执行如下指令,用以验证对应端口处于可访问的状态:
curl -ik https://master节点的ip地址:10257
curl -ik https://master节点的ip地址:10259
- 如果 master 节点的 10257 / 10259 端口不可访问,并且您使用 kubeadm 安装集群,请修改
/etc/kubernetes/manifests/kube-controller-manager.yaml
文件和/etc/kubernetes/manifests/kube-scheduler.yaml
文件,将其中的- --bind-address=127.0.0.1修改为 - --bind-address=0.0.0.0 - 如果 master 节点的 10257 / 10259 端口不可访问,影响是不能获取 kube-controller-manager 以及 kube-scheduler 的监控结果,此监控的其他功能不受影响
由于manifests目录下是以静态Pod运行在集群中的,所以只要修改静态Pod目录下对应的yaml文件即可。等待一会后,对应服务会自动重启,所以不需要我们手动重启。
1. 新增kubeScheduler监控
cat > prometheus-kubeSchedulerService.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
namespace: kube-system
name: kube-scheduler
labels:
app.kubernetes.io/name: kube-scheduler
spec:
selector:
component: kube-scheduler
type: ClusterIP
clusterIP: None
ports:
- name: https-metrics
port: 10259
targetPort: 10259
protocol: TCP
EOF
kubectl apply -f prometheus-kubeSchedulerService.yaml
2. 新增kubeControllerManager监控
cat > prometheus-kubeControllerManagerService.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
namespace: kube-system
name: kube-controller-manager
labels:
app.kubernetes.io/name: kube-controller-manager
spec:
selector:
component: kube-controller-manager
type: ClusterIP
clusterIP: None
ports:
- name: https-metrics
port: 10257
targetPort: 10257
protocol: TCP
EOF
kubectl apply -f prometheus-kubeControllerManagerService.yaml
三、问题验证
等待一会Prometheus界面获取到了kube-controller-manager、kubeScheduler信息,就说明正常了
报警邮件也恢复了正常。
四、小结
核查 Kubernetes 集群中的一些资源对象、节点以及组件监控,主要由以下三个步骤组成:
- 第一步核查 ServiceMonitor 对象,其用于 Prometheus 添加监控项;
- 第二步核查 ServiceMonitor 对象关联 metrics 数据接口的一个 Service 对象;
- 第三步确保 Service 对象可以正确获取到 metrics 数据。