共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。
准备工作
- 首先打开 tke 集群的内网访问
- 然后配置 /etc/hosts
- 最后配置一下 k8s 客户端的 config 文件
以上操作由于不可描述原因无法截图示意哈,请自行研究腾讯云官方文档,或者给我发邮件,附上你的腾讯云控制台账号密码,收费 150 元我远程帮你操作一下哦~
- 为每一个 pod 建立一个 k8s service
- 建立管理服务端口映射
以上每建一个 service,收费 10 元,只让我示范建一个的话收费 100 元
- 找一台机器装个 saltmaster
- 给每一个地区的每个集群的任意一个节点装上 salt-minion
实现代码
开始贴正式的代码之前先说一下我们的模式,我们采用的是 Prometheus 的 file_sd_configs 模式。
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 模式的服务发现,如下
- 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
正文完
发表至: Linux运维
2020-11-22