- prometheus装到单独的机器上,需要监控外部k8s集群
配置k8s的sa和授权
#新建monitor-sa的服务账号,通过clusterrolebing绑定到clusterrole上
kubectl create ns monitor-sa
kubectl create serviceaccount monitor -n monitor-sa
kubectl create clusterrolebinding monitor-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=monitor-sa:monitor
#对user用户授权:
kubectl create clusterrolebinding anonymous-admin --clusterrole=cluster-admin --user=system:anonymous
kubectl create clusterrolebinding monitor-clusterrolebinding-2 --clusterrole=cluster-admin --user=system:serviceaccount:monitor:monitor-sa
#查看sa的secrets
kubectl get sa monitor -n monitor-sa -o yaml
##如果没有secrets,需要手动创建一个和sa绑定
tee secret-monitor-token.yaml <<'EOF'
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: monitor-token
namespace: monitor-sa
annotations:
kubernetes.io/service-account.name: monitor
EOF
#获取token
kubectl get secret monitor-token -n monitor-sa -o jsonpath='{.data.token}' | base64 --decode
#token需要写入到安装prometheus机器的这个文件中
tee /usr/local/prometheus-2.37.6.linux-amd64/k8s_token <<'EOF'
<token>
EOF
安装kube-state-metrics
#在工作节点解压镜像
docker load -i kube-state-metrics_1_9_0.tar.gz
ctr -n=k8s.io images import kube-state-metrics_1_9_0.tar.gz
#部署
kubectl apply -f kube-state-metrics-rbac.yaml
kubectl apply -f kube-state-metrics-deploy.yaml
kubectl apply -f kube-state-metrics-svc.yaml
配置prometheus
#在prometheus的机器上
cd /usr/local/prometheus-2.37.6.linux-amd64/
vim prometheus.yml
# my global config
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).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.40.180:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/usr/local/prometheus-2.37.6.linux-amd64/rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 指定监控哪些服务
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: 'xianchaonode1-node'
static_configs:
- targets: ['192.168.40.181:9100']
- job_name: 'xianchaomaster1-node'
static_configs:
- targets: ['192.168.40.180:9100']
- job_name: 'xianchaonode1-mysql'
static_configs:
- targets: ['192.168.40.181:9104']
- job_name: 'xianchaonode1-nginx'
static_configs:
- targets: ['192.168.40.181:9913']
- job_name: 'kubernetes-apiserver'
bearer_token_file: /usr/local/prometheus-2.37.6.linux-amd64/k8s_token
tls_config:
ca_file: /etc/kubernetes/pki/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- api_server: https://192.168.40.180:6443
role: endpoints
bearer_token_file: /usr/local/prometheus-2.37.6.linux-amd64/k8s_token
tls_config:
ca_file: /etc/kubernetes/pki/ca.crt
insecure_skip_verify: true
scheme: https
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-pod-container'
bearer_token_file: /usr/local/prometheus-2.37.6.linux-amd64/k8s_token
tls_config:
ca_file: /etc/kubernetes/pki/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- api_server: https://192.168.40.180:6443
role: endpoints
bearer_token_file: /usr/local/prometheus-2.37.6.linux-amd64/k8s_token
tls_config:
ca_file: /etc/kubernetes/pki/ca.crt
insecure_skip_verify: true
scheme: https
metrics_path: '/api/v1/nodes/xianchaonode1/proxy/metrics/cadvisor'
relabel_configs:
- source_labels: [__address__]
regex: '(.+):.*'
replacement: '192.168.40.180:6443'
target_label: __address__
- 重启prometheus
- 测试是否能访问apiserver
#在安装prometheus机器上
curl --cacert /etc/kubernetes/pki/ca.crt --header "Authorization: Bearer $(cat /usr/local/prometheus-2.37.6.linux-amd64/k8s_token)" https://192.168.40.180:6443/metrics
- 亦可浏览器登录prometheus,看是否能访问api-server/metrics
- Targets - kubernetes-apiserver