> ## Documentation Index
> Fetch the complete documentation index at: https://doc.lwops.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 9.3. 基于k8s apiserver方式监控

平台通过api监控k8s 监控方式：python+zabbix\_sender 原理：python的request库，请求k8s的api地址，对数据处理。

## 第一步：获取k8s的api地址

查看K8S的api地址的命令如下（最好在K8s集群的master上执行这条命令，因为如果在node节点上执行该命令有可能会获取旧的api地址） <img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-01.png" alt="9.3. 基于k8s apiserver方式监控 操作截图 1" />

```plain theme={null}
cat /etc/kubernetes/kubelet.conf | grep server
```

## 第二步：创建具备get、list权限的服务账号并生成tokon

注意：此过程k8s1.24版本之前和k8s1.24版本之后的命会不同。!!

查看k8s版本命令

```plain theme={null}
kubeadm version
```

![9.3. 基于k8s apiserver方式监控 操作截图 2](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-02.png)

k8s-1.24前的版本(可在公司环境192.168.2.40测试，root/91LWp\@sssw0rd)

登录k8s的master节点创建执行下面命令

## **1**.**创建只读服务用户monitor的并获取token**

创建一个服务账号monitor，指定Kube-system命名空间

```plain theme={null}
kubectl create serviceaccount monitor --namespace kube-system
```

![9.3. 基于k8s apiserver方式监控 操作截图 3](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-03.png)

创建一个可以调用所有资源get,list操作的的集群角色monitor-role

```plain theme={null}
kubectl create clusterrole monitor-role --verb=get,list --resource=*.*
```

![9.3. 基于k8s apiserver方式监控 操作截图 4](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-04.png)

给服务账号monitor绑定一个monitor-role的角色

```plain theme={null}
kubectl create clusterrolebinding monitor-binding --clusterrole=monitor-role --serviceaccount=kube-system:monitor
```

![9.3. 基于k8s apiserver方式监控 操作截图 5](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-05.png)

获取服务账号monitor的token。获取的token只能执行get和list，无法调用接口使用post或者其他请求，会比较安全

```plain theme={null}
kubectl describe secret -n kube-system $(kubectl get sa -n kube-system monitor -o jsonpath='{.secrets[0].name}')
```

![9.3. 基于k8s apiserver方式监控 操作截图 6](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-06.png)

k8s-1.24后的版本(客户环境测试过1.24之后版本，1.24版本默认先用1.24版本之前的授权的命令)

登录k8s的master节点创建执行下面命令

## **1**.**创建只读服务用户monitor的并获取token**

创建一个服务账号monitor，指定Kube-system命名空间

```plain theme={null}
kubectl create serviceaccount monitor --namespace kube-system
```

![9.3. 基于k8s apiserver方式监控 操作截图 7](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-07.png)

创建一个可以调用所有资源get,list操作的的集群角色monitor-role

```plain theme={null}
kubectl create clusterrole monitor-role --verb=get,list --resource=*.*
```

![9.3. 基于k8s apiserver方式监控 操作截图 8](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-08.png)

给服务账号monitor绑定一个monitor-role的角色

```plain theme={null}
kubectl create clusterrolebinding monitor-binding --clusterrole=monitor-role --serviceaccount=kube-system:monitor
```

![9.3. 基于k8s apiserver方式监控 操作截图 9](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-09.png)

k8s的1.24版本以后无法自动生成token，需要用户指定用户创建!!(k8s1.24之前和之后的版本就是额外多了这步操作，否则下面的命令，无法查看授权

登录k8s的master服务器上传附件中的create\_monitor\_token.yaml到服务器目录，且执行下面命令

```plain theme={null}
kubectl apply -f create_monitor_token.yaml
```

注意：create\_monitor\_token.yaml里面的命名空间和账号必须与上面创建的服务账号一致，无法会执行报错!!

![9.3. 基于k8s apiserver方式监控 操作截图 10](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-10.png)

获取服务账号monitor的token。获取的token只能执行get和list，无法调用接口使用post或者其他请求，会比较安全

```plain theme={null}
kubectl describe secret -n kube-system $(kubectl get sa -n kube-system monitor -o jsonpath='{.secrets[0].name}')
```

![9.3. 基于k8s apiserver方式监控 操作截图 11](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-11.png)

第三步：监控k8s

导入k8s模版到监控平台。 填写token，zabbix\_api的地址，和server的ip三个宏变量

![9.3. 基于k8s apiserver方式监控 操作截图 12](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-12.png)

上传get\_k8s\_new\.py脚本到外部采集目录。修改sender路径即可。 <img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-13.png" alt="9.3. 基于k8s apiserver方式监控 操作截图 13" />

## 四、调试说明

脚本上传到外部检查目录后。python3 get\_k8s\_new\.py可查看调用方法

![9.3. 基于k8s apiserver方式监控 操作截图 14](https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-14.png)

如要查看脚本的执行详情，可执行最后面加debug <img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-15.png" alt="9.3. 基于k8s apiserver方式监控 操作截图 15" />

加debug参数，可查看接口地址，接口数据，和sender命令 <img src="https://lwweb.oss-cn-shenzhen.aliyuncs.com/docs/images/yuque/k8s-apiserver-monitor/image-16.png" alt="9.3. 基于k8s apiserver方式监控 操作截图 16" />
