目录
背景介绍
架构
部署
验证
背景介绍
应项目需要,对于平台的监控数据需要做统一存储和展示,对于原生的prometheus联邦功能需要进行静态配置联邦部分,无法实现动态添加prometheus的功能,因此我们讨论以后计划使用consul来达到动态配置的效果。这样新加入的prometheus只需要自动注册到consul,负责存储展示的prometheus只需要从consul拿到prometheus实例列表即可。
架 构
为了方便描述,基于上面的情况我们暂且先将参与的prometheus分一下角色。负责统一存储展示的Prometheus称为Data Center。各个环境下的prometheus称为 Data Node吧。大致架构如下:
如上图所示, Data Center我们使用了Prometheus-Operator,至于Prometheus-Operator的优点我就不介绍了,大家可以移步官网查看。图中的Data Node节点都是部署的原生的Prometheus。
-
部署consul(这里consul可以部署在任意k8s集群中,只要Data Node注册时能拿到改地址即可)
-
部署Data Node,并注册到consul
-
部署Prometheus-Operator,从consul发现已经注册的prometheus
注意: 经过采坑,推荐大家使用Prometheus-Operator v0.24.0及以后的版本。原因在于operator在v0.24.0之前对于additionalScrapeConfigs的解析有误。
部 署
-
部署Data Node prometheus.yaml
apiVersion: v1 kind: "Service" metadata: name: prometheus namespace: wisecloud-agent labels: name: prometheus-service spec: ports: - name: prometheus-server protocol: TCP port: 9090 targetPort: 9090 nodePort: 32001 selector: app: prometheus-server type: NodePort --- apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: name: prometheus app: prometheus-server com.wise2c.service: prometheus com.wise2c.stack: wisecloud-agent name: prometheus namespace: wisecloud-agent spec: replicas: 1 template: metadata: labels: name: prometheus com.wise2c.service: prometheus com.wise2c.stack: wisecloud-agent app: prometheus-server spec: hostNetwork: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: io.wise2c.service.prometheus operator: Exists serviceAccountName: wisecloud-agent containers: - name: service-register image: registry.cn-hangzhou.aliyuncs.com/tder/service-register imagePullPolicy: IfNotPresent env: - name: CONSUL_URL value: 192.168.5.11:8500 - name: LISTEN_PORT value: "8089" - name: SERVICE_NAME value: wisecloud-agent-prometheus - name: SERVICE_PORT value: "9090" - name: SERVICE_HEALTH_CHECK_PATH value: "/health" - name: prometheus image: prom/prometheus:v1.7.1 imagePullPolicy: IfNotPresent command: - "/bin/prometheus" args: - "-config.file=/etc/prometheus/prometheus.yml" - "-storage.local.path=/prometheus" - "-storage.local.retention=180h" ports: - containerPort: 9090 protocol: TCP volumeMounts: - name: data mountPath: "/prometheus" - name: config-volume mountPath: "/etc/prometheus" - name: alert-roles mountPath: "/etc/prometheus-rules" - name: local-timezone mountPath: "/etc/localtime" resources: requests: cpu: 100m memory: 100Mi limits: cpu: 500m memory: 2500Mi tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" volumes: - name: data hostPath: path: /prometheus - name: alert-roles hostPath: path: /etc/prometheus-rules - name: config-volume configMap: name: prometheus-config - name: local-timezone hostPath: path: /etc/localtime --- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: wisecloud-agent data: prometheus.yml: | global: scrape_interval: 30s scrape_timeout: 10s evaluation_interval: 30s external_labels: environment: k8s_test rule_files: - "/etc/prometheus-rules/*.rules" scrape_configs: - job_name: 'cadvisor' honor_labels: true metrics_path: /metrics/cadvisor scheme: https kubernetes_sd_configs: - role: endpoints namespaces: names: - kube-system bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: insecure_skip_verify: true relabel_configs: - source_labels: [__meta_kubernetes_service_label_k8s_app] separator: ; regex: kubelet replacement: $1 action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] separator: ; regex: https-metrics replacement: $1 action: keep - source_labels: [__meta_kubernetes_namespace] separator: ; regex: (.*) target_label: namespace replacement: $1 action: replace - source_labels: [__meta_kubernetes_pod_name] separator: ; regex: (.*) target_label: pod replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: service replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: job replacement: ${1} action: replace - source_labels: [__meta_kubernetes_service_label_k8s_app] separator: ; regex: (.+) target_label: job replacement: ${1} action: replace - separator: ; regex: (.*) target_label: endpoint replacement: https-metrics action: replace
针对上述Yaml我挑重要的部分做一下说明。
- name: service-register image: registry.cn-hangzhou.aliyuncs.com/tder/service-register imagePullPolicy: IfNotPresent env: - name: CONSUL_URL value: 192.168.5.11:8500 - name: LISTEN_PORT value: "8089" - name: SERVICE_NAME value: wisecloud-agent-prometheus - name: SERVICE_PORT value: "9090" - name: SERVICE_HEALTH_CHECK_PATH value: "/health"
如果上述参数不对可能导致实例注册不到consul。上面的ConfigMap为prometheus的监控配置文件,大家可以自行配置。注意这里的配置使用的是k8s中内置的cadvisor exporter。如果是自己部署的cadvisor需要修改ConfigMap中data的定义。
部署yaml kubectl apply -f prometheus.yaml -n xxx。效果如下:
-
部署Data Center。 为了简化Prometheus-Operator的部署可以使用
https://github.com/alanpeng/install-prometheus-operator (喜欢的可以star哦)。启动以后效果如下:
如果用户为了方便调试可以把svc列表中的grafana和prometheus端口暴露成NodePort。
目前为止Prometheus-Operator部署已经告一段落。接下来开始配置prometheus-operator的动态发现功能了。Prometheus-Operator虽然提供了ServiceMonitor来生成Prometheus需要的配置,但对于复杂的场景并不支持的很好,所以Operator中提出了AdditionalScrapeConfigs的属性。基于AdditionalScrapeConfigs配置需要对已经部署的Prometheus-Operator做一下修改
-
创建secrets(additional.yaml)
apiVersion: v1 data: prometheus-additional.yaml: LSBqb2JfbmFtZTogJ2ZlZGVyYXRlJwogIHNjcmFwZV9pbnRlcnZhbDogMTVzCgogIGhvbm9yX2xhYmVsczogdHJ1ZQogIG1ldHJpY3NfcGF0aDogJy9mZWRlcmF0ZScKCiAgcGFyYW1zOgogICAgJ21hdGNoW10nOgogICAgLSAne2pvYj0iazhzLWFwaS1leHBvcnRlciJ9JwogICAgLSAne2pvYj0ia3ViZS1zdGF0ZS1tZXRyaWNzIn0nCiAgICAtICd7am9iPSJrdWJlbGV0In0nCgogIGNvbnN1bF9zZF9jb25maWdzOgogICAgICAtIHNlcnZlcjogeHgueHgueHgueHg6ODUwMAogICAgICAgIHNlcnZpY2VzOiBbIndpc2VjbG91ZC1hZ2VudC1wcm9tZXRoZXVzIl0= kind: Secret metadata: labels: managed-by: prometheus-operator name: prometheus-k8s-new namespace: monitoring
针对面的prometheus-additional.yaml属性我要多介绍一下。把上面的base64编码进行解码,得到一下内容
- job_name: 'federate' scrape_interval: 15s honor_labels: true metrics_path: '/federate' params: 'match[]': - '{job="k8s-api-exporter"}' - '{job="kube-state-metrics"}' - '{job="kubelet"}' consul_sd_configs: - server: xx.xx.xx.xx:8500 services: - wisecloud-agent-prometheus
-
修改prometheus-prometheus.yaml
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: labels: prometheus: k8s name: k8s namespace: monitoring spec: alerting: alertmanagers: - name: alertmanager-main namespace: monitoring port: web baseImage: 192.168.5.14/library/prometheus nodeSelector: beta.kubernetes.io/os: linux replicas: 1 resources: requests: memory: 100Mi ruleSelector: matchLabels: prometheus: k8s role: alert-rules serviceAccountName: prometheus-k8s serviceMonitorNamespaceSelector: {} serviceMonitorSelector: {} version: v2.3.1 additionalScrapeConfigs: name: prometheus-k8s-new key: prometheus-additional.yaml
注意: Prometheus-Operator部署以后本身已经对该集群的相关资源进行了监控,如果prometheus和operator部署在同一环境最好删掉operator中的相关ServiceMonitor
kubectl delete servicemonitor alertmanager coredns kube-apiserver kube-controller-manager kube-scheduler kube-state-metrics kubelet prometheus prometheus-operator -n monitoring
部署上述文件
additional.yaml prometheus-prometheus.yaml
kubectl apply -f additional.yaml -f prometheus-prometheus.yaml
验 证
访问operator中的prometheus可以看到如下效果:
-
target一览
-
查询metrics
上图的environment=k8s-test就是在Data Node中定义的external-labels。看到上面的效果,表示联邦已经生效了。
关于睿云智合
深圳睿云智合科技有限公司成立于2012年,总部位于深圳,并分别在成都、深圳设立了研发中心,北京、上海设立了分支机构,核心骨干人员全部为来自金融、科技行业知名企业资深业务专家、技术专家。早期专注于为中国金融保险等大型企业提供创新技术、电子商务、CRM等领域专业咨询服务。
自2016年始,在率先将容器技术引进到中国保险行业客户后,公司组建了专业的容器技术产品研发和实施服务团队,旨在帮助中国金融行业客户将容器创新技术应用于企业信息技术支持业务发展的基础能力改善与提升,成为中国金融保险行业容器技术服务领导品牌。
此外,凭借多年来在呼叫中心领域的业务经验与技术积累,睿云智合率先在业界推出基于开源软交换平台FreeSwitch的微服务架构多媒体数字化业务平台,将语音、视频、webchat、微信、微博等多种客户接触渠道集成,实现客户统一接入、精准识别、智能路由的CRM策略,并以容器化治理来支持平台的全应用生命周期管理,显著提升了数字化业务处理的灵活、高效、弹性、稳定等特性,为帮助传统企业向“以客户为中心”的数字化业务转型提供完美的一站式整体解决方案。
大家快来扫我!
这里有你想了解的行业资讯和你所需要的技术干货!!
大家关注【Wise2C】后回复【进群】,睿云小助手会第一时间把拉你进入【 Docker企业落地实践群】,我们分享的各个企业案例项目的技术专家与用户代表,正在敬候您的光临!
若需要了解更多有关Wise系列PaaS产品的详情,请与我们的市场团队联系:contact@wise2c.com
以上所述就是小编给大家介绍的《k8s 中通过 consul 实现 prometheus 联邦功能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hadoop联邦机制实现多命名空间详细配置说明-Hadoop商业环境实战
- 中国联邦学习「五大流派」
- Prometheus 联邦及高可用详解
- 腾讯 AngelFL 联邦学习平台揭秘
- 云设计模式之 : 联邦身份模式
- Prometheus学习系列(二十五)之联邦
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。