准备工作
- 首先打开tke集群的内网访问
- 然后配置/etc/hosts
- 最后配置一下k8s客户端的config文件
以上操作由于不可描述原因无法截图示意哈,请自行研究腾讯云官方文档,或者给我发邮件,附上你的腾讯云控制台账号密码, 收费150元我远程帮你操作一下哦~
- 为每一个pod建立一个k8s service
- 建立管理服务端口映射
以上每建一个service,收费10元,只让我示范建一个的话收费100元
- 找一台机器装个saltmaster
- 给每一个地区的每个集群的任意一个节点装上salt-minion
实现代码
开始贴正式的代码之前先说一下我们的模式,我们采用的是Prometheus的file_sd_configs 模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import os import json import argparse import subprocess def get_namespace(host_ip): # 你们的namespace最后有个特殊的标志,方便下面的grep过滤 cmd_namespace = "salt {ip} cmd.run 'kubectl get ns' |awk '{{if (NR>2){{print $1}}}}'|grep xx" namespace_list = subprocess.check_output(cmd_namespace.format(ip=host_ip),shell=True).strip().split('\n') return namespace_list def gen_prometheus_sd_json(): def main(host_ip,namespace_list,area) cmd= "salt {ip} cmd.run 'kubectl get services -n {namespace}' |awk '{{if (NR>2){{print $1,$4}}}}'" data_list =[] for namespace in namespace_list: results = subprocess.check_output(cmd.format(ip=host_ip,namespace=namespace),shell=True) if not results: contine for result in results.strip().split('\n'): data_dict = {'lable':{},'target':[]} app_job_name = result.split(' ')[0] pod_ip = result.split(' ')[1] data_dict['lable']['application'] = app_job_name data_dict['lable']['env'] = 'prod' data_dict['lable']['job'] = app_job_name # 下面ip后面的端口请自行根据业务修改 data_dict['target'].append(pod_ip + ':10086') data_list.append(data_dict) json_data = json.dumps(data_list, indent =4) json_file = 'tke_{}_sd_prod.json'.format(area) with open(json_file,'w') as tke: tke.write(json_data) # 自行替换salt后面的prometheus机器ip,salt文件服务器路径,Prometheus sd json路径 deploy_cmd = 'salt 192.168.0.1 cp.get_file salt://{0} /data/prometheus/{0}'.format(json_file) os.system(deploy_cmd) # 自行替换tke集群任意节点ip, 做好博客中的准备工作 xx_host_ip = '192.168.0.1' main(host_ip=xx_host_ip,namespace_list=get_namespace(), area='xx') gen_prometheus_sd_json() |
后续配置
- 自行配置一个定时任务来跑这个脚本
- 在Prometheus的主配置里面添加file_sd_configs 模式的服务发现,如下
1 2 3 4 5 6 7 8 9 10 |
- job_name: 'xx_sd_prod' scrape_interval: 5s scrape_timeout: 5s metrics_path: /admin/prometheus file_sd_configs: - files: - /xx/xx_sd_prod.json refresh_interval: 1m |