如何把腾讯云TKE K8s容器服务集成到Prometheus服务发现

78次阅读
没有评论

共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。

如何把腾讯云 TKE K8s 容器服务集成到 Prometheus 服务发现

准备工作

  • 首先打开 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

   

正文完
 
sharp097
版权声明:本站原创文章,由 sharp097 2020-11-21发表,共计1898字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)