- 安装prometheus

注:如果prometehsu采集不到kube-proxy节点,则有可能是kube-proxy的metrics数据走的
是127.0.0.1:10249端口,无法被外部采集到。可使用netstat -lntp | grep 10249查看,正确
结果如图所示
![AMR0~C9VI29T4`~ZKX]}C4.png
如采用二进制systemd安装方法可以去kube-proxy.conf文件,添加—metrics-bind-address=本机ip![N[0P0H9@[VSSV]GFCN~3QIJ.png](/uploads/projects/mingyi-10t0e@mwo5qi/851fa2aef76121c018afd46fef6c618e.png)
二.部署集群外prometheus的global节点">测试访问:![~4H4VC@`~0{Y$]6DMP0)QVB.png](/uploads/projects/mingyi-10t0e@mwo5qi/354d8e279463f040d887ea80d3aa6567.png)

注:如果prometehsu采集不到kube-proxy节点,则有可能是kube-proxy的metrics数据走的
是127.0.0.1:10249端口,无法被外部采集到。可使用netstat -lntp | grep 10249查看,正确
结果如图所示
![AMR0~C9VI29T4`~ZKX]}C4.png
如采用二进制systemd安装方法可以去kube-proxy.conf文件,添加—metrics-bind-address=本机ip![N[0P0H9@[VSSV]GFCN~3QIJ.png](/uploads/projects/mingyi-10t0e@mwo5qi/851fa2aef76121c018afd46fef6c618e.png)
二.部署集群外prometheus的global节点- 集群外直接用docker部署global节点: (此处监控的是集群内kube-proxy和kubelet组件,根据job_name指定)
- 运行集群外本地prometheus
docker run -d —name=prometheus -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus - ">进入集群外prometheus查看
![(0HSEZ{L]G4JIX]5V{(]W`W.png](/uploads/projects/mingyi-10t0e@mwo5qi/4a26697f46d8f2ea9d2e5cbfa8da3278.png)
一.部署集群内prometheus监控节点
##安装node-exporter
kubectl appy -f node-exporter.yaml
apiVersion: apps/v1kind: DaemonSetmetadata:name: node-exporternamespace: kube-systemlabels:k8s-app: node-exporterspec:selector:matchLabels:k8s-app: node-exportertemplate:metadata:labels:k8s-app: node-exporterspec:containers:- image: prom/node-exportername: node-exporterports:- containerPort: 9100protocol: TCPname: httptolerations:hostNetwork: truehostPID: truehostIPC: truerestartPolicy: Always
安装prometheus
kubectl apply -f configmap.yaml ##准备配置文件
apiVersion: v1kind: ConfigMapmetadata:name: prometheus-confignamespace: kube-systemdata:prometheus.yml: |global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'kubernetes-apiservers'kubernetes_sd_configs:- role: endpointsscheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https- job_name: 'kubernetes-nodes'kubernetes_sd_configs:- role: nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics- job_name: 'kubernetes-cadvisor'kubernetes_sd_configs:- role: nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]action: replacetarget_label: __scheme__regex: (https?)- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]action: replacetarget_label: __address__regex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: kubernetes_name- job_name: 'kubernetes-services'kubernetes_sd_configs:- role: servicemetrics_path: /probeparams:module: [http_2xx]relabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]action: keepregex: true- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: blackbox-exporter.example.com:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]target_label: kubernetes_name- job_name: 'kubernetes-ingresses'kubernetes_sd_configs:- role: ingressrelabel_configs:- source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]action: keepregex: true- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]regex: (.+);(.+);(.+)replacement: ${1}://${2}${3}target_label: __param_target- target_label: __address__replacement: blackbox-exporter.example.com:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_ingress_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_ingress_name]target_label: kubernetes_name- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replaceregex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2target_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name- job_name: 'kubernetes-schedule'scrape_interval: 5sstatic_configs:- targets: ['10.107.141.50:10251']- job_name: 'kubernetes-control-manager'scrape_interval: 5sstatic_configs:- targets: ['10.107.141.50:10252']- job_name: 'kubernetes-kubelet'scrape_interval: 5sstatic_configs:- targets: ['10.107.141.51:10255','10.107.141.52:10255']- job_name: 'kubernetes-kube-proxy'scrape_interval: 5sstatic_configs:- targets: ['10.107.141.51:10249','10.107.141.52:10249']
kubectl apply -f rbac.yaml ##准备deployment使用的rbac认证文件,给peomrtheus权限监控集群
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: prometheusrules:- apiGroups: [""]resources:- nodes- nodes/proxy- services- endpoints- podsverbs: ["get", "list", "watch"]- apiGroups:- extensionsresources:- ingressesverbs: ["get", "list", "watch"]- nonResourceURLs: ["/metrics"]verbs: ["get"]---apiVersion: v1kind: ServiceAccountmetadata:name: prometheusnamespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: prometheusroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheussubjects:- kind: ServiceAccountname: prometheusnamespace: kube-system
kubectl apply -f prometheus_deploy.yml
apiVersion: apps/v1kind: Deploymentmetadata:labels:name: prometheus-deploymentname: prometheusnamespace: kube-systemspec:replicas: 1selector:matchLabels:app: prometheustemplate:metadata:labels:app: prometheusspec:containers:- image: prom/prometheusname: prometheusimagePullPolicy: IfNotPresentcommand:- "/bin/prometheus"args:- "--config.file=/etc/prometheus/prometheus.yml"- "--storage.tsdb.path=/prometheus"- "--storage.tsdb.retention=24h"ports:- containerPort: 9090protocol: TCPvolumeMounts:- mountPath: "/prometheus"name: data- mountPath: "/etc/prometheus"name: config-volumeresources:requests:cpu: 100mmemory: 100Milimits:cpu: 500mmemory: 2500MiserviceAccountName: prometheusvolumes:- name: dataemptyDir: {}- name: config-volumeconfigMap:name: prometheus-config
kubectl apply -f prometheus_svc.yml
apiVersion: v1kind: Servicemetadata:labels:app: prometheusname: prometheusnamespace: kube-systemspec:type: NodePortports:- port: 9090targetPort: 9090nodePort: 30003selector:app: prometheus
kubectl get deployment -o wide -n kube-system ![2B9`[U]BI1C8JHLTX@`8H4V.png](/uploads/projects/mingyi-10t0e@mwo5qi/bc45269e9f7ed7ad123ed140d52e760c.png)
kubectl get svc -o wide -n kube-system![`Y(BE{LH[J}R]A4~9~7%RMG.png](/uploads/projects/mingyi-10t0e@mwo5qi/32d6f2b9d9027e0c56ab1f19c83df2e1.png)
##安装grafana
kubectl apply -f grafana_deploy.yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: grafana-corenamespace: kube-systemlabels:app: grafanacomponent: corespec:selector:matchLabels:app: grafanacomponent: corereplicas: 1template:metadata:labels:app: grafanacomponent: corespec:containers:- image: grafana/grafana:4.2.0name: grafana-coreimagePullPolicy: IfNotPresent# env:resources:# keep request = limit to keep this container in guaranteed classlimits:cpu: 100mmemory: 100Mirequests:cpu: 100mmemory: 100Mienv:# The following env variables set up basic auth twith the default admin user and admin password.- name: GF_AUTH_BASIC_ENABLEDvalue: "true"- name: GF_AUTH_ANONYMOUS_ENABLEDvalue: "false"# - name: GF_AUTH_ANONYMOUS_ORG_ROLE# value: Admin# does not really work, because of template variables in exported dashboards:# - name: GF_DASHBOARDS_JSON_ENABLED# value: "true"readinessProbe:httpGet:path: /loginport: 3000# initialDelaySeconds: 30# timeoutSeconds: 1volumeMounts:- name: grafana-persistent-storagemountPath: /varvolumes:- name: grafana-persistent-storageemptyDir: {}
kubectl apply -f grafana_deploy.yaml
apiVersion: v1kind: Servicemetadata:name: grafananamespace: kube-systemlabels:app: grafanacomponent: corespec:type: NodePortports:- port: 3000selector:app: grafanacomponent: core
测试访问:
![~4H4VC@`~0{Y$]6DMP0)QVB.png](/uploads/projects/mingyi-10t0e@mwo5qi/354d8e279463f040d887ea80d3aa6567.png)

注:如果prometehsu采集不到kube-proxy节点,则有可能是kube-proxy的metrics数据走的
是127.0.0.1:10249端口,无法被外部采集到。可使用netstat -lntp | grep 10249查看,正确
结果如图所示
![AMR0~C9VI29T4`~ZKX]}C4.png
如采用二进制systemd安装方法可以去kube-proxy.conf文件,添加—metrics-bind-address=本机ip
![N[0P0H9@[VSSV]GFCN~3QIJ.png](/uploads/projects/mingyi-10t0e@mwo5qi/851fa2aef76121c018afd46fef6c618e.png)
二.部署集群外prometheus的global节点
集群外直接用docker部署global节点: (此处监控的是集群内kube-proxy和kubelet组件,根据job_name指定)
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093rule_files:scrape_configs:- job_name: 'federate'scrape_interval: 15shonor_labels: truemetrics_path: '/federate'params:'match[]':- '{job="kubernetes-kube-proxy"}'- '{job="kubernetes-kubelet"}'static_configs:- targets:- '10.107.141.51:30003'
