# -*- coding: utf-8 -*- import requests import subprocess # 获取 node-exporter 的 Pod 名称和节点名称 pod_info_bytes = subprocess.check_output("kubectl -n monitor get po -owide -l app=node-exporter --no-headers", shell=True) # 将二进制数据转换为字符串并按行分割 # pod_info = pod_info_bytes.strip().split('\n') pod_info = pod_info_bytes.decode('utf-8').strip().split('\n') # 提取 Pod 名称和节点名称 pod_names = [info.split()[0] for info in pod_info] node_ips = [info.split()[5] for info in pod_info] node_names = [info.split()[6] for info in pod_info] # 确保名称数量一致 if len(pod_names) != len(node_names): print("Error: 节点数量与 Pod 数量不匹配.") exit(1) # 定义 Consul agent 的端点 consul_endpoint = "http://consul.opsx.top/v1/agent/service/register" # 遍历每个 Pod 并将服务注册到 Consul for pod_name,node_ip, node_name in zip(pod_names, node_ips,node_names): # print("pod: {} ip:{} node: {}".format(pod_name, node_ip,node_name)) # 定义服务注册的数据 data = { "id": f"{node_name}-{pod_name}", "name": "node-exporter", "address": f"{node_ip}", "port": 9100, "checks": [{ "http": f"http://{node_ip}:9100/metrics", "interval": "5s" }] } print(data) # 发送 PUT 请求以注册服务 response = requests.put(consul_endpoint, json=data) # 检查响应状态 if response.status_code == 200: print(f"服务 {pod_name} 注册成功.") else: print(f"无法注册服务 {pod_name}. 状态码: {response.status_code}") print(response.text)